PageSourceSearch

https://app.sgwidget.com/js/app.js

js sgwidget.com collected 2026-10-03 21:21:53 UTC 2,683,946 bytes, 82,960 lines download raw bytes

vendor: 3,595 bytes, lines 1-88
1/******/ (function(modules) { // webpackBootstrap
2/******/ 	// The module cache
3/******/ 	var installedModules = {};
4/******/
5/******/ 	// The require function
6/******/ 	function __webpack_require__(moduleId) {
7/******/
8/******/ 		// Check if module is in cache
9/******/ 		if(installedModules[moduleId]) {
10/******/ 			return installedModules[moduleId].exports;
11/******/ 		}
12/******/ 		// Create a new module (and put it into the cache)
13/******/ 		var module = installedModules[moduleId] = {
14/******/ 			i: moduleId,
15/******/ 			l: false,
16/******/ 			exports: {}
17/******/ 		};
18/******/
19/******/ 		// Execute the module function
20/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21/******/
22/******/ 		// Flag the module as loaded
23/******/ 		module.l = true;
24/******/
25/******/ 		// Return the exports of the module
26/******/ 		return module.exports;
27/******/ 	}
28/******/
29/******/
30/******/ 	// expose the modules object (__webpack_modules__)
31/******/ 	__webpack_require__.m = modules;
32/******/
33/******/ 	// expose the module cache
34/******/ 	__webpack_require__.c = installedModules;
35/******/
36/******/ 	// define getter function for harmony exports
37/******/ 	__webpack_require__.d = function(exports, name, getter) {
38/******/ 		if(!__webpack_require__.o(exports, name)) {
39/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
40/******/ 		}
41/******/ 	};
42/******/
43/******/ 	// define __esModule on exports
44/******/ 	__webpack_require__.r = function(exports) {
45/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
46/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
47/******/ 		}
48/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
49/******/ 	};
50/******/
51/******/ 	// create a fake namespace object
52/******/ 	// mode & 1: value is a module id, require it
53/******/ 	// mode & 2: merge all properties of value into the ns
54/******/ 	// mode & 4: return value when already ns object
55/******/ 	// mode & 8|1: behave like require
56/******/ 	__webpack_require__.t = function(value, mode) {
57/******/ 		if(mode & 1) value = __webpack_require__(value);
58/******/ 		if(mode & 8) return value;
59/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
60/******/ 		var ns = Object.create(null);
61/******/ 		__webpack_require__.r(ns);
62/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
63/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
64/******/ 		return ns;
65/******/ 	};
66/******/
67/******/ 	// getDefaultExport function for compatibility with non-harmony modules
68/******/ 	__webpack_require__.n = function(module) {
69/******/ 		var getter = module && module.__esModule ?
70/******/ 			function getDefault() { return module['default']; } :
71/******/ 			function getModuleExports() { return module; };
72/******/ 		__webpack_require__.d(getter, 'a', getter);
73/******/ 		return getter;
74/******/ 	};
75/******/
76/******/ 	// Object.prototype.hasOwnProperty.call
77/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
78/******/
79/******/ 	// __webpack_public_path__
80/******/ 	__webpack_require__.p = "/";
81/******/
82/******/
83/******/ 	// Load entry module and return exports
84/******/ 	return __webpack_require__(__webpack_require__.s = 0);
85/******/ })
86/************************************************************************/
87/******/ ({
88
vendor: 2,531 bytes, lines 89-166
89/***/ "./node_modules/asap/browser-asap.js":
90/*!*******************************************!*\
91  !*** ./node_modules/asap/browser-asap.js ***!
92  \*******************************************/
93/*! no static exports found */
94/***/ (function(module, exports, __webpack_require__) {
95
96"use strict";
97
98
99// rawAsap provides everything we need except exception management.
100var rawAsap = __webpack_require__(/*! ./raw */ "./node_modules/asap/browser-raw.js");
101// RawTasks are recycled to reduce GC churn.
102var freeTasks = [];
103// We queue errors to ensure they are thrown in right order (FIFO).
104// Array-as-queue is good enough here, since we are just dealing with exceptions.
105var pendingErrors = [];
106var requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError);
107
108function throwFirstError() {
109    if (pendingErrors.length) {
110        throw pendingErrors.shift();
111    }
112}
113
114/**
115 * Calls a task as soon as possible after returning, in its own event, with priority
116 * over other events like animation, reflow, and repaint. An error thrown from an
117 * event will not interrupt, nor even substantially slow down the processing of
118 * other events, but will be rather postponed to a lower priority event.
119 * @param {{call}} task A callable object, typically a function that takes no
120 * arguments.
121 */
122module.exports = asap;
123function asap(task) {
124    var rawTask;
125    if (freeTasks.length) {
126        rawTask = freeTasks.pop();
127    } else {
128        rawTask = new RawTask();
129    }
130    rawTask.task = task;
131    rawAsap(rawTask);
132}
133
134// We wrap tasks with recyclable task objects.  A task object implements
135// `call`, just like a function.
136function RawTask() {
137    this.task = null;
138}
139
140// The sole purpose of wrapping the task is to catch the exception and recycle
141// the task object after its single use.
142RawTask.prototype.call = function () {
143    try {
144        this.task.call();
145    } catch (error) {
146        if (asap.onerror) {
147            // This hook exists purely for testing purposes.
148            // Its name will be periodically randomized to break any code that
149            // depends on its existence.
150            asap.onerror(error);
151        } else {
152            // In a web browser, exceptions are not fatal. However, to avoid
153            // slowing down the queue of pending tasks, we rethrow the error in a
154            // lower priority turn.
155            pendingErrors.push(error);
156            requestErrorThrow();
157        }
158    } finally {
159        this.task = null;
160        freeTasks[freeTasks.length] = this;
161    }
162};
163
164
165/***/ }),
166
vendor: 10,093 bytes, lines 167-402
167/***/ "./node_modules/asap/browser-raw.js":
168/*!******************************************!*\
169  !*** ./node_modules/asap/browser-raw.js ***!
170  \******************************************/
171/*! no static exports found */
172/***/ (function(module, exports, __webpack_require__) {
173
174"use strict";
175/* WEBPACK VAR INJECTION */(function(global) {
176
177// Use the fastest means possible to execute a task in its own turn, with
178// priority over other events including IO, animation, reflow, and redraw
179// events in browsers.
180//
181// An exception thrown by a task will permanently interrupt the processing of
182// subsequent tasks. The higher level `asap` function ensures that if an
183// exception is thrown by a task, that the task queue will continue flushing as
184// soon as possible, but if you use `rawAsap` directly, you are responsible to
185// either ensure that no exceptions are thrown from your task, or to manually
186// call `rawAsap.requestFlush` if an exception is thrown.
187module.exports = rawAsap;
188function rawAsap(task) {
189    if (!queue.length) {
190        requestFlush();
191        flushing = true;
192    }
193    // Equivalent to push, but avoids a function call.
194    queue[queue.length] = task;
195}
196
197var queue = [];
198// Once a flush has been requested, no further calls to `requestFlush` are
199// necessary until the next `flush` completes.
200var flushing = false;
201// `requestFlush` is an implementation-specific method that attempts to kick
202// off a `flush` event as quickly as possible. `flush` will attempt to exhaust
203// the event queue before yielding to the browser's own event loop.
204var requestFlush;
205// The position of the next task to execute in the task queue. This is
206// preserved between calls to `flush` so that it can be resumed if
207// a task throws an exception.
208var index = 0;
209// If a task schedules additional tasks recursively, the task queue can grow
210// unbounded. To prevent memory exhaustion, the task queue will periodically
211// truncate already-completed tasks.
212var capacity = 1024;
213
214// The flush function processes all tasks that have been scheduled with
215// `rawAsap` unless and until one of those tasks throws an exception.
216// If a task throws an exception, `flush` ensures that its state will remain
217// consistent and will resume where it left off when called again.
218// However, `flush` does not make any arrangements to be called again if an
219// exception is thrown.
220function flush() {
221    while (index < queue.length) {
222        var currentIndex = index;
223        // Advance the index before calling the task. This ensures that we will
224        // begin flushing on the next task the task throws an error.
225        index = index + 1;
226        queue[currentIndex].call();
227        // Prevent leaking memory for long chains of recursive calls to `asap`.
228        // If we call `asap` within tasks scheduled by `asap`, the queue will
229        // grow, but to avoid an O(n) walk for every task we execute, we don't
230        // shift tasks off the queue after they have been executed.
231        // Instead, we periodically shift 1024 tasks off the queue.
232        if (index > capacity) {
233            // Manually shift all values starting at the index back to the
234            // beginning of the queue.
235            for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {
236                queue[scan] = queue[scan + index];
237            }
238            queue.length -= index;
239            index = 0;
240        }
241    }
242    queue.length = 0;
243    index = 0;
244    flushing = false;
245}
246
247// `requestFlush` is implemented using a strategy based on data collected from
248// every available SauceLabs Selenium web driver worker at time of writing.
249// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593
250
251// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that
252// have WebKitMutationObserver but not un-prefixed MutationObserver.
253// Must use `global` or `self` instead of `window` to work in both frames and web
254// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.
255
256/* globals self */
257var scope = typeof global !== "undefined" ? global : self;
258var BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;
259
260// MutationObservers are desirable because they have high priority and work
261// reliably everywhere they are implemented.
262// They are implemented in all modern browsers.
263//
264// - Android 4-4.3
265// - Chrome 26-34
266// - Firefox 14-29
267// - Internet Explorer 11
268// - iPad Safari 6-7.1
269// - iPhone Safari 7-7.1
270// - Safari 6-7
271if (typeof BrowserMutationObserver === "function") {
272    requestFlush = makeRequestCallFromMutationObserver(flush);
273
274// MessageChannels are desirable because they give direct access to the HTML
275// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera
276// 11-12, and in web workers in many engines.
277// Although message channels yield to any queued rendering and IO tasks, they
278// would be better than imposing the 4ms delay of timers.
279// However, they do not work reliably in Internet Explorer or Safari.
280
281// Internet Explorer 10 is the only browser that has setImmediate but does
282// not have MutationObservers.
283// Although setImmediate yields to the browser's renderer, it would be
284// preferrable to falling back to setTimeout since it does not have
285// the minimum 4ms penalty.
286// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and
287// Desktop to a lesser extent) that renders both setImmediate and
288// MessageChannel useless for the purposes of ASAP.
289// https://github.com/kriskowal/q/issues/396
290
291// Timers are implemented universally.
292// We fall back to timers in workers in most engines, and in foreground
293// contexts in the following browsers.
294// However, note that even this simple case requires nuances to operate in a
295// broad spectrum of browsers.
296//
297// - Firefox 3-13
298// - Internet Explorer 6-9
299// - iPad Safari 4.3
300// - Lynx 2.8.7
301} else {
302    requestFlush = makeRequestCallFromTimer(flush);
303}
304
305// `requestFlush` requests that the high priority event queue be flushed as
306// soon as possible.
307// This is useful to prevent an error thrown in a task from stalling the event
308// queue if the exception handled by Node.js’s
309// `process.on("uncaughtException")` or by a domain.
310rawAsap.requestFlush = requestFlush;
311
312// To request a high priority event, we induce a mutation observer by toggling
313// the text of a text node between "1" and "-1".
314function makeRequestCallFromMutationObserver(callback) {
315    var toggle = 1;
316    var observer = new BrowserMutationObserver(callback);
317    var node = document.createTextNode("");
318    observer.observe(node, {characterData: true});
319    return function requestCall() {
320        toggle = -toggle;
321        node.data = toggle;
322    };
323}
324
325// The message channel technique was discovered by Malte Ubl and was the
326// original foundation for this library.
327// http://www.nonblocking.io/2011/06/windownexttick.html
328
329// Safari 6.0.5 (at least) intermittently fails to create message ports on a
330// page's first load. Thankfully, this version of Safari supports
331// MutationObservers, so we don't need to fall back in that case.
332
333// function makeRequestCallFromMessageChannel(callback) {
334//     var channel = new MessageChannel();
335//     channel.port1.onmessage = callback;
336//     return function requestCall() {
337//         channel.port2.postMessage(0);
338//     };
339// }
340
341// For reasons explained above, we are also unable to use `setImmediate`
342// under any circumstances.
343// Even if we were, there is another bug in Internet Explorer 10.
344// It is not sufficient to assign `setImmediate` to `requestFlush` because
345// `setImmediate` must be called *by name* and therefore must be wrapped in a
346// closure.
347// Never forget.
348
349// function makeRequestCallFromSetImmediate(callback) {
350//     return function requestCall() {
351//         setImmediate(callback);
352//     };
353// }
354
355// Safari 6.0 has a problem where timers will get lost while the user is
356// scrolling. This problem does not impact ASAP because Safari 6.0 supports
357// mutation observers, so that implementation is used instead.
358// However, if we ever elect to use timers in Safari, the prevalent work-around
359// is to add a scroll event listener that calls for a flush.
360
361// `setTimeout` does not call the passed callback if the delay is less than
362// approximately 7 in web workers in Firefox 8 through 18, and sometimes not
363// even then.
364
365function makeRequestCallFromTimer(callback) {
366    return function requestCall() {
367        // We dispatch a timeout with a specified delay of 0 for engines that
368        // can reliably accommodate that request. This will usually be snapped
369        // to a 4 milisecond delay, but once we're flushing, there's no delay
370        // between events.
371        var timeoutHandle = setTimeout(handleTimer, 0);
372        // However, since this timer gets frequently dropped in Firefox
373        // workers, we enlist an interval handle that will try to fire
374        // an event 20 times per second until it succeeds.
375        var intervalHandle = setInterval(handleTimer, 50);
376
377        function handleTimer() {
378            // Whichever timer succeeds will cancel both timers and
379            // execute the callback.
380            clearTimeout(timeoutHandle);
381            clearInterval(intervalHandle);
382            callback();
383        }
384    };
385}
386
387// This is for `asap.js` only.
388// Its name will be periodically randomized to break any code that depends on
389// its existence.
390rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;
391
392// ASAP was originally a nextTick shim included in Q. This was factored out
393// into this ASAP package. It was later adapted to RSVP which made further
394// amendments. These decisions, particularly to marginalize MessageChannel and
395// to capture the MutationObserver implementation in a closure, were integrated
396// back into ASAP proper.
397// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js
398
399/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
400
401/***/ }),
402
vendor: 361 bytes, lines 403-413
403/***/ "./node_modules/axios/index.js":
404/*!*************************************!*\
405  !*** ./node_modules/axios/index.js ***!
406  \*************************************/
407/*! no static exports found */
408/***/ (function(module, exports, __webpack_require__) {
409
410module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/lib/axios.js");
411
412/***/ }),
413
vendor: 5,974 bytes, lines 414-587
414/***/ "./node_modules/axios/lib/adapters/xhr.js":
415/*!************************************************!*\
416  !*** ./node_modules/axios/lib/adapters/xhr.js ***!
417  \************************************************/
418/*! no static exports found */
419/***/ (function(module, exports, __webpack_require__) {
420
421"use strict";
422
423
424var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
425var settle = __webpack_require__(/*! ./../core/settle */ "./node_modules/axios/lib/core/settle.js");
426var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js");
427var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./node_modules/axios/lib/helpers/parseHeaders.js");
428var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js");
429var createError = __webpack_require__(/*! ../core/createError */ "./node_modules/axios/lib/core/createError.js");
430
431module.exports = function xhrAdapter(config) {
432  return new Promise(function dispatchXhrRequest(resolve, reject) {
433    var requestData = config.data;
434    var requestHeaders = config.headers;
435
436    if (utils.isFormData(requestData)) {
437      delete requestHeaders['Content-Type']; // Let the browser set it
438    }
439
440    var request = new XMLHttpRequest();
441
442    // HTTP basic authentication
443    if (config.auth) {
444      var username = config.auth.username || '';
445      var password = config.auth.password || '';
446      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
447    }
448
449    request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);
450
451    // Set the request timeout in MS
452    request.timeout = config.timeout;
453
454    // Listen for ready state
455    request.onreadystatechange = function handleLoad() {
456      if (!request || request.readyState !== 4) {
457        return;
458      }
459
460      // The request errored out and we didn't get a response, this will be
461      // handled by onerror instead
462      // With one exception: request that using file: protocol, most browsers
463      // will return status as 0 even though it's a successful request
464      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
465        return;
466      }
467
468      // Prepare the response
469      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
470      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;
471      var response = {
472        data: responseData,
473        status: request.status,
474        statusText: request.statusText,
475        headers: responseHeaders,
476        config: config,
477        request: request
478      };
479
480      settle(resolve, reject, response);
481
482      // Clean up request
483      request = null;
484    };
485
486    // Handle low level network errors
487    request.onerror = function handleError() {
488      // Real errors are hidden from us by the browser
489      // onerror should only fire if it's a network error
490      reject(createError('Network Error', config, null, request));
491
492      // Clean up request
493      request = null;
494    };
495
496    // Handle timeout
497    request.ontimeout = function handleTimeout() {
498      reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',
499        request));
500
501      // Clean up request
502      request = null;
503    };
504
505    // Add xsrf header
506    // This is only done if running in a standard browser environment.
507    // Specifically not if we're in a web worker, or react-native.
508    if (utils.isStandardBrowserEnv()) {
509      var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./node_modules/axios/lib/helpers/cookies.js");
510
511      // Add xsrf header
512      var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?
513          cookies.read(config.xsrfCookieName) :
514          undefined;
515
516      if (xsrfValue) {
517        requestHeaders[config.xsrfHeaderName] = xsrfValue;
518      }
519    }
520
521    // Add headers to the request
522    if ('setRequestHeader' in request) {
523      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
524        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
525          // Remove Content-Type if data is undefined
526          delete requestHeaders[key];
527        } else {
528          // Otherwise add header to the request
529          request.setRequestHeader(key, val);
530        }
531      });
532    }
533
534    // Add withCredentials to request if needed
535    if (config.withCredentials) {
536      request.withCredentials = true;
537    }
538
539    // Add responseType to request if needed
540    if (config.responseType) {
541      try {
542        request.responseType = config.responseType;
543      } catch (e) {
544        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.
545        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.
546        if (config.responseType !== 'json') {
547          throw e;
548        }
549      }
550    }
551
552    // Handle progress if needed
553    if (typeof config.onDownloadProgress === 'function') {
554      request.addEventListener('progress', config.onDownloadProgress);
555    }
556
557    // Not all browsers support upload events
558    if (typeof config.onUploadProgress === 'function' && request.upload) {
559      request.upload.addEventListener('progress', config.onUploadProgress);
560    }
561
562    if (config.cancelToken) {
563      // Handle cancellation
564      config.cancelToken.promise.then(function onCanceled(cancel) {
565        if (!request) {
566          return;
567        }
568
569        request.abort();
570        reject(cancel);
571        // Clean up request
572        request = null;
573      });
574    }
575
576    if (requestData === undefined) {
577      requestData = null;
578    }
579
580    // Send the request
581    request.send(requestData);
582  });
583};
584
585
586/***/ }),
587
vendor: 2,132 bytes, lines 588-651
588/***/ "./node_modules/axios/lib/axios.js":
589/*!*****************************************!*\
590  !*** ./node_modules/axios/lib/axios.js ***!
591  \*****************************************/
592/*! no static exports found */
593/***/ (function(module, exports, __webpack_require__) {
594
595"use strict";
596
597
598var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js");
599var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js");
600var Axios = __webpack_require__(/*! ./core/Axios */ "./node_modules/axios/lib/core/Axios.js");
601var defaults = __webpack_require__(/*! ./defaults */ "./node_modules/axios/lib/defaults.js");
602
603/**
604 * Create an instance of Axios
605 *
606 * @param {Object} defaultConfig The default config for the instance
607 * @return {Axios} A new instance of Axios
608 */
609function createInstance(defaultConfig) {
610  var context = new Axios(defaultConfig);
611  var instance = bind(Axios.prototype.request, context);
612
613  // Copy axios.prototype to instance
614  utils.extend(instance, Axios.prototype, context);
615
616  // Copy context to instance
617  utils.extend(instance, context);
618
619  return instance;
620}
621
622// Create the default instance to be exported
623var axios = createInstance(defaults);
624
625// Expose Axios class to allow class inheritance
626axios.Axios = Axios;
627
628// Factory for creating new instances
629axios.create = function create(instanceConfig) {
630  return createInstance(utils.merge(defaults, instanceConfig));
631};
632
633// Expose Cancel & CancelToken
634axios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
635axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./node_modules/axios/lib/cancel/CancelToken.js");
636axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js");
637
638// Expose all/spread
639axios.all = function all(promises) {
640  return Promise.all(promises);
641};
642axios.spread = __webpack_require__(/*! ./helpers/spread */ "./node_modules/axios/lib/helpers/spread.js");
643
644module.exports = axios;
645
646// Allow use of default import syntax in TypeScript
647module.exports.default = axios;
648
649
650/***/ }),
651
vendor: 702 bytes, lines 652-682
652/***/ "./node_modules/axios/lib/cancel/Cancel.js":
653/*!*************************************************!*\
654  !*** ./node_modules/axios/lib/cancel/Cancel.js ***!
655  \*************************************************/
656/*! no static exports found */
657/***/ (function(module, exports, __webpack_require__) {
658
659"use strict";
660
661
662/**
663 * A `Cancel` is an object that is thrown when an operation is canceled.
664 *
665 * @class
666 * @param {string=} message The message.
667 */
668function Cancel(message) {
669  this.message = message;
670}
671
672Cancel.prototype.toString = function toString() {
673  return 'Cancel' + (this.message ? ': ' + this.message : '');
674};
675
676Cancel.prototype.__CANCEL__ = true;
677
678module.exports = Cancel;
679
680
681/***/ }),
682
vendor: 1,638 bytes, lines 683-751
683/***/ "./node_modules/axios/lib/cancel/CancelToken.js":
684/*!******************************************************!*\
685  !*** ./node_modules/axios/lib/cancel/CancelToken.js ***!
686  \******************************************************/
687/*! no static exports found */
688/***/ (function(module, exports, __webpack_require__) {
689
690"use strict";
691
692
693var Cancel = __webpack_require__(/*! ./Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
694
695/**
696 * A `CancelToken` is an object that can be used to request cancellation of an operation.
697 *
698 * @class
699 * @param {Function} executor The executor function.
700 */
701function CancelToken(executor) {
702  if (typeof executor !== 'function') {
703    throw new TypeError('executor must be a function.');
704  }
705
706  var resolvePromise;
707  this.promise = new Promise(function promiseExecutor(resolve) {
708    resolvePromise = resolve;
709  });
710
711  var token = this;
712  executor(function cancel(message) {
713    if (token.reason) {
714      // Cancellation has already been requested
715      return;
716    }
717
718    token.reason = new Cancel(message);
719    resolvePromise(token.reason);
720  });
721}
722
723/**
724 * Throws a `Cancel` if cancellation has been requested.
725 */
726CancelToken.prototype.throwIfRequested = function throwIfRequested() {
727  if (this.reason) {
728    throw this.reason;
729  }
730};
731
732/**
733 * Returns an object that contains a new `CancelToken` and a function that, when called,
734 * cancels the `CancelToken`.
735 */
736CancelToken.source = function source() {
737  var cancel;
738  var token = new CancelToken(function executor(c) {
739    cancel = c;
740  });
741  return {
742    token: token,
743    cancel: cancel
744  };
745};
746
747module.exports = CancelToken;
748
749
750/***/ }),
751
vendor: 427 bytes, lines 752-768
752/***/ "./node_modules/axios/lib/cancel/isCancel.js":
753/*!***************************************************!*\
754  !*** ./node_modules/axios/lib/cancel/isCancel.js ***!
755  \***************************************************/
756/*! no static exports found */
757/***/ (function(module, exports, __webpack_require__) {
758
759"use strict";
760
761
762module.exports = function isCancel(value) {
763  return !!(value && value.__CANCEL__);
764};
765
766
767/***/ }),
768
vendor: 2,740 bytes, lines 769-859
769/***/ "./node_modules/axios/lib/core/Axios.js":
770/*!**********************************************!*\
771  !*** ./node_modules/axios/lib/core/Axios.js ***!
772  \**********************************************/
773/*! no static exports found */
774/***/ (function(module, exports, __webpack_require__) {
775
776"use strict";
777
778
779var defaults = __webpack_require__(/*! ./../defaults */ "./node_modules/axios/lib/defaults.js");
780var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
781var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./node_modules/axios/lib/core/InterceptorManager.js");
782var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./node_modules/axios/lib/core/dispatchRequest.js");
783
784/**
785 * Create a new instance of Axios
786 *
787 * @param {Object} instanceConfig The default config for the instance
788 */
789function Axios(instanceConfig) {
790  this.defaults = instanceConfig;
791  this.interceptors = {
792    request: new InterceptorManager(),
793    response: new InterceptorManager()
794  };
795}
796
797/**
798 * Dispatch a request
799 *
800 * @param {Object} config The config specific for this request (merged with this.defaults)
801 */
802Axios.prototype.request = function request(config) {
803  /*eslint no-param-reassign:0*/
804  // Allow for axios('example/url'[, config]) a la fetch API
805  if (typeof config === 'string') {
806    config = utils.merge({
807      url: arguments[0]
808    }, arguments[1]);
809  }
810
811  config = utils.merge(defaults, {method: 'get'}, this.defaults, config);
812  config.method = config.method.toLowerCase();
813
814  // Hook up interceptors middleware
815  var chain = [dispatchRequest, undefined];
816  var promise = Promise.resolve(config);
817
818  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
819    chain.unshift(interceptor.fulfilled, interceptor.rejected);
820  });
821
822  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
823    chain.push(interceptor.fulfilled, interceptor.rejected);
824  });
825
826  while (chain.length) {
827    promise = promise.then(chain.shift(), chain.shift());
828  }
829
830  return promise;
831};
832
833// Provide aliases for supported request methods
834utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
835  /*eslint func-names:0*/
836  Axios.prototype[method] = function(url, config) {
837    return this.request(utils.merge(config || {}, {
838      method: method,
839      url: url
840    }));
841  };
842});
843
844utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
845  /*eslint func-names:0*/
846  Axios.prototype[method] = function(url, data, config) {
847    return this.request(utils.merge(config || {}, {
848      method: method,
849      url: url,
850      data: data
851    }));
852  };
853});
854
855module.exports = Axios;
856
857
858/***/ }),
859
vendor: 1,661 bytes, lines 860-923
860/***/ "./node_modules/axios/lib/core/InterceptorManager.js":
861/*!***********************************************************!*\
862  !*** ./node_modules/axios/lib/core/InterceptorManager.js ***!
863  \***********************************************************/
864/*! no static exports found */
865/***/ (function(module, exports, __webpack_require__) {
866
867"use strict";
868
869
870var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
871
872function InterceptorManager() {
873  this.handlers = [];
874}
875
876/**
877 * Add a new interceptor to the stack
878 *
879 * @param {Function} fulfilled The function to handle `then` for a `Promise`
880 * @param {Function} rejected The function to handle `reject` for a `Promise`
881 *
882 * @return {Number} An ID used to remove interceptor later
883 */
884InterceptorManager.prototype.use = function use(fulfilled, rejected) {
885  this.handlers.push({
886    fulfilled: fulfilled,
887    rejected: rejected
888  });
889  return this.handlers.length - 1;
890};
891
892/**
893 * Remove an interceptor from the stack
894 *
895 * @param {Number} id The ID that was returned by `use`
896 */
897InterceptorManager.prototype.eject = function eject(id) {
898  if (this.handlers[id]) {
899    this.handlers[id] = null;
900  }
901};
902
903/**
904 * Iterate over all the registered interceptors
905 *
906 * This method is particularly useful for skipping over any
907 * interceptors that may have become `null` calling `eject`.
908 *
909 * @param {Function} fn The function to call for each interceptor
910 */
911InterceptorManager.prototype.forEach = function forEach(fn) {
912  utils.forEach(this.handlers, function forEachHandler(h) {
913    if (h !== null) {
914      fn(h);
915    }
916  });
917};
918
919module.exports = InterceptorManager;
920
921
922/***/ }),
923
vendor: 1,019 bytes, lines 924-953
924/***/ "./node_modules/axios/lib/core/createError.js":
925/*!****************************************************!*\
926  !*** ./node_modules/axios/lib/core/createError.js ***!
927  \****************************************************/
928/*! no static exports found */
929/***/ (function(module, exports, __webpack_require__) {
930
931"use strict";
932
933
934var enhanceError = __webpack_require__(/*! ./enhanceError */ "./node_modules/axios/lib/core/enhanceError.js");
935
936/**
937 * Create an Error with the specified message, config, error code, request and response.
938 *
939 * @param {string} message The error message.
940 * @param {Object} config The config.
941 * @param {string} [code] The error code (for example, 'ECONNABORTED').
942 * @param {Object} [request] The request.
943 * @param {Object} [response] The response.
944 * @returns {Error} The created error.
945 */
946module.exports = function createError(message, config, code, request, response) {
947  var error = new Error(message);
948  return enhanceError(error, config, code, request, response);
949};
950
951
952/***/ }),
953
vendor: 2,918 bytes, lines 954-1051
954/***/ "./node_modules/axios/lib/core/dispatchRequest.js":
955/*!********************************************************!*\
956  !*** ./node_modules/axios/lib/core/dispatchRequest.js ***!
957  \********************************************************/
958/*! no static exports found */
959/***/ (function(module, exports, __webpack_require__) {
960
961"use strict";
962
963
964var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
965var transformData = __webpack_require__(/*! ./transformData */ "./node_modules/axios/lib/core/transformData.js");
966var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js");
967var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js");
968var isAbsoluteURL = __webpack_require__(/*! ./../helpers/isAbsoluteURL */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js");
969var combineURLs = __webpack_require__(/*! ./../helpers/combineURLs */ "./node_modules/axios/lib/helpers/combineURLs.js");
970
971/**
972 * Throws a `Cancel` if cancellation has been requested.
973 */
974function throwIfCancellationRequested(config) {
975  if (config.cancelToken) {
976    config.cancelToken.throwIfRequested();
977  }
978}
979
980/**
981 * Dispatch a request to the server using the configured adapter.
982 *
983 * @param {object} config The config that is to be used for the request
984 * @returns {Promise} The Promise to be fulfilled
985 */
986module.exports = function dispatchRequest(config) {
987  throwIfCancellationRequested(config);
988
989  // Support baseURL config
990  if (config.baseURL && !isAbsoluteURL(config.url)) {
991    config.url = combineURLs(config.baseURL, config.url);
992  }
993
994  // Ensure headers exist
995  config.headers = config.headers || {};
996
997  // Transform request data
998  config.data = transformData(
999    config.data,
1000    config.headers,
1001    config.transformRequest
1002  );
1003
1004  // Flatten headers
1005  config.headers = utils.merge(
1006    config.headers.common || {},
1007    config.headers[config.method] || {},
1008    config.headers || {}
1009  );
1010
1011  utils.forEach(
1012    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
1013    function cleanHeaderConfig(method) {
1014      delete config.headers[method];
1015    }
1016  );
1017
1018  var adapter = config.adapter || defaults.adapter;
1019
1020  return adapter(config).then(function onAdapterResolution(response) {
1021    throwIfCancellationRequested(config);
1022
1023    // Transform response data
1024    response.data = transformData(
1025      response.data,
1026      response.headers,
1027      config.transformResponse
1028    );
1029
1030    return response;
1031  }, function onAdapterRejection(reason) {
1032    if (!isCancel(reason)) {
1033      throwIfCancellationRequested(config);
1034
1035      // Transform response data
1036      if (reason && reason.response) {
1037        reason.response.data = transformData(
1038          reason.response.data,
1039          reason.response.headers,
1040          config.transformResponse
1041        );
1042      }
1043    }
1044
1045    return Promise.reject(reason);
1046  });
1047};
1048
1049
1050/***/ }),
1051
vendor: 925 bytes, lines 1052-1084
1052/***/ "./node_modules/axios/lib/core/enhanceError.js":
1053/*!*****************************************************!*\
1054  !*** ./node_modules/axios/lib/core/enhanceError.js ***!
1055  \*****************************************************/
1056/*! no static exports found */
1057/***/ (function(module, exports, __webpack_require__) {
1058
1059"use strict";
1060
1061
1062/**
1063 * Update an Error with the specified config, error code, and response.
1064 *
1065 * @param {Error} error The error to update.
1066 * @param {Object} config The config.
1067 * @param {string} [code] The error code (for example, 'ECONNABORTED').
1068 * @param {Object} [request] The request.
1069 * @param {Object} [response] The response.
1070 * @returns {Error} The error.
1071 */
1072module.exports = function enhanceError(error, config, code, request, response) {
1073  error.config = config;
1074  if (code) {
1075    error.code = code;
1076  }
1077  error.request = request;
1078  error.response = response;
1079  return error;
1080};
1081
1082
1083/***/ }),
1084
vendor: 1,130 bytes, lines 1085-1122
1085/***/ "./node_modules/axios/lib/core/settle.js":
1086/*!***********************************************!*\
1087  !*** ./node_modules/axios/lib/core/settle.js ***!
1088  \***********************************************/
1089/*! no static exports found */
1090/***/ (function(module, exports, __webpack_require__) {
1091
1092"use strict";
1093
1094
1095var createError = __webpack_require__(/*! ./createError */ "./node_modules/axios/lib/core/createError.js");
1096
1097/**
1098 * Resolve or reject a Promise based on response status.
1099 *
1100 * @param {Function} resolve A function that resolves the promise.
1101 * @param {Function} reject A function that rejects the promise.
1102 * @param {object} response The response.
1103 */
1104module.exports = function settle(resolve, reject, response) {
1105  var validateStatus = response.config.validateStatus;
1106  // Note: status is not exposed by XDomainRequest
1107  if (!response.status || !validateStatus || validateStatus(response.status)) {
1108    resolve(response);
1109  } else {
1110    reject(createError(
1111      'Request failed with status code ' + response.status,
1112      response.config,
1113      null,
1114      response.request,
1115      response
1116    ));
1117  }
1118};
1119
1120
1121/***/ }),
1122
vendor: 940 bytes, lines 1123-1154
1123/***/ "./node_modules/axios/lib/core/transformData.js":
1124/*!******************************************************!*\
1125  !*** ./node_modules/axios/lib/core/transformData.js ***!
1126  \******************************************************/
1127/*! no static exports found */
1128/***/ (function(module, exports, __webpack_require__) {
1129
1130"use strict";
1131
1132
1133var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1134
1135/**
1136 * Transform the data for a request or a response
1137 *
1138 * @param {Object|String} data The data to be transformed
1139 * @param {Array} headers The headers for the request or response
1140 * @param {Array|Function} fns A single function or Array of functions
1141 * @returns {*} The resulting transformed data
1142 */
1143module.exports = function transformData(data, headers, fns) {
1144  /*eslint no-param-reassign:0*/
1145  utils.forEach(fns, function transform(fn) {
1146    data = fn(data, headers);
1147  });
1148
1149  return data;
1150};
1151
1152
1153/***/ }),
1154
vendor: 3,157 bytes, lines 1155-1263
1155/***/ "./node_modules/axios/lib/defaults.js":
1156/*!********************************************!*\
1157  !*** ./node_modules/axios/lib/defaults.js ***!
1158  \********************************************/
1159/*! no static exports found */
1160/***/ (function(module, exports, __webpack_require__) {
1161
1162"use strict";
1163/* WEBPACK VAR INJECTION */(function(process) {
1164
1165var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js");
1166var normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ "./node_modules/axios/lib/helpers/normalizeHeaderName.js");
1167
1168var DEFAULT_CONTENT_TYPE = {
1169  'Content-Type': 'application/x-www-form-urlencoded'
1170};
1171
1172function setContentTypeIfUnset(headers, value) {
1173  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
1174    headers['Content-Type'] = value;
1175  }
1176}
1177
1178function getDefaultAdapter() {
1179  var adapter;
1180  if (typeof XMLHttpRequest !== 'undefined') {
1181    // For browsers use XHR adapter
1182    adapter = __webpack_require__(/*! ./adapters/xhr */ "./node_modules/axios/lib/adapters/xhr.js");
1183  } else if (typeof process !== 'undefined') {
1184    // For node use HTTP adapter
1185    adapter = __webpack_require__(/*! ./adapters/http */ "./node_modules/axios/lib/adapters/xhr.js");
1186  }
1187  return adapter;
1188}
1189
1190var defaults = {
1191  adapter: getDefaultAdapter(),
1192
1193  transformRequest: [function transformRequest(data, headers) {
1194    normalizeHeaderName(headers, 'Content-Type');
1195    if (utils.isFormData(data) ||
1196      utils.isArrayBuffer(data) ||
1197      utils.isBuffer(data) ||
1198      utils.isStream(data) ||
1199      utils.isFile(data) ||
1200      utils.isBlob(data)
1201    ) {
1202      return data;
1203    }
1204    if (utils.isArrayBufferView(data)) {
1205      return data.buffer;
1206    }
1207    if (utils.isURLSearchParams(data)) {
1208      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
1209      return data.toString();
1210    }
1211    if (utils.isObject(data)) {
1212      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
1213      return JSON.stringify(data);
1214    }
1215    return data;
1216  }],
1217
1218  transformResponse: [function transformResponse(data) {
1219    /*eslint no-param-reassign:0*/
1220    if (typeof data === 'string') {
1221      try {
1222        data = JSON.parse(data);
1223      } catch (e) { /* Ignore */ }
1224    }
1225    return data;
1226  }],
1227
1228  /**
1229   * A timeout in milliseconds to abort a request. If set to 0 (default) a
1230   * timeout is not created.
1231   */
1232  timeout: 0,
1233
1234  xsrfCookieName: 'XSRF-TOKEN',
1235  xsrfHeaderName: 'X-XSRF-TOKEN',
1236
1237  maxContentLength: -1,
1238
1239  validateStatus: function validateStatus(status) {
1240    return status >= 200 && status < 300;
1241  }
1242};
1243
1244defaults.headers = {
1245  common: {
1246    'Accept': 'application/json, text/plain, */*'
1247  }
1248};
1249
1250utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
1251  defaults.headers[method] = {};
1252});
1253
1254utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
1255  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
1256});
1257
1258module.exports = defaults;
1259
1260/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js")))
1261
1262/***/ }),
1263
vendor: 569 bytes, lines 1264-1286
1264/***/ "./node_modules/axios/lib/helpers/bind.js":
1265/*!************************************************!*\
1266  !*** ./node_modules/axios/lib/helpers/bind.js ***!
1267  \************************************************/
1268/*! no static exports found */
1269/***/ (function(module, exports, __webpack_require__) {
1270
1271"use strict";
1272
1273
1274module.exports = function bind(fn, thisArg) {
1275  return function wrap() {
1276    var args = new Array(arguments.length);
1277    for (var i = 0; i < args.length; i++) {
1278      args[i] = arguments[i];
1279    }
1280    return fn.apply(thisArg, args);
1281  };
1282};
1283
1284
1285/***/ }),
1286
vendor: 1,931 bytes, lines 1287-1364
1287/***/ "./node_modules/axios/lib/helpers/buildURL.js":
1288/*!****************************************************!*\
1289  !*** ./node_modules/axios/lib/helpers/buildURL.js ***!
1290  \****************************************************/
1291/*! no static exports found */
1292/***/ (function(module, exports, __webpack_require__) {
1293
1294"use strict";
1295
1296
1297var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1298
1299function encode(val) {
1300  return encodeURIComponent(val).
1301    replace(/%40/gi, '@').
1302    replace(/%3A/gi, ':').
1303    replace(/%24/g, '$').
1304    replace(/%2C/gi, ',').
1305    replace(/%20/g, '+').
1306    replace(/%5B/gi, '[').
1307    replace(/%5D/gi, ']');
1308}
1309
1310/**
1311 * Build a URL by appending params to the end
1312 *
1313 * @param {string} url The base of the url (e.g., http://www.google.com)
1314 * @param {object} [params] The params to be appended
1315 * @returns {string} The formatted url
1316 */
1317module.exports = function buildURL(url, params, paramsSerializer) {
1318  /*eslint no-param-reassign:0*/
1319  if (!params) {
1320    return url;
1321  }
1322
1323  var serializedParams;
1324  if (paramsSerializer) {
1325    serializedParams = paramsSerializer(params);
1326  } else if (utils.isURLSearchParams(params)) {
1327    serializedParams = params.toString();
1328  } else {
1329    var parts = [];
1330
1331    utils.forEach(params, function serialize(val, key) {
1332      if (val === null || typeof val === 'undefined') {
1333        return;
1334      }
1335
1336      if (utils.isArray(val)) {
1337        key = key + '[]';
1338      } else {
1339        val = [val];
1340      }
1341
1342      utils.forEach(val, function parseValue(v) {
1343        if (utils.isDate(v)) {
1344          v = v.toISOString();
1345        } else if (utils.isObject(v)) {
1346          v = JSON.stringify(v);
1347        }
1348        parts.push(encode(key) + '=' + encode(v));
1349      });
1350    });
1351
1352    serializedParams = parts.join('&');
1353  }
1354
1355  if (serializedParams) {
1356    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
1357  }
1358
1359  return url;
1360};
1361
1362
1363/***/ }),
1364
vendor: 721 bytes, lines 1365-1390
1365/***/ "./node_modules/axios/lib/helpers/combineURLs.js":
1366/*!*******************************************************!*\
1367  !*** ./node_modules/axios/lib/helpers/combineURLs.js ***!
1368  \*******************************************************/
1369/*! no static exports found */
1370/***/ (function(module, exports, __webpack_require__) {
1371
1372"use strict";
1373
1374
1375/**
1376 * Creates a new URL by combining the specified URLs
1377 *
1378 * @param {string} baseURL The base URL
1379 * @param {string} relativeURL The relative URL
1380 * @returns {string} The combined URL
1381 */
1382module.exports = function combineURLs(baseURL, relativeURL) {
1383  return relativeURL
1384    ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
1385    : baseURL;
1386};
1387
1388
1389/***/ }),
1390
vendor: 1,743 bytes, lines 1391-1455
1391/***/ "./node_modules/axios/lib/helpers/cookies.js":
1392/*!***************************************************!*\
1393  !*** ./node_modules/axios/lib/helpers/cookies.js ***!
1394  \***************************************************/
1395/*! no static exports found */
1396/***/ (function(module, exports, __webpack_require__) {
1397
1398"use strict";
1399
1400
1401var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1402
1403module.exports = (
1404  utils.isStandardBrowserEnv() ?
1405
1406  // Standard browser envs support document.cookie
1407  (function standardBrowserEnv() {
1408    return {
1409      write: function write(name, value, expires, path, domain, secure) {
1410        var cookie = [];
1411        cookie.push(name + '=' + encodeURIComponent(value));
1412
1413        if (utils.isNumber(expires)) {
1414          cookie.push('expires=' + new Date(expires).toGMTString());
1415        }
1416
1417        if (utils.isString(path)) {
1418          cookie.push('path=' + path);
1419        }
1420
1421        if (utils.isString(domain)) {
1422          cookie.push('domain=' + domain);
1423        }
1424
1425        if (secure === true) {
1426          cookie.push('secure');
1427        }
1428
1429        document.cookie = cookie.join('; ');
1430      },
1431
1432      read: function read(name) {
1433        var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
1434        return (match ? decodeURIComponent(match[3]) : null);
1435      },
1436
1437      remove: function remove(name) {
1438        this.write(name, '', Date.now() - 86400000);
1439      }
1440    };
1441  })() :
1442
1443  // Non standard browser env (web workers, react-native) lack needed support.
1444  (function nonStandardBrowserEnv() {
1445    return {
1446      write: function write() {},
1447      read: function read() { return null; },
1448      remove: function remove() {}
1449    };
1450  })()
1451);
1452
1453
1454/***/ }),
1455
vendor: 912 bytes, lines 1456-1481
1456/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js":
1457/*!*********************************************************!*\
1458  !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***!
1459  \*********************************************************/
1460/*! no static exports found */
1461/***/ (function(module, exports, __webpack_require__) {
1462
1463"use strict";
1464
1465
1466/**
1467 * Determines whether the specified URL is absolute
1468 *
1469 * @param {string} url The URL to test
1470 * @returns {boolean} True if the specified URL is absolute, otherwise false
1471 */
1472module.exports = function isAbsoluteURL(url) {
1473  // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
1474  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
1475  // by any combination of letters, digits, plus, period, or hyphen.
1476  return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
1477};
1478
1479
1480/***/ }),
1481
vendor: 2,655 bytes, lines 1482-1561
1482/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js":
1483/*!***********************************************************!*\
1484  !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***!
1485  \***********************************************************/
1486/*! no static exports found */
1487/***/ (function(module, exports, __webpack_require__) {
1488
1489"use strict";
1490
1491
1492var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1493
1494module.exports = (
1495  utils.isStandardBrowserEnv() ?
1496
1497  // Standard browser envs have full support of the APIs needed to test
1498  // whether the request URL is of the same origin as current location.
1499  (function standardBrowserEnv() {
1500    var msie = /(msie|trident)/i.test(navigator.userAgent);
1501    var urlParsingNode = document.createElement('a');
1502    var originURL;
1503
1504    /**
1505    * Parse a URL to discover it's components
1506    *
1507    * @param {String} url The URL to be parsed
1508    * @returns {Object}
1509    */
1510    function resolveURL(url) {
1511      var href = url;
1512
1513      if (msie) {
1514        // IE needs attribute set twice to normalize properties
1515        urlParsingNode.setAttribute('href', href);
1516        href = urlParsingNode.href;
1517      }
1518
1519      urlParsingNode.setAttribute('href', href);
1520
1521      // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
1522      return {
1523        href: urlParsingNode.href,
1524        protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
1525        host: urlParsingNode.host,
1526        search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
1527        hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
1528        hostname: urlParsingNode.hostname,
1529        port: urlParsingNode.port,
1530        pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
1531                  urlParsingNode.pathname :
1532                  '/' + urlParsingNode.pathname
1533      };
1534    }
1535
1536    originURL = resolveURL(window.location.href);
1537
1538    /**
1539    * Determine if a URL shares the same origin as the current location
1540    *
1541    * @param {String} requestURL The URL to test
1542    * @returns {boolean} True if URL shares the same origin, otherwise false
1543    */
1544    return function isURLSameOrigin(requestURL) {
1545      var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
1546      return (parsed.protocol === originURL.protocol &&
1547            parsed.host === originURL.host);
1548    };
1549  })() :
1550
1551  // Non standard browser envs (web workers, react-native) lack needed support.
1552  (function nonStandardBrowserEnv() {
1553    return function isURLSameOrigin() {
1554      return true;
1555    };
1556  })()
1557);
1558
1559
1560/***/ }),
1561
vendor: 783 bytes, lines 1562-1585
1562/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js":
1563/*!***************************************************************!*\
1564  !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***!
1565  \***************************************************************/
1566/*! no static exports found */
1567/***/ (function(module, exports, __webpack_require__) {
1568
1569"use strict";
1570
1571
1572var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js");
1573
1574module.exports = function normalizeHeaderName(headers, normalizedName) {
1575  utils.forEach(headers, function processHeader(value, name) {
1576    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
1577      headers[normalizedName] = value;
1578      delete headers[name];
1579    }
1580  });
1581};
1582
1583
1584/***/ }),
1585
vendor: 1,791 bytes, lines 1586-1650
1586/***/ "./node_modules/axios/lib/helpers/parseHeaders.js":
1587/*!********************************************************!*\
1588  !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***!
1589  \********************************************************/
1590/*! no static exports found */
1591/***/ (function(module, exports, __webpack_require__) {
1592
1593"use strict";
1594
1595
1596var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1597
1598// Headers whose duplicates are ignored by node
1599// c.f. https://nodejs.org/api/http.html#http_message_headers
1600var ignoreDuplicateOf = [
1601  'age', 'authorization', 'content-length', 'content-type', 'etag',
1602  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
1603  'last-modified', 'location', 'max-forwards', 'proxy-authorization',
1604  'referer', 'retry-after', 'user-agent'
1605];
1606
1607/**
1608 * Parse headers into an object
1609 *
1610 * ```
1611 * Date: Wed, 27 Aug 2014 08:58:49 GMT
1612 * Content-Type: application/json
1613 * Connection: keep-alive
1614 * Transfer-Encoding: chunked
1615 * ```
1616 *
1617 * @param {String} headers Headers needing to be parsed
1618 * @returns {Object} Headers parsed into an object
1619 */
1620module.exports = function parseHeaders(headers) {
1621  var parsed = {};
1622  var key;
1623  var val;
1624  var i;
1625
1626  if (!headers) { return parsed; }
1627
1628  utils.forEach(headers.split('\n'), function parser(line) {
1629    i = line.indexOf(':');
1630    key = utils.trim(line.substr(0, i)).toLowerCase();
1631    val = utils.trim(line.substr(i + 1));
1632
1633    if (key) {
1634      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
1635        return;
1636      }
1637      if (key === 'set-cookie') {
1638        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
1639      } else {
1640        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
1641      }
1642    }
1643  });
1644
1645  return parsed;
1646};
1647
1648
1649/***/ }),
1650
vendor: 885 bytes, lines 1651-1689
1651/***/ "./node_modules/axios/lib/helpers/spread.js":
1652/*!**************************************************!*\
1653  !*** ./node_modules/axios/lib/helpers/spread.js ***!
1654  \**************************************************/
1655/*! no static exports found */
1656/***/ (function(module, exports, __webpack_require__) {
1657
1658"use strict";
1659
1660
1661/**
1662 * Syntactic sugar for invoking a function and expanding an array for arguments.
1663 *
1664 * Common use case would be to use `Function.prototype.apply`.
1665 *
1666 *  ```js
1667 *  function f(x, y, z) {}
1668 *  var args = [1, 2, 3];
1669 *  f.apply(null, args);
1670 *  ```
1671 *
1672 * With `spread` this example can be re-written.
1673 *
1674 *  ```js
1675 *  spread(function(x, y, z) {})([1, 2, 3]);
1676 *  ```
1677 *
1678 * @param {Function} callback
1679 * @returns {Function}
1680 */
1681module.exports = function spread(callback) {
1682  return function wrap(arr) {
1683    return callback.apply(null, arr);
1684  };
1685};
1686
1687
1688/***/ }),
1689
vendor: 7,939 bytes, lines 1690-2004
1690/***/ "./node_modules/axios/lib/utils.js":
1691/*!*****************************************!*\
1692  !*** ./node_modules/axios/lib/utils.js ***!
1693  \*****************************************/
1694/*! no static exports found */
1695/***/ (function(module, exports, __webpack_require__) {
1696
1697"use strict";
1698
1699
1700var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js");
1701var isBuffer = __webpack_require__(/*! is-buffer */ "./node_modules/is-buffer/index.js");
1702
1703/*global toString:true*/
1704
1705// utils is a library of generic helper functions non-specific to axios
1706
1707var toString = Object.prototype.toString;
1708
1709/**
1710 * Determine if a value is an Array
1711 *
1712 * @param {Object} val The value to test
1713 * @returns {boolean} True if value is an Array, otherwise false
1714 */
1715function isArray(val) {
1716  return toString.call(val) === '[object Array]';
1717}
1718
1719/**
1720 * Determine if a value is an ArrayBuffer
1721 *
1722 * @param {Object} val The value to test
1723 * @returns {boolean} True if value is an ArrayBuffer, otherwise false
1724 */
1725function isArrayBuffer(val) {
1726  return toString.call(val) === '[object ArrayBuffer]';
1727}
1728
1729/**
1730 * Determine if a value is a FormData
1731 *
1732 * @param {Object} val The value to test
1733 * @returns {boolean} True if value is an FormData, otherwise false
1734 */
1735function isFormData(val) {
1736  return (typeof FormData !== 'undefined') && (val instanceof FormData);
1737}
1738
1739/**
1740 * Determine if a value is a view on an ArrayBuffer
1741 *
1742 * @param {Object} val The value to test
1743 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
1744 */
1745function isArrayBufferView(val) {
1746  var result;
1747  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
1748    result = ArrayBuffer.isView(val);
1749  } else {
1750    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);
1751  }
1752  return result;
1753}
1754
1755/**
1756 * Determine if a value is a String
1757 *
1758 * @param {Object} val The value to test
1759 * @returns {boolean} True if value is a String, otherwise false
1760 */
1761function isString(val) {
1762  return typeof val === 'string';
1763}
1764
1765/**
1766 * Determine if a value is a Number
1767 *
1768 * @param {Object} val The value to test
1769 * @returns {boolean} True if value is a Number, otherwise false
1770 */
1771function isNumber(val) {
1772  return typeof val === 'number';
1773}
1774
1775/**
1776 * Determine if a value is undefined
1777 *
1778 * @param {Object} val The value to test
1779 * @returns {boolean} True if the value is undefined, otherwise false
1780 */
1781function isUndefined(val) {
1782  return typeof val === 'undefined';
1783}
1784
1785/**
1786 * Determine if a value is an Object
1787 *
1788 * @param {Object} val The value to test
1789 * @returns {boolean} True if value is an Object, otherwise false
1790 */
1791function isObject(val) {
1792  return val !== null && typeof val === 'object';
1793}
1794
1795/**
1796 * Determine if a value is a Date
1797 *
1798 * @param {Object} val The value to test
1799 * @returns {boolean} True if value is a Date, otherwise false
1800 */
1801function isDate(val) {
1802  return toString.call(val) === '[object Date]';
1803}
1804
1805/**
1806 * Determine if a value is a File
1807 *
1808 * @param {Object} val The value to test
1809 * @returns {boolean} True if value is a File, otherwise false
1810 */
1811function isFile(val) {
1812  return toString.call(val) === '[object File]';
1813}
1814
1815/**
1816 * Determine if a value is a Blob
1817 *
1818 * @param {Object} val The value to test
1819 * @returns {boolean} True if value is a Blob, otherwise false
1820 */
1821function isBlob(val) {
1822  return toString.call(val) === '[object Blob]';
1823}
1824
1825/**
1826 * Determine if a value is a Function
1827 *
1828 * @param {Object} val The value to test
1829 * @returns {boolean} True if value is a Function, otherwise false
1830 */
1831function isFunction(val) {
1832  return toString.call(val) === '[object Function]';
1833}
1834
1835/**
1836 * Determine if a value is a Stream
1837 *
1838 * @param {Object} val The value to test
1839 * @returns {boolean} True if value is a Stream, otherwise false
1840 */
1841function isStream(val) {
1842  return isObject(val) && isFunction(val.pipe);
1843}
1844
1845/**
1846 * Determine if a value is a URLSearchParams object
1847 *
1848 * @param {Object} val The value to test
1849 * @returns {boolean} True if value is a URLSearchParams object, otherwise false
1850 */
1851function isURLSearchParams(val) {
1852  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;
1853}
1854
1855/**
1856 * Trim excess whitespace off the beginning and end of a string
1857 *
1858 * @param {String} str The String to trim
1859 * @returns {String} The String freed of excess whitespace
1860 */
1861function trim(str) {
1862  return str.replace(/^\s*/, '').replace(/\s*$/, '');
1863}
1864
1865/**
1866 * Determine if we're running in a standard browser environment
1867 *
1868 * This allows axios to run in a web worker, and react-native.
1869 * Both environments support XMLHttpRequest, but not fully standard globals.
1870 *
1871 * web workers:
1872 *  typeof window -> undefined
1873 *  typeof document -> undefined
1874 *
1875 * react-native:
1876 *  navigator.product -> 'ReactNative'
1877 */
1878function isStandardBrowserEnv() {
1879  if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
1880    return false;
1881  }
1882  return (
1883    typeof window !== 'undefined' &&
1884    typeof document !== 'undefined'
1885  );
1886}
1887
1888/**
1889 * Iterate over an Array or an Object invoking a function for each item.
1890 *
1891 * If `obj` is an Array callback will be called passing
1892 * the value, index, and complete array for each item.
1893 *
1894 * If 'obj' is an Object callback will be called passing
1895 * the value, key, and complete object for each property.
1896 *
1897 * @param {Object|Array} obj The object to iterate
1898 * @param {Function} fn The callback to invoke for each item
1899 */
1900function forEach(obj, fn) {
1901  // Don't bother if no value provided
1902  if (obj === null || typeof obj === 'undefined') {
1903    return;
1904  }
1905
1906  // Force an array if not already something iterable
1907  if (typeof obj !== 'object') {
1908    /*eslint no-param-reassign:0*/
1909    obj = [obj];
1910  }
1911
1912  if (isArray(obj)) {
1913    // Iterate over array values
1914    for (var i = 0, l = obj.length; i < l; i++) {
1915      fn.call(null, obj[i], i, obj);
1916    }
1917  } else {
1918    // Iterate over object keys
1919    for (var key in obj) {
1920      if (Object.prototype.hasOwnProperty.call(obj, key)) {
1921        fn.call(null, obj[key], key, obj);
1922      }
1923    }
1924  }
1925}
1926
1927/**
1928 * Accepts varargs expecting each argument to be an object, then
1929 * immutably merges the properties of each object and returns result.
1930 *
1931 * When multiple objects contain the same key the later object in
1932 * the arguments list will take precedence.
1933 *
1934 * Example:
1935 *
1936 * ```js
1937 * var result = merge({foo: 123}, {foo: 456});
1938 * console.log(result.foo); // outputs 456
1939 * ```
1940 *
1941 * @param {Object} obj1 Object to merge
1942 * @returns {Object} Result of all merge properties
1943 */
1944function merge(/* obj1, obj2, obj3, ... */) {
1945  var result = {};
1946  function assignValue(val, key) {
1947    if (typeof result[key] === 'object' && typeof val === 'object') {
1948      result[key] = merge(result[key], val);
1949    } else {
1950      result[key] = val;
1951    }
1952  }
1953
1954  for (var i = 0, l = arguments.length; i < l; i++) {
1955    forEach(arguments[i], assignValue);
1956  }
1957  return result;
1958}
1959
1960/**
1961 * Extends object a by mutably adding to it the properties of object b.
1962 *
1963 * @param {Object} a The object to be extended
1964 * @param {Object} b The object to copy properties from
1965 * @param {Object} thisArg The object to bind function to
1966 * @return {Object} The resulting value of object a
1967 */
1968function extend(a, b, thisArg) {
1969  forEach(b, function assignValue(val, key) {
1970    if (thisArg && typeof val === 'function') {
1971      a[key] = bind(val, thisArg);
1972    } else {
1973      a[key] = val;
1974    }
1975  });
1976  return a;
1977}
1978
1979module.exports = {
1980  isArray: isArray,
1981  isArrayBuffer: isArrayBuffer,
1982  isBuffer: isBuffer,
1983  isFormData: isFormData,
1984  isArrayBufferView: isArrayBufferView,
1985  isString: isString,
1986  isNumber: isNumber,
1987  isObject: isObject,
1988  isUndefined: isUndefined,
1989  isDate: isDate,
1990  isFile: isFile,
1991  isBlob: isBlob,
1992  isFunction: isFunction,
1993  isStream: isStream,
1994  isURLSearchParams: isURLSearchParams,
1995  isStandardBrowserEnv: isStandardBrowserEnv,
1996  forEach: forEach,
1997  merge: merge,
1998  extend: extend,
1999  trim: trim
2000};
2001
2002
2003/***/ }),
2004
vendor: 137,882 bytes, lines 2005-6370
2005/***/ "./node_modules/bootstrap/dist/js/bootstrap.js":
2006/*!*****************************************************!*\
2007  !*** ./node_modules/bootstrap/dist/js/bootstrap.js ***!
2008  \*****************************************************/
2009/*! no static exports found */
2010/***/ (function(module, exports, __webpack_require__) {
2011
2012/*!
2013  * Bootstrap v4.6.2 (https://getbootstrap.com/)
2014  * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2015  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2016  */
2017(function (global, factory) {
2018   true ? factory(exports, __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"), __webpack_require__(/*! popper.js */ "./node_modules/popper.js/dist/esm/popper.js")) :
2019  undefined;
2020})(this, (function (exports, $, Popper) { 'use strict';
2021
2022  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
2023
2024  var $__default = /*#__PURE__*/_interopDefaultLegacy($);
2025  var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);
2026
2027  function _defineProperties(target, props) {
2028    for (var i = 0; i < props.length; i++) {
2029      var descriptor = props[i];
2030      descriptor.enumerable = descriptor.enumerable || false;
2031      descriptor.configurable = true;
2032      if ("value" in descriptor) descriptor.writable = true;
2033      Object.defineProperty(target, descriptor.key, descriptor);
2034    }
2035  }
2036
2037  function _createClass(Constructor, protoProps, staticProps) {
2038    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
2039    if (staticProps) _defineProperties(Constructor, staticProps);
2040    Object.defineProperty(Constructor, "prototype", {
2041      writable: false
2042    });
2043    return Constructor;
2044  }
2045
2046  function _extends() {
2047    _extends = Object.assign ? Object.assign.bind() : function (target) {
2048      for (var i = 1; i < arguments.length; i++) {
2049        var source = arguments[i];
2050
2051        for (var key in source) {
2052          if (Object.prototype.hasOwnProperty.call(source, key)) {
2053            target[key] = source[key];
2054          }
2055        }
2056      }
2057
2058      return target;
2059    };
2060    return _extends.apply(this, arguments);
2061  }
2062
2063  function _inheritsLoose(subClass, superClass) {
2064    subClass.prototype = Object.create(superClass.prototype);
2065    subClass.prototype.constructor = subClass;
2066
2067    _setPrototypeOf(subClass, superClass);
2068  }
2069
2070  function _setPrototypeOf(o, p) {
2071    _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
2072      o.__proto__ = p;
2073      return o;
2074    };
2075    return _setPrototypeOf(o, p);
2076  }
2077
2078  /**
2079   * --------------------------------------------------------------------------
2080   * Bootstrap (v4.6.2): util.js
2081   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2082   * --------------------------------------------------------------------------
2083   */
2084  /**
2085   * Private TransitionEnd Helpers
2086   */
2087
2088  var TRANSITION_END = 'transitionend';
2089  var MAX_UID = 1000000;
2090  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
2091
2092  function toType(obj) {
2093    if (obj === null || typeof obj === 'undefined') {
2094      return "" + obj;
2095    }
2096
2097    return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
2098  }
2099
2100  function getSpecialTransitionEndEvent() {
2101    return {
2102      bindType: TRANSITION_END,
2103      delegateType: TRANSITION_END,
2104      handle: function handle(event) {
2105        if ($__default["default"](event.target).is(this)) {
2106          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
2107        }
2108
2109        return undefined;
2110      }
2111    };
2112  }
2113
2114  function transitionEndEmulator(duration) {
2115    var _this = this;
2116
2117    var called = false;
2118    $__default["default"](this).one(Util.TRANSITION_END, function () {
2119      called = true;
2120    });
2121    setTimeout(function () {
2122      if (!called) {
2123        Util.triggerTransitionEnd(_this);
2124      }
2125    }, duration);
2126    return this;
2127  }
2128
2129  function setTransitionEndSupport() {
2130    $__default["default"].fn.emulateTransitionEnd = transitionEndEmulator;
2131    $__default["default"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
2132  }
2133  /**
2134   * Public Util API
2135   */
2136
2137
2138  var Util = {
2139    TRANSITION_END: 'bsTransitionEnd',
2140    getUID: function getUID(prefix) {
2141      do {
2142        // eslint-disable-next-line no-bitwise
2143        prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
2144      } while (document.getElementById(prefix));
2145
2146      return prefix;
2147    },
2148    getSelectorFromElement: function getSelectorFromElement(element) {
2149      var selector = element.getAttribute('data-target');
2150
2151      if (!selector || selector === '#') {
2152        var hrefAttr = element.getAttribute('href');
2153        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
2154      }
2155
2156      try {
2157        return document.querySelector(selector) ? selector : null;
2158      } catch (_) {
2159        return null;
2160      }
2161    },
2162    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
2163      if (!element) {
2164        return 0;
2165      } // Get transition-duration of the element
2166
2167
2168      var transitionDuration = $__default["default"](element).css('transition-duration');
2169      var transitionDelay = $__default["default"](element).css('transition-delay');
2170      var floatTransitionDuration = parseFloat(transitionDuration);
2171      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
2172
2173      if (!floatTransitionDuration && !floatTransitionDelay) {
2174        return 0;
2175      } // If multiple durations are defined, take the first
2176
2177
2178      transitionDuration = transitionDuration.split(',')[0];
2179      transitionDelay = transitionDelay.split(',')[0];
2180      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
2181    },
2182    reflow: function reflow(element) {
2183      return element.offsetHeight;
2184    },
2185    triggerTransitionEnd: function triggerTransitionEnd(element) {
2186      $__default["default"](element).trigger(TRANSITION_END);
2187    },
2188    supportsTransitionEnd: function supportsTransitionEnd() {
2189      return Boolean(TRANSITION_END);
2190    },
2191    isElement: function isElement(obj) {
2192      return (obj[0] || obj).nodeType;
2193    },
2194    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
2195      for (var property in configTypes) {
2196        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
2197          var expectedTypes = configTypes[property];
2198          var value = config[property];
2199          var valueType = value && Util.isElement(value) ? 'element' : toType(value);
2200
2201          if (!new RegExp(expectedTypes).test(valueType)) {
2202            throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
2203          }
2204        }
2205      }
2206    },
2207    findShadowRoot: function findShadowRoot(element) {
2208      if (!document.documentElement.attachShadow) {
2209        return null;
2210      } // Can find the shadow root otherwise it'll return the document
2211
2212
2213      if (typeof element.getRootNode === 'function') {
2214        var root = element.getRootNode();
2215        return root instanceof ShadowRoot ? root : null;
2216      }
2217
2218      if (element instanceof ShadowRoot) {
2219        return element;
2220      } // when we don't find a shadow root
2221
2222
2223      if (!element.parentNode) {
2224        return null;
2225      }
2226
2227      return Util.findShadowRoot(element.parentNode);
2228    },
2229    jQueryDetection: function jQueryDetection() {
2230      if (typeof $__default["default"] === 'undefined') {
2231        throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
2232      }
2233
2234      var version = $__default["default"].fn.jquery.split(' ')[0].split('.');
2235      var minMajor = 1;
2236      var ltMajor = 2;
2237      var minMinor = 9;
2238      var minPatch = 1;
2239      var maxMajor = 4;
2240
2241      if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {
2242        throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');
2243      }
2244    }
2245  };
2246  Util.jQueryDetection();
2247  setTransitionEndSupport();
2248
2249  /**
2250   * Constants
2251   */
2252
2253  var NAME$a = 'alert';
2254  var VERSION$a = '4.6.2';
2255  var DATA_KEY$a = 'bs.alert';
2256  var EVENT_KEY$a = "." + DATA_KEY$a;
2257  var DATA_API_KEY$7 = '.data-api';
2258  var JQUERY_NO_CONFLICT$a = $__default["default"].fn[NAME$a];
2259  var CLASS_NAME_ALERT = 'alert';
2260  var CLASS_NAME_FADE$5 = 'fade';
2261  var CLASS_NAME_SHOW$7 = 'show';
2262  var EVENT_CLOSE = "close" + EVENT_KEY$a;
2263  var EVENT_CLOSED = "closed" + EVENT_KEY$a;
2264  var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$a + DATA_API_KEY$7;
2265  var SELECTOR_DISMISS = '[data-dismiss="alert"]';
2266  /**
2267   * Class definition
2268   */
2269
2270  var Alert = /*#__PURE__*/function () {
2271    function Alert(element) {
2272      this._element = element;
2273    } // Getters
2274
2275
2276    var _proto = Alert.prototype;
2277
2278    // Public
2279    _proto.close = function close(element) {
2280      var rootElement = this._element;
2281
2282      if (element) {
2283        rootElement = this._getRootElement(element);
2284      }
2285
2286      var customEvent = this._triggerCloseEvent(rootElement);
2287
2288      if (customEvent.isDefaultPrevented()) {
2289        return;
2290      }
2291
2292      this._removeElement(rootElement);
2293    };
2294
2295    _proto.dispose = function dispose() {
2296      $__default["default"].removeData(this._element, DATA_KEY$a);
2297      this._element = null;
2298    } // Private
2299    ;
2300
2301    _proto._getRootElement = function _getRootElement(element) {
2302      var selector = Util.getSelectorFromElement(element);
2303      var parent = false;
2304
2305      if (selector) {
2306        parent = document.querySelector(selector);
2307      }
2308
2309      if (!parent) {
2310        parent = $__default["default"](element).closest("." + CLASS_NAME_ALERT)[0];
2311      }
2312
2313      return parent;
2314    };
2315
2316    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
2317      var closeEvent = $__default["default"].Event(EVENT_CLOSE);
2318      $__default["default"](element).trigger(closeEvent);
2319      return closeEvent;
2320    };
2321
2322    _proto._removeElement = function _removeElement(element) {
2323      var _this = this;
2324
2325      $__default["default"](element).removeClass(CLASS_NAME_SHOW$7);
2326
2327      if (!$__default["default"](element).hasClass(CLASS_NAME_FADE$5)) {
2328        this._destroyElement(element);
2329
2330        return;
2331      }
2332
2333      var transitionDuration = Util.getTransitionDurationFromElement(element);
2334      $__default["default"](element).one(Util.TRANSITION_END, function (event) {
2335        return _this._destroyElement(element, event);
2336      }).emulateTransitionEnd(transitionDuration);
2337    };
2338
2339    _proto._destroyElement = function _destroyElement(element) {
2340      $__default["default"](element).detach().trigger(EVENT_CLOSED).remove();
2341    } // Static
2342    ;
2343
2344    Alert._jQueryInterface = function _jQueryInterface(config) {
2345      return this.each(function () {
2346        var $element = $__default["default"](this);
2347        var data = $element.data(DATA_KEY$a);
2348
2349        if (!data) {
2350          data = new Alert(this);
2351          $element.data(DATA_KEY$a, data);
2352        }
2353
2354        if (config === 'close') {
2355          data[config](this);
2356        }
2357      });
2358    };
2359
2360    Alert._handleDismiss = function _handleDismiss(alertInstance) {
2361      return function (event) {
2362        if (event) {
2363          event.preventDefault();
2364        }
2365
2366        alertInstance.close(this);
2367      };
2368    };
2369
2370    _createClass(Alert, null, [{
2371      key: "VERSION",
2372      get: function get() {
2373        return VERSION$a;
2374      }
2375    }]);
2376
2377    return Alert;
2378  }();
2379  /**
2380   * Data API implementation
2381   */
2382
2383
2384  $__default["default"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));
2385  /**
2386   * jQuery
2387   */
2388
2389  $__default["default"].fn[NAME$a] = Alert._jQueryInterface;
2390  $__default["default"].fn[NAME$a].Constructor = Alert;
2391
2392  $__default["default"].fn[NAME$a].noConflict = function () {
2393    $__default["default"].fn[NAME$a] = JQUERY_NO_CONFLICT$a;
2394    return Alert._jQueryInterface;
2395  };
2396
2397  /**
2398   * Constants
2399   */
2400
2401  var NAME$9 = 'button';
2402  var VERSION$9 = '4.6.2';
2403  var DATA_KEY$9 = 'bs.button';
2404  var EVENT_KEY$9 = "." + DATA_KEY$9;
2405  var DATA_API_KEY$6 = '.data-api';
2406  var JQUERY_NO_CONFLICT$9 = $__default["default"].fn[NAME$9];
2407  var CLASS_NAME_ACTIVE$3 = 'active';
2408  var CLASS_NAME_BUTTON = 'btn';
2409  var CLASS_NAME_FOCUS = 'focus';
2410  var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$9 + DATA_API_KEY$6;
2411  var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$9 + DATA_API_KEY$6 + " " + ("blur" + EVENT_KEY$9 + DATA_API_KEY$6);
2412  var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$9 + DATA_API_KEY$6;
2413  var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]';
2414  var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]';
2415  var SELECTOR_DATA_TOGGLE$4 = '[data-toggle="button"]';
2416  var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn';
2417  var SELECTOR_INPUT = 'input:not([type="hidden"])';
2418  var SELECTOR_ACTIVE$2 = '.active';
2419  var SELECTOR_BUTTON = '.btn';
2420  /**
2421   * Class definition
2422   */
2423
2424  var Button = /*#__PURE__*/function () {
2425    function Button(element) {
2426      this._element = element;
2427      this.shouldAvoidTriggerChange = false;
2428    } // Getters
2429
2430
2431    var _proto = Button.prototype;
2432
2433    // Public
2434    _proto.toggle = function toggle() {
2435      var triggerChangeEvent = true;
2436      var addAriaPressed = true;
2437      var rootElement = $__default["default"](this._element).closest(SELECTOR_DATA_TOGGLES)[0];
2438
2439      if (rootElement) {
2440        var input = this._element.querySelector(SELECTOR_INPUT);
2441
2442        if (input) {
2443          if (input.type === 'radio') {
2444            if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE$3)) {
2445              triggerChangeEvent = false;
2446            } else {
2447              var activeElement = rootElement.querySelector(SELECTOR_ACTIVE$2);
2448
2449              if (activeElement) {
2450                $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$3);
2451              }
2452            }
2453          }
2454
2455          if (triggerChangeEvent) {
2456            // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
2457            if (input.type === 'checkbox' || input.type === 'radio') {
2458              input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE$3);
2459            }
2460
2461            if (!this.shouldAvoidTriggerChange) {
2462              $__default["default"](input).trigger('change');
2463            }
2464          }
2465
2466          input.focus();
2467          addAriaPressed = false;
2468        }
2469      }
2470
2471      if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
2472        if (addAriaPressed) {
2473          this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE$3));
2474        }
2475
2476        if (triggerChangeEvent) {
2477          $__default["default"](this._element).toggleClass(CLASS_NAME_ACTIVE$3);
2478        }
2479      }
2480    };
2481
2482    _proto.dispose = function dispose() {
2483      $__default["default"].removeData(this._element, DATA_KEY$9);
2484      this._element = null;
2485    } // Static
2486    ;
2487
2488    Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {
2489      return this.each(function () {
2490        var $element = $__default["default"](this);
2491        var data = $element.data(DATA_KEY$9);
2492
2493        if (!data) {
2494          data = new Button(this);
2495          $element.data(DATA_KEY$9, data);
2496        }
2497
2498        data.shouldAvoidTriggerChange = avoidTriggerChange;
2499
2500        if (config === 'toggle') {
2501          data[config]();
2502        }
2503      });
2504    };
2505
2506    _createClass(Button, null, [{
2507      key: "VERSION",
2508      get: function get() {
2509        return VERSION$9;
2510      }
2511    }]);
2512
2513    return Button;
2514  }();
2515  /**
2516   * Data API implementation
2517   */
2518
2519
2520  $__default["default"](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
2521    var button = event.target;
2522    var initialButton = button;
2523
2524    if (!$__default["default"](button).hasClass(CLASS_NAME_BUTTON)) {
2525      button = $__default["default"](button).closest(SELECTOR_BUTTON)[0];
2526    }
2527
2528    if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
2529      event.preventDefault(); // work around Firefox bug #1540995
2530    } else {
2531      var inputBtn = button.querySelector(SELECTOR_INPUT);
2532
2533      if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
2534        event.preventDefault(); // work around Firefox bug #1540995
2535
2536        return;
2537      }
2538
2539      if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {
2540        Button._jQueryInterface.call($__default["default"](button), 'toggle', initialButton.tagName === 'INPUT');
2541      }
2542    }
2543  }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
2544    var button = $__default["default"](event.target).closest(SELECTOR_BUTTON)[0];
2545    $__default["default"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));
2546  });
2547  $__default["default"](window).on(EVENT_LOAD_DATA_API$2, function () {
2548    // ensure correct active class is set to match the controls' actual values/states
2549    // find all checkboxes/readio buttons inside data-toggle groups
2550    var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));
2551
2552    for (var i = 0, len = buttons.length; i < len; i++) {
2553      var button = buttons[i];
2554      var input = button.querySelector(SELECTOR_INPUT);
2555
2556      if (input.checked || input.hasAttribute('checked')) {
2557        button.classList.add(CLASS_NAME_ACTIVE$3);
2558      } else {
2559        button.classList.remove(CLASS_NAME_ACTIVE$3);
2560      }
2561    } // find all button toggles
2562
2563
2564    buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$4));
2565
2566    for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
2567      var _button = buttons[_i];
2568
2569      if (_button.getAttribute('aria-pressed') === 'true') {
2570        _button.classList.add(CLASS_NAME_ACTIVE$3);
2571      } else {
2572        _button.classList.remove(CLASS_NAME_ACTIVE$3);
2573      }
2574    }
2575  });
2576  /**
2577   * jQuery
2578   */
2579
2580  $__default["default"].fn[NAME$9] = Button._jQueryInterface;
2581  $__default["default"].fn[NAME$9].Constructor = Button;
2582
2583  $__default["default"].fn[NAME$9].noConflict = function () {
2584    $__default["default"].fn[NAME$9] = JQUERY_NO_CONFLICT$9;
2585    return Button._jQueryInterface;
2586  };
2587
2588  /**
2589   * Constants
2590   */
2591
2592  var NAME$8 = 'carousel';
2593  var VERSION$8 = '4.6.2';
2594  var DATA_KEY$8 = 'bs.carousel';
2595  var EVENT_KEY$8 = "." + DATA_KEY$8;
2596  var DATA_API_KEY$5 = '.data-api';
2597  var JQUERY_NO_CONFLICT$8 = $__default["default"].fn[NAME$8];
2598  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
2599
2600  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
2601
2602  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
2603
2604  var SWIPE_THRESHOLD = 40;
2605  var CLASS_NAME_CAROUSEL = 'carousel';
2606  var CLASS_NAME_ACTIVE$2 = 'active';
2607  var CLASS_NAME_SLIDE = 'slide';
2608  var CLASS_NAME_RIGHT = 'carousel-item-right';
2609  var CLASS_NAME_LEFT = 'carousel-item-left';
2610  var CLASS_NAME_NEXT = 'carousel-item-next';
2611  var CLASS_NAME_PREV = 'carousel-item-prev';
2612  var CLASS_NAME_POINTER_EVENT = 'pointer-event';
2613  var DIRECTION_NEXT = 'next';
2614  var DIRECTION_PREV = 'prev';
2615  var DIRECTION_LEFT = 'left';
2616  var DIRECTION_RIGHT = 'right';
2617  var EVENT_SLIDE = "slide" + EVENT_KEY$8;
2618  var EVENT_SLID = "slid" + EVENT_KEY$8;
2619  var EVENT_KEYDOWN = "keydown" + EVENT_KEY$8;
2620  var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$8;
2621  var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$8;
2622  var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$8;
2623  var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$8;
2624  var EVENT_TOUCHEND = "touchend" + EVENT_KEY$8;
2625  var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$8;
2626  var EVENT_POINTERUP = "pointerup" + EVENT_KEY$8;
2627  var EVENT_DRAG_START = "dragstart" + EVENT_KEY$8;
2628  var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$8 + DATA_API_KEY$5;
2629  var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$8 + DATA_API_KEY$5;
2630  var SELECTOR_ACTIVE$1 = '.active';
2631  var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
2632  var SELECTOR_ITEM = '.carousel-item';
2633  var SELECTOR_ITEM_IMG = '.carousel-item img';
2634  var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
2635  var SELECTOR_INDICATORS = '.carousel-indicators';
2636  var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';
2637  var SELECTOR_DATA_RIDE = '[data-ride="carousel"]';
2638  var Default$7 = {
2639    interval: 5000,
2640    keyboard: true,
2641    slide: false,
2642    pause: 'hover',
2643    wrap: true,
2644    touch: true
2645  };
2646  var DefaultType$7 = {
2647    interval: '(number|boolean)',
2648    keyboard: 'boolean',
2649    slide: '(boolean|string)',
2650    pause: '(string|boolean)',
2651    wrap: 'boolean',
2652    touch: 'boolean'
2653  };
2654  var PointerType = {
2655    TOUCH: 'touch',
2656    PEN: 'pen'
2657  };
2658  /**
2659   * Class definition
2660   */
2661
2662  var Carousel = /*#__PURE__*/function () {
2663    function Carousel(element, config) {
2664      this._items = null;
2665      this._interval = null;
2666      this._activeElement = null;
2667      this._isPaused = false;
2668      this._isSliding = false;
2669      this.touchTimeout = null;
2670      this.touchStartX = 0;
2671      this.touchDeltaX = 0;
2672      this._config = this._getConfig(config);
2673      this._element = element;
2674      this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);
2675      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
2676      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
2677
2678      this._addEventListeners();
2679    } // Getters
2680
2681
2682    var _proto = Carousel.prototype;
2683
2684    // Public
2685    _proto.next = function next() {
2686      if (!this._isSliding) {
2687        this._slide(DIRECTION_NEXT);
2688      }
2689    };
2690
2691    _proto.nextWhenVisible = function nextWhenVisible() {
2692      var $element = $__default["default"](this._element); // Don't call next when the page isn't visible
2693      // or the carousel or its parent isn't visible
2694
2695      if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') {
2696        this.next();
2697      }
2698    };
2699
2700    _proto.prev = function prev() {
2701      if (!this._isSliding) {
2702        this._slide(DIRECTION_PREV);
2703      }
2704    };
2705
2706    _proto.pause = function pause(event) {
2707      if (!event) {
2708        this._isPaused = true;
2709      }
2710
2711      if (this._element.querySelector(SELECTOR_NEXT_PREV)) {
2712        Util.triggerTransitionEnd(this._element);
2713        this.cycle(true);
2714      }
2715
2716      clearInterval(this._interval);
2717      this._interval = null;
2718    };
2719
2720    _proto.cycle = function cycle(event) {
2721      if (!event) {
2722        this._isPaused = false;
2723      }
2724
2725      if (this._interval) {
2726        clearInterval(this._interval);
2727        this._interval = null;
2728      }
2729
2730      if (this._config.interval && !this._isPaused) {
2731        this._updateInterval();
2732
2733        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
2734      }
2735    };
2736
2737    _proto.to = function to(index) {
2738      var _this = this;
2739
2740      this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
2741
2742      var activeIndex = this._getItemIndex(this._activeElement);
2743
2744      if (index > this._items.length - 1 || index < 0) {
2745        return;
2746      }
2747
2748      if (this._isSliding) {
2749        $__default["default"](this._element).one(EVENT_SLID, function () {
2750          return _this.to(index);
2751        });
2752        return;
2753      }
2754
2755      if (activeIndex === index) {
2756        this.pause();
2757        this.cycle();
2758        return;
2759      }
2760
2761      var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;
2762
2763      this._slide(direction, this._items[index]);
2764    };
2765
2766    _proto.dispose = function dispose() {
2767      $__default["default"](this._element).off(EVENT_KEY$8);
2768      $__default["default"].removeData(this._element, DATA_KEY$8);
2769      this._items = null;
2770      this._config = null;
2771      this._element = null;
2772      this._interval = null;
2773      this._isPaused = null;
2774      this._isSliding = null;
2775      this._activeElement = null;
2776      this._indicatorsElement = null;
2777    } // Private
2778    ;
2779
2780    _proto._getConfig = function _getConfig(config) {
2781      config = _extends({}, Default$7, config);
2782      Util.typeCheckConfig(NAME$8, config, DefaultType$7);
2783      return config;
2784    };
2785
2786    _proto._handleSwipe = function _handleSwipe() {
2787      var absDeltax = Math.abs(this.touchDeltaX);
2788
2789      if (absDeltax <= SWIPE_THRESHOLD) {
2790        return;
2791      }
2792
2793      var direction = absDeltax / this.touchDeltaX;
2794      this.touchDeltaX = 0; // swipe left
2795
2796      if (direction > 0) {
2797        this.prev();
2798      } // swipe right
2799
2800
2801      if (direction < 0) {
2802        this.next();
2803      }
2804    };
2805
2806    _proto._addEventListeners = function _addEventListeners() {
2807      var _this2 = this;
2808
2809      if (this._config.keyboard) {
2810        $__default["default"](this._element).on(EVENT_KEYDOWN, function (event) {
2811          return _this2._keydown(event);
2812        });
2813      }
2814
2815      if (this._config.pause === 'hover') {
2816        $__default["default"](this._element).on(EVENT_MOUSEENTER, function (event) {
2817          return _this2.pause(event);
2818        }).on(EVENT_MOUSELEAVE, function (event) {
2819          return _this2.cycle(event);
2820        });
2821      }
2822
2823      if (this._config.touch) {
2824        this._addTouchEventListeners();
2825      }
2826    };
2827
2828    _proto._addTouchEventListeners = function _addTouchEventListeners() {
2829      var _this3 = this;
2830
2831      if (!this._touchSupported) {
2832        return;
2833      }
2834
2835      var start = function start(event) {
2836        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
2837          _this3.touchStartX = event.originalEvent.clientX;
2838        } else if (!_this3._pointerEvent) {
2839          _this3.touchStartX = event.originalEvent.touches[0].clientX;
2840        }
2841      };
2842
2843      var move = function move(event) {
2844        // ensure swiping with one touch and not pinching
2845        _this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX;
2846      };
2847
2848      var end = function end(event) {
2849        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
2850          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;
2851        }
2852
2853        _this3._handleSwipe();
2854
2855        if (_this3._config.pause === 'hover') {
2856          // If it's a touch-enabled device, mouseenter/leave are fired as
2857          // part of the mouse compatibility events on first tap - the carousel
2858          // would stop cycling until user tapped out of it;
2859          // here, we listen for touchend, explicitly pause the carousel
2860          // (as if it's the second time we tap on it, mouseenter compat event
2861          // is NOT fired) and after a timeout (to allow for mouse compatibility
2862          // events to fire) we explicitly restart cycling
2863          _this3.pause();
2864
2865          if (_this3.touchTimeout) {
2866            clearTimeout(_this3.touchTimeout);
2867          }
2868
2869          _this3.touchTimeout = setTimeout(function (event) {
2870            return _this3.cycle(event);
2871          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);
2872        }
2873      };
2874
2875      $__default["default"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {
2876        return e.preventDefault();
2877      });
2878
2879      if (this._pointerEvent) {
2880        $__default["default"](this._element).on(EVENT_POINTERDOWN, function (event) {
2881          return start(event);
2882        });
2883        $__default["default"](this._element).on(EVENT_POINTERUP, function (event) {
2884          return end(event);
2885        });
2886
2887        this._element.classList.add(CLASS_NAME_POINTER_EVENT);
2888      } else {
2889        $__default["default"](this._element).on(EVENT_TOUCHSTART, function (event) {
2890          return start(event);
2891        });
2892        $__default["default"](this._element).on(EVENT_TOUCHMOVE, function (event) {
2893          return move(event);
2894        });
2895        $__default["default"](this._element).on(EVENT_TOUCHEND, function (event) {
2896          return end(event);
2897        });
2898      }
2899    };
2900
2901    _proto._keydown = function _keydown(event) {
2902      if (/input|textarea/i.test(event.target.tagName)) {
2903        return;
2904      }
2905
2906      switch (event.which) {
2907        case ARROW_LEFT_KEYCODE:
2908          event.preventDefault();
2909          this.prev();
2910          break;
2911
2912        case ARROW_RIGHT_KEYCODE:
2913          event.preventDefault();
2914          this.next();
2915          break;
2916      }
2917    };
2918
2919    _proto._getItemIndex = function _getItemIndex(element) {
2920      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];
2921      return this._items.indexOf(element);
2922    };
2923
2924    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
2925      var isNextDirection = direction === DIRECTION_NEXT;
2926      var isPrevDirection = direction === DIRECTION_PREV;
2927
2928      var activeIndex = this._getItemIndex(activeElement);
2929
2930      var lastItemIndex = this._items.length - 1;
2931      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
2932
2933      if (isGoingToWrap && !this._config.wrap) {
2934        return activeElement;
2935      }
2936
2937      var delta = direction === DIRECTION_PREV ? -1 : 1;
2938      var itemIndex = (activeIndex + delta) % this._items.length;
2939      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
2940    };
2941
2942    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
2943      var targetIndex = this._getItemIndex(relatedTarget);
2944
2945      var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));
2946
2947      var slideEvent = $__default["default"].Event(EVENT_SLIDE, {
2948        relatedTarget: relatedTarget,
2949        direction: eventDirectionName,
2950        from: fromIndex,
2951        to: targetIndex
2952      });
2953      $__default["default"](this._element).trigger(slideEvent);
2954      return slideEvent;
2955    };
2956
2957    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
2958      if (this._indicatorsElement) {
2959        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));
2960        $__default["default"](indicators).removeClass(CLASS_NAME_ACTIVE$2);
2961
2962        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
2963
2964        if (nextIndicator) {
2965          $__default["default"](nextIndicator).addClass(CLASS_NAME_ACTIVE$2);
2966        }
2967      }
2968    };
2969
2970    _proto._updateInterval = function _updateInterval() {
2971      var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM);
2972
2973      if (!element) {
2974        return;
2975      }
2976
2977      var elementInterval = parseInt(element.getAttribute('data-interval'), 10);
2978
2979      if (elementInterval) {
2980        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
2981        this._config.interval = elementInterval;
2982      } else {
2983        this._config.interval = this._config.defaultInterval || this._config.interval;
2984      }
2985    };
2986
2987    _proto._slide = function _slide(direction, element) {
2988      var _this4 = this;
2989
2990      var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
2991
2992      var activeElementIndex = this._getItemIndex(activeElement);
2993
2994      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
2995
2996      var nextElementIndex = this._getItemIndex(nextElement);
2997
2998      var isCycling = Boolean(this._interval);
2999      var directionalClassName;
3000      var orderClassName;
3001      var eventDirectionName;
3002
3003      if (direction === DIRECTION_NEXT) {
3004        directionalClassName = CLASS_NAME_LEFT;
3005        orderClassName = CLASS_NAME_NEXT;
3006        eventDirectionName = DIRECTION_LEFT;
3007      } else {
3008        directionalClassName = CLASS_NAME_RIGHT;
3009        orderClassName = CLASS_NAME_PREV;
3010        eventDirectionName = DIRECTION_RIGHT;
3011      }
3012
3013      if (nextElement && $__default["default"](nextElement).hasClass(CLASS_NAME_ACTIVE$2)) {
3014        this._isSliding = false;
3015        return;
3016      }
3017
3018      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
3019
3020      if (slideEvent.isDefaultPrevented()) {
3021        return;
3022      }
3023
3024      if (!activeElement || !nextElement) {
3025        // Some weirdness is happening, so we bail
3026        return;
3027      }
3028
3029      this._isSliding = true;
3030
3031      if (isCycling) {
3032        this.pause();
3033      }
3034
3035      this._setActiveIndicatorElement(nextElement);
3036
3037      this._activeElement = nextElement;
3038      var slidEvent = $__default["default"].Event(EVENT_SLID, {
3039        relatedTarget: nextElement,
3040        direction: eventDirectionName,
3041        from: activeElementIndex,
3042        to: nextElementIndex
3043      });
3044
3045      if ($__default["default"](this._element).hasClass(CLASS_NAME_SLIDE)) {
3046        $__default["default"](nextElement).addClass(orderClassName);
3047        Util.reflow(nextElement);
3048        $__default["default"](activeElement).addClass(directionalClassName);
3049        $__default["default"](nextElement).addClass(directionalClassName);
3050        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
3051        $__default["default"](activeElement).one(Util.TRANSITION_END, function () {
3052          $__default["default"](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$2);
3053          $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2 + " " + orderClassName + " " + directionalClassName);
3054          _this4._isSliding = false;
3055          setTimeout(function () {
3056            return $__default["default"](_this4._element).trigger(slidEvent);
3057          }, 0);
3058        }).emulateTransitionEnd(transitionDuration);
3059      } else {
3060        $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2);
3061        $__default["default"](nextElement).addClass(CLASS_NAME_ACTIVE$2);
3062        this._isSliding = false;
3063        $__default["default"](this._element).trigger(slidEvent);
3064      }
3065
3066      if (isCycling) {
3067        this.cycle();
3068      }
3069    } // Static
3070    ;
3071
3072    Carousel._jQueryInterface = function _jQueryInterface(config) {
3073      return this.each(function () {
3074        var data = $__default["default"](this).data(DATA_KEY$8);
3075
3076        var _config = _extends({}, Default$7, $__default["default"](this).data());
3077
3078        if (typeof config === 'object') {
3079          _config = _extends({}, _config, config);
3080        }
3081
3082        var action = typeof config === 'string' ? config : _config.slide;
3083
3084        if (!data) {
3085          data = new Carousel(this, _config);
3086          $__default["default"](this).data(DATA_KEY$8, data);
3087        }
3088
3089        if (typeof config === 'number') {
3090          data.to(config);
3091        } else if (typeof action === 'string') {
3092          if (typeof data[action] === 'undefined') {
3093            throw new TypeError("No method named \"" + action + "\"");
3094          }
3095
3096          data[action]();
3097        } else if (_config.interval && _config.ride) {
3098          data.pause();
3099          data.cycle();
3100        }
3101      });
3102    };
3103
3104    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
3105      var selector = Util.getSelectorFromElement(this);
3106
3107      if (!selector) {
3108        return;
3109      }
3110
3111      var target = $__default["default"](selector)[0];
3112
3113      if (!target || !$__default["default"](target).hasClass(CLASS_NAME_CAROUSEL)) {
3114        return;
3115      }
3116
3117      var config = _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
3118
3119      var slideIndex = this.getAttribute('data-slide-to');
3120
3121      if (slideIndex) {
3122        config.interval = false;
3123      }
3124
3125      Carousel._jQueryInterface.call($__default["default"](target), config);
3126
3127      if (slideIndex) {
3128        $__default["default"](target).data(DATA_KEY$8).to(slideIndex);
3129      }
3130
3131      event.preventDefault();
3132    };
3133
3134    _createClass(Carousel, null, [{
3135      key: "VERSION",
3136      get: function get() {
3137        return VERSION$8;
3138      }
3139    }, {
3140      key: "Default",
3141      get: function get() {
3142        return Default$7;
3143      }
3144    }]);
3145
3146    return Carousel;
3147  }();
3148  /**
3149   * Data API implementation
3150   */
3151
3152
3153  $__default["default"](document).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);
3154  $__default["default"](window).on(EVENT_LOAD_DATA_API$1, function () {
3155    var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));
3156
3157    for (var i = 0, len = carousels.length; i < len; i++) {
3158      var $carousel = $__default["default"](carousels[i]);
3159
3160      Carousel._jQueryInterface.call($carousel, $carousel.data());
3161    }
3162  });
3163  /**
3164   * jQuery
3165   */
3166
3167  $__default["default"].fn[NAME$8] = Carousel._jQueryInterface;
3168  $__default["default"].fn[NAME$8].Constructor = Carousel;
3169
3170  $__default["default"].fn[NAME$8].noConflict = function () {
3171    $__default["default"].fn[NAME$8] = JQUERY_NO_CONFLICT$8;
3172    return Carousel._jQueryInterface;
3173  };
3174
3175  /**
3176   * Constants
3177   */
3178
3179  var NAME$7 = 'collapse';
3180  var VERSION$7 = '4.6.2';
3181  var DATA_KEY$7 = 'bs.collapse';
3182  var EVENT_KEY$7 = "." + DATA_KEY$7;
3183  var DATA_API_KEY$4 = '.data-api';
3184  var JQUERY_NO_CONFLICT$7 = $__default["default"].fn[NAME$7];
3185  var CLASS_NAME_SHOW$6 = 'show';
3186  var CLASS_NAME_COLLAPSE = 'collapse';
3187  var CLASS_NAME_COLLAPSING = 'collapsing';
3188  var CLASS_NAME_COLLAPSED = 'collapsed';
3189  var DIMENSION_WIDTH = 'width';
3190  var DIMENSION_HEIGHT = 'height';
3191  var EVENT_SHOW$4 = "show" + EVENT_KEY$7;
3192  var EVENT_SHOWN$4 = "shown" + EVENT_KEY$7;
3193  var EVENT_HIDE$4 = "hide" + EVENT_KEY$7;
3194  var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$7;
3195  var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$7 + DATA_API_KEY$4;
3196  var SELECTOR_ACTIVES = '.show, .collapsing';
3197  var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="collapse"]';
3198  var Default$6 = {
3199    toggle: true,
3200    parent: ''
3201  };
3202  var DefaultType$6 = {
3203    toggle: 'boolean',
3204    parent: '(string|element)'
3205  };
3206  /**
3207   * Class definition
3208   */
3209
3210  var Collapse = /*#__PURE__*/function () {
3211    function Collapse(element, config) {
3212      this._isTransitioning = false;
3213      this._element = element;
3214      this._config = this._getConfig(config);
3215      this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
3216      var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$3));
3217
3218      for (var i = 0, len = toggleList.length; i < len; i++) {
3219        var elem = toggleList[i];
3220        var selector = Util.getSelectorFromElement(elem);
3221        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {
3222          return foundElem === element;
3223        });
3224
3225        if (selector !== null && filterElement.length > 0) {
3226          this._selector = selector;
3227
3228          this._triggerArray.push(elem);
3229        }
3230      }
3231
3232      this._parent = this._config.parent ? this._getParent() : null;
3233
3234      if (!this._config.parent) {
3235        this._addAriaAndCollapsedClass(this._element, this._triggerArray);
3236      }
3237
3238      if (this._config.toggle) {
3239        this.toggle();
3240      }
3241    } // Getters
3242
3243
3244    var _proto = Collapse.prototype;
3245
3246    // Public
3247    _proto.toggle = function toggle() {
3248      if ($__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
3249        this.hide();
3250      } else {
3251        this.show();
3252      }
3253    };
3254
3255    _proto.show = function show() {
3256      var _this = this;
3257
3258      if (this._isTransitioning || $__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
3259        return;
3260      }
3261
3262      var actives;
3263      var activesData;
3264
3265      if (this._parent) {
3266        actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {
3267          if (typeof _this._config.parent === 'string') {
3268            return elem.getAttribute('data-parent') === _this._config.parent;
3269          }
3270
3271          return elem.classList.contains(CLASS_NAME_COLLAPSE);
3272        });
3273
3274        if (actives.length === 0) {
3275          actives = null;
3276        }
3277      }
3278
3279      if (actives) {
3280        activesData = $__default["default"](actives).not(this._selector).data(DATA_KEY$7);
3281
3282        if (activesData && activesData._isTransitioning) {
3283          return;
3284        }
3285      }
3286
3287      var startEvent = $__default["default"].Event(EVENT_SHOW$4);
3288      $__default["default"](this._element).trigger(startEvent);
3289
3290      if (startEvent.isDefaultPrevented()) {
3291        return;
3292      }
3293
3294      if (actives) {
3295        Collapse._jQueryInterface.call($__default["default"](actives).not(this._selector), 'hide');
3296
3297        if (!activesData) {
3298          $__default["default"](actives).data(DATA_KEY$7, null);
3299        }
3300      }
3301
3302      var dimension = this._getDimension();
3303
3304      $__default["default"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);
3305      this._element.style[dimension] = 0;
3306
3307      if (this._triggerArray.length) {
3308        $__default["default"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);
3309      }
3310
3311      this.setTransitioning(true);
3312
3313      var complete = function complete() {
3314        $__default["default"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6);
3315        _this._element.style[dimension] = '';
3316
3317        _this.setTransitioning(false);
3318
3319        $__default["default"](_this._element).trigger(EVENT_SHOWN$4);
3320      };
3321
3322      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
3323      var scrollSize = "scroll" + capitalizedDimension;
3324      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
3325      $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
3326      this._element.style[dimension] = this._element[scrollSize] + "px";
3327    };
3328
3329    _proto.hide = function hide() {
3330      var _this2 = this;
3331
3332      if (this._isTransitioning || !$__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
3333        return;
3334      }
3335
3336      var startEvent = $__default["default"].Event(EVENT_HIDE$4);
3337      $__default["default"](this._element).trigger(startEvent);
3338
3339      if (startEvent.isDefaultPrevented()) {
3340        return;
3341      }
3342
3343      var dimension = this._getDimension();
3344
3345      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
3346      Util.reflow(this._element);
3347      $__default["default"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6);
3348      var triggerArrayLength = this._triggerArray.length;
3349
3350      if (triggerArrayLength > 0) {
3351        for (var i = 0; i < triggerArrayLength; i++) {
3352          var trigger = this._triggerArray[i];
3353          var selector = Util.getSelectorFromElement(trigger);
3354
3355          if (selector !== null) {
3356            var $elem = $__default["default"]([].slice.call(document.querySelectorAll(selector)));
3357
3358            if (!$elem.hasClass(CLASS_NAME_SHOW$6)) {
3359              $__default["default"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);
3360            }
3361          }
3362        }
3363      }
3364
3365      this.setTransitioning(true);
3366
3367      var complete = function complete() {
3368        _this2.setTransitioning(false);
3369
3370        $__default["default"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN$4);
3371      };
3372
3373      this._element.style[dimension] = '';
3374      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
3375      $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
3376    };
3377
3378    _proto.setTransitioning = function setTransitioning(isTransitioning) {
3379      this._isTransitioning = isTransitioning;
3380    };
3381
3382    _proto.dispose = function dispose() {
3383      $__default["default"].removeData(this._element, DATA_KEY$7);
3384      this._config = null;
3385      this._parent = null;
3386      this._element = null;
3387      this._triggerArray = null;
3388      this._isTransitioning = null;
3389    } // Private
3390    ;
3391
3392    _proto._getConfig = function _getConfig(config) {
3393      config = _extends({}, Default$6, config);
3394      config.toggle = Boolean(config.toggle); // Coerce string values
3395
3396      Util.typeCheckConfig(NAME$7, config, DefaultType$6);
3397      return config;
3398    };
3399
3400    _proto._getDimension = function _getDimension() {
3401      var hasWidth = $__default["default"](this._element).hasClass(DIMENSION_WIDTH);
3402      return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;
3403    };
3404
3405    _proto._getParent = function _getParent() {
3406      var _this3 = this;
3407
3408      var parent;
3409
3410      if (Util.isElement(this._config.parent)) {
3411        parent = this._config.parent; // It's a jQuery object
3412
3413        if (typeof this._config.parent.jquery !== 'undefined') {
3414          parent = this._config.parent[0];
3415        }
3416      } else {
3417        parent = document.querySelector(this._config.parent);
3418      }
3419
3420      var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
3421      var children = [].slice.call(parent.querySelectorAll(selector));
3422      $__default["default"](children).each(function (i, element) {
3423        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
3424      });
3425      return parent;
3426    };
3427
3428    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
3429      var isOpen = $__default["default"](element).hasClass(CLASS_NAME_SHOW$6);
3430
3431      if (triggerArray.length) {
3432        $__default["default"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
3433      }
3434    } // Static
3435    ;
3436
3437    Collapse._getTargetFromElement = function _getTargetFromElement(element) {
3438      var selector = Util.getSelectorFromElement(element);
3439      return selector ? document.querySelector(selector) : null;
3440    };
3441
3442    Collapse._jQueryInterface = function _jQueryInterface(config) {
3443      return this.each(function () {
3444        var $element = $__default["default"](this);
3445        var data = $element.data(DATA_KEY$7);
3446
3447        var _config = _extends({}, Default$6, $element.data(), typeof config === 'object' && config ? config : {});
3448
3449        if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
3450          _config.toggle = false;
3451        }
3452
3453        if (!data) {
3454          data = new Collapse(this, _config);
3455          $element.data(DATA_KEY$7, data);
3456        }
3457
3458        if (typeof config === 'string') {
3459          if (typeof data[config] === 'undefined') {
3460            throw new TypeError("No method named \"" + config + "\"");
3461          }
3462
3463          data[config]();
3464        }
3465      });
3466    };
3467
3468    _createClass(Collapse, null, [{
3469      key: "VERSION",
3470      get: function get() {
3471        return VERSION$7;
3472      }
3473    }, {
3474      key: "Default",
3475      get: function get() {
3476        return Default$6;
3477      }
3478    }]);
3479
3480    return Collapse;
3481  }();
3482  /**
3483   * Data API implementation
3484   */
3485
3486
3487  $__default["default"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
3488    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
3489    if (event.currentTarget.tagName === 'A') {
3490      event.preventDefault();
3491    }
3492
3493    var $trigger = $__default["default"](this);
3494    var selector = Util.getSelectorFromElement(this);
3495    var selectors = [].slice.call(document.querySelectorAll(selector));
3496    $__default["default"](selectors).each(function () {
3497      var $target = $__default["default"](this);
3498      var data = $target.data(DATA_KEY$7);
3499      var config = data ? 'toggle' : $trigger.data();
3500
3501      Collapse._jQueryInterface.call($target, config);
3502    });
3503  });
3504  /**
3505   * jQuery
3506   */
3507
3508  $__default["default"].fn[NAME$7] = Collapse._jQueryInterface;
3509  $__default["default"].fn[NAME$7].Constructor = Collapse;
3510
3511  $__default["default"].fn[NAME$7].noConflict = function () {
3512    $__default["default"].fn[NAME$7] = JQUERY_NO_CONFLICT$7;
3513    return Collapse._jQueryInterface;
3514  };
3515
3516  /**
3517   * Constants
3518   */
3519
3520  var NAME$6 = 'dropdown';
3521  var VERSION$6 = '4.6.2';
3522  var DATA_KEY$6 = 'bs.dropdown';
3523  var EVENT_KEY$6 = "." + DATA_KEY$6;
3524  var DATA_API_KEY$3 = '.data-api';
3525  var JQUERY_NO_CONFLICT$6 = $__default["default"].fn[NAME$6];
3526  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key
3527
3528  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
3529
3530  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
3531
3532  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
3533
3534  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
3535
3536  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
3537
3538  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE$1);
3539  var CLASS_NAME_DISABLED$1 = 'disabled';
3540  var CLASS_NAME_SHOW$5 = 'show';
3541  var CLASS_NAME_DROPUP = 'dropup';
3542  var CLASS_NAME_DROPRIGHT = 'dropright';
3543  var CLASS_NAME_DROPLEFT = 'dropleft';
3544  var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
3545  var CLASS_NAME_POSITION_STATIC = 'position-static';
3546  var EVENT_HIDE$3 = "hide" + EVENT_KEY$6;
3547  var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$6;
3548  var EVENT_SHOW$3 = "show" + EVENT_KEY$6;
3549  var EVENT_SHOWN$3 = "shown" + EVENT_KEY$6;
3550  var EVENT_CLICK = "click" + EVENT_KEY$6;
3551  var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$6 + DATA_API_KEY$3;
3552  var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$6 + DATA_API_KEY$3;
3553  var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$6 + DATA_API_KEY$3;
3554  var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]';
3555  var SELECTOR_FORM_CHILD = '.dropdown form';
3556  var SELECTOR_MENU = '.dropdown-menu';
3557  var SELECTOR_NAVBAR_NAV = '.navbar-nav';
3558  var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
3559  var PLACEMENT_TOP = 'top-start';
3560  var PLACEMENT_TOPEND = 'top-end';
3561  var PLACEMENT_BOTTOM = 'bottom-start';
3562  var PLACEMENT_BOTTOMEND = 'bottom-end';
3563  var PLACEMENT_RIGHT = 'right-start';
3564  var PLACEMENT_LEFT = 'left-start';
3565  var Default$5 = {
3566    offset: 0,
3567    flip: true,
3568    boundary: 'scrollParent',
3569    reference: 'toggle',
3570    display: 'dynamic',
3571    popperConfig: null
3572  };
3573  var DefaultType$5 = {
3574    offset: '(number|string|function)',
3575    flip: 'boolean',
3576    boundary: '(string|element)',
3577    reference: '(string|element)',
3578    display: 'string',
3579    popperConfig: '(null|object)'
3580  };
3581  /**
3582   * Class definition
3583   */
3584
3585  var Dropdown = /*#__PURE__*/function () {
3586    function Dropdown(element, config) {
3587      this._element = element;
3588      this._popper = null;
3589      this._config = this._getConfig(config);
3590      this._menu = this._getMenuElement();
3591      this._inNavbar = this._detectNavbar();
3592
3593      this._addEventListeners();
3594    } // Getters
3595
3596
3597    var _proto = Dropdown.prototype;
3598
3599    // Public
3600    _proto.toggle = function toggle() {
3601      if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1)) {
3602        return;
3603      }
3604
3605      var isActive = $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5);
3606
3607      Dropdown._clearMenus();
3608
3609      if (isActive) {
3610        return;
3611      }
3612
3613      this.show(true);
3614    };
3615
3616    _proto.show = function show(usePopper) {
3617      if (usePopper === void 0) {
3618        usePopper = false;
3619      }
3620
3621      if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {
3622        return;
3623      }
3624
3625      var relatedTarget = {
3626        relatedTarget: this._element
3627      };
3628      var showEvent = $__default["default"].Event(EVENT_SHOW$3, relatedTarget);
3629
3630      var parent = Dropdown._getParentFromElement(this._element);
3631
3632      $__default["default"](parent).trigger(showEvent);
3633
3634      if (showEvent.isDefaultPrevented()) {
3635        return;
3636      } // Totally disable Popper for Dropdowns in Navbar
3637
3638
3639      if (!this._inNavbar && usePopper) {
3640        // Check for Popper dependency
3641        if (typeof Popper__default["default"] === 'undefined') {
3642          throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
3643        }
3644
3645        var referenceElement = this._element;
3646
3647        if (this._config.reference === 'parent') {
3648          referenceElement = parent;
3649        } else if (Util.isElement(this._config.reference)) {
3650          referenceElement = this._config.reference; // Check if it's jQuery element
3651
3652          if (typeof this._config.reference.jquery !== 'undefined') {
3653            referenceElement = this._config.reference[0];
3654          }
3655        } // If boundary is not `scrollParent`, then set position to `static`
3656        // to allow the menu to "escape" the scroll parent's boundaries
3657        // https://github.com/twbs/bootstrap/issues/24251
3658
3659
3660        if (this._config.boundary !== 'scrollParent') {
3661          $__default["default"](parent).addClass(CLASS_NAME_POSITION_STATIC);
3662        }
3663
3664        this._popper = new Popper__default["default"](referenceElement, this._menu, this._getPopperConfig());
3665      } // If this is a touch-enabled device we add extra
3666      // empty mouseover listeners to the body's immediate children;
3667      // only needed because of broken event delegation on iOS
3668      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
3669
3670
3671      if ('ontouchstart' in document.documentElement && $__default["default"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
3672        $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop);
3673      }
3674
3675      this._element.focus();
3676
3677      this._element.setAttribute('aria-expanded', true);
3678
3679      $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5);
3680      $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_SHOWN$3, relatedTarget));
3681    };
3682
3683    _proto.hide = function hide() {
3684      if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || !$__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {
3685        return;
3686      }
3687
3688      var relatedTarget = {
3689        relatedTarget: this._element
3690      };
3691      var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget);
3692
3693      var parent = Dropdown._getParentFromElement(this._element);
3694
3695      $__default["default"](parent).trigger(hideEvent);
3696
3697      if (hideEvent.isDefaultPrevented()) {
3698        return;
3699      }
3700
3701      if (this._popper) {
3702        this._popper.destroy();
3703      }
3704
3705      $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5);
3706      $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget));
3707    };
3708
3709    _proto.dispose = function dispose() {
3710      $__default["default"].removeData(this._element, DATA_KEY$6);
3711      $__default["default"](this._element).off(EVENT_KEY$6);
3712      this._element = null;
3713      this._menu = null;
3714
3715      if (this._popper !== null) {
3716        this._popper.destroy();
3717
3718        this._popper = null;
3719      }
3720    };
3721
3722    _proto.update = function update() {
3723      this._inNavbar = this._detectNavbar();
3724
3725      if (this._popper !== null) {
3726        this._popper.scheduleUpdate();
3727      }
3728    } // Private
3729    ;
3730
3731    _proto._addEventListeners = function _addEventListeners() {
3732      var _this = this;
3733
3734      $__default["default"](this._element).on(EVENT_CLICK, function (event) {
3735        event.preventDefault();
3736        event.stopPropagation();
3737
3738        _this.toggle();
3739      });
3740    };
3741
3742    _proto._getConfig = function _getConfig(config) {
3743      config = _extends({}, this.constructor.Default, $__default["default"](this._element).data(), config);
3744      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
3745      return config;
3746    };
3747
3748    _proto._getMenuElement = function _getMenuElement() {
3749      if (!this._menu) {
3750        var parent = Dropdown._getParentFromElement(this._element);
3751
3752        if (parent) {
3753          this._menu = parent.querySelector(SELECTOR_MENU);
3754        }
3755      }
3756
3757      return this._menu;
3758    };
3759
3760    _proto._getPlacement = function _getPlacement() {
3761      var $parentDropdown = $__default["default"](this._element.parentNode);
3762      var placement = PLACEMENT_BOTTOM; // Handle dropup
3763
3764      if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
3765        placement = $__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
3766      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
3767        placement = PLACEMENT_RIGHT;
3768      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
3769        placement = PLACEMENT_LEFT;
3770      } else if ($__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
3771        placement = PLACEMENT_BOTTOMEND;
3772      }
3773
3774      return placement;
3775    };
3776
3777    _proto._detectNavbar = function _detectNavbar() {
3778      return $__default["default"](this._element).closest('.navbar').length > 0;
3779    };
3780
3781    _proto._getOffset = function _getOffset() {
3782      var _this2 = this;
3783
3784      var offset = {};
3785
3786      if (typeof this._config.offset === 'function') {
3787        offset.fn = function (data) {
3788          data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element));
3789          return data;
3790        };
3791      } else {
3792        offset.offset = this._config.offset;
3793      }
3794
3795      return offset;
3796    };
3797
3798    _proto._getPopperConfig = function _getPopperConfig() {
3799      var popperConfig = {
3800        placement: this._getPlacement(),
3801        modifiers: {
3802          offset: this._getOffset(),
3803          flip: {
3804            enabled: this._config.flip
3805          },
3806          preventOverflow: {
3807            boundariesElement: this._config.boundary
3808          }
3809        }
3810      }; // Disable Popper if we have a static display
3811
3812      if (this._config.display === 'static') {
3813        popperConfig.modifiers.applyStyle = {
3814          enabled: false
3815        };
3816      }
3817
3818      return _extends({}, popperConfig, this._config.popperConfig);
3819    } // Static
3820    ;
3821
3822    Dropdown._jQueryInterface = function _jQueryInterface(config) {
3823      return this.each(function () {
3824        var data = $__default["default"](this).data(DATA_KEY$6);
3825
3826        var _config = typeof config === 'object' ? config : null;
3827
3828        if (!data) {
3829          data = new Dropdown(this, _config);
3830          $__default["default"](this).data(DATA_KEY$6, data);
3831        }
3832
3833        if (typeof config === 'string') {
3834          if (typeof data[config] === 'undefined') {
3835            throw new TypeError("No method named \"" + config + "\"");
3836          }
3837
3838          data[config]();
3839        }
3840      });
3841    };
3842
3843    Dropdown._clearMenus = function _clearMenus(event) {
3844      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
3845        return;
3846      }
3847
3848      var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));
3849
3850      for (var i = 0, len = toggles.length; i < len; i++) {
3851        var parent = Dropdown._getParentFromElement(toggles[i]);
3852
3853        var context = $__default["default"](toggles[i]).data(DATA_KEY$6);
3854        var relatedTarget = {
3855          relatedTarget: toggles[i]
3856        };
3857
3858        if (event && event.type === 'click') {
3859          relatedTarget.clickEvent = event;
3860        }
3861
3862        if (!context) {
3863          continue;
3864        }
3865
3866        var dropdownMenu = context._menu;
3867
3868        if (!$__default["default"](parent).hasClass(CLASS_NAME_SHOW$5)) {
3869          continue;
3870        }
3871
3872        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default["default"].contains(parent, event.target)) {
3873          continue;
3874        }
3875
3876        var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget);
3877        $__default["default"](parent).trigger(hideEvent);
3878
3879        if (hideEvent.isDefaultPrevented()) {
3880          continue;
3881        } // If this is a touch-enabled device we remove the extra
3882        // empty mouseover listeners we added for iOS support
3883
3884
3885        if ('ontouchstart' in document.documentElement) {
3886          $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop);
3887        }
3888
3889        toggles[i].setAttribute('aria-expanded', 'false');
3890
3891        if (context._popper) {
3892          context._popper.destroy();
3893        }
3894
3895        $__default["default"](dropdownMenu).removeClass(CLASS_NAME_SHOW$5);
3896        $__default["default"](parent).removeClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget));
3897      }
3898    };
3899
3900    Dropdown._getParentFromElement = function _getParentFromElement(element) {
3901      var parent;
3902      var selector = Util.getSelectorFromElement(element);
3903
3904      if (selector) {
3905        parent = document.querySelector(selector);
3906      }
3907
3908      return parent || element.parentNode;
3909    } // eslint-disable-next-line complexity
3910    ;
3911
3912    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
3913      // If not input/textarea:
3914      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
3915      // If input/textarea:
3916      //  - If space key => not a dropdown command
3917      //  - If key is other than escape
3918      //    - If key is not up or down => not a dropdown command
3919      //    - If trigger inside the menu => not a dropdown command
3920      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE$1 && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default["default"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
3921        return;
3922      }
3923
3924      if (this.disabled || $__default["default"](this).hasClass(CLASS_NAME_DISABLED$1)) {
3925        return;
3926      }
3927
3928      var parent = Dropdown._getParentFromElement(this);
3929
3930      var isActive = $__default["default"](parent).hasClass(CLASS_NAME_SHOW$5);
3931
3932      if (!isActive && event.which === ESCAPE_KEYCODE$1) {
3933        return;
3934      }
3935
3936      event.preventDefault();
3937      event.stopPropagation();
3938
3939      if (!isActive || event.which === ESCAPE_KEYCODE$1 || event.which === SPACE_KEYCODE) {
3940        if (event.which === ESCAPE_KEYCODE$1) {
3941          $__default["default"](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');
3942        }
3943
3944        $__default["default"](this).trigger('click');
3945        return;
3946      }
3947
3948      var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {
3949        return $__default["default"](item).is(':visible');
3950      });
3951
3952      if (items.length === 0) {
3953        return;
3954      }
3955
3956      var index = items.indexOf(event.target);
3957
3958      if (event.which === ARROW_UP_KEYCODE && index > 0) {
3959        // Up
3960        index--;
3961      }
3962
3963      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
3964        // Down
3965        index++;
3966      }
3967
3968      if (index < 0) {
3969        index = 0;
3970      }
3971
3972      items[index].focus();
3973    };
3974
3975    _createClass(Dropdown, null, [{
3976      key: "VERSION",
3977      get: function get() {
3978        return VERSION$6;
3979      }
3980    }, {
3981      key: "Default",
3982      get: function get() {
3983        return Default$5;
3984      }
3985    }, {
3986      key: "DefaultType",
3987      get: function get() {
3988        return DefaultType$5;
3989      }
3990    }]);
3991
3992    return Dropdown;
3993  }();
3994  /**
3995   * Data API implementation
3996   */
3997
3998
3999  $__default["default"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$2 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
4000    event.preventDefault();
4001    event.stopPropagation();
4002
4003    Dropdown._jQueryInterface.call($__default["default"](this), 'toggle');
4004  }).on(EVENT_CLICK_DATA_API$2, SELECTOR_FORM_CHILD, function (e) {
4005    e.stopPropagation();
4006  });
4007  /**
4008   * jQuery
4009   */
4010
4011  $__default["default"].fn[NAME$6] = Dropdown._jQueryInterface;
4012  $__default["default"].fn[NAME$6].Constructor = Dropdown;
4013
4014  $__default["default"].fn[NAME$6].noConflict = function () {
4015    $__default["default"].fn[NAME$6] = JQUERY_NO_CONFLICT$6;
4016    return Dropdown._jQueryInterface;
4017  };
4018
4019  /**
4020   * Constants
4021   */
4022
4023  var NAME$5 = 'modal';
4024  var VERSION$5 = '4.6.2';
4025  var DATA_KEY$5 = 'bs.modal';
4026  var EVENT_KEY$5 = "." + DATA_KEY$5;
4027  var DATA_API_KEY$2 = '.data-api';
4028  var JQUERY_NO_CONFLICT$5 = $__default["default"].fn[NAME$5];
4029  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
4030
4031  var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
4032  var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
4033  var CLASS_NAME_BACKDROP = 'modal-backdrop';
4034  var CLASS_NAME_OPEN = 'modal-open';
4035  var CLASS_NAME_FADE$4 = 'fade';
4036  var CLASS_NAME_SHOW$4 = 'show';
4037  var CLASS_NAME_STATIC = 'modal-static';
4038  var EVENT_HIDE$2 = "hide" + EVENT_KEY$5;
4039  var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5;
4040  var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5;
4041  var EVENT_SHOW$2 = "show" + EVENT_KEY$5;
4042  var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5;
4043  var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5;
4044  var EVENT_RESIZE = "resize" + EVENT_KEY$5;
4045  var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$5;
4046  var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5;
4047  var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5;
4048  var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5;
4049  var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$5 + DATA_API_KEY$2;
4050  var SELECTOR_DIALOG = '.modal-dialog';
4051  var SELECTOR_MODAL_BODY = '.modal-body';
4052  var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="modal"]';
4053  var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="modal"]';
4054  var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
4055  var SELECTOR_STICKY_CONTENT = '.sticky-top';
4056  var Default$4 = {
4057    backdrop: true,
4058    keyboard: true,
4059    focus: true,
4060    show: true
4061  };
4062  var DefaultType$4 = {
4063    backdrop: '(boolean|string)',
4064    keyboard: 'boolean',
4065    focus: 'boolean',
4066    show: 'boolean'
4067  };
4068  /**
4069   * Class definition
4070   */
4071
4072  var Modal = /*#__PURE__*/function () {
4073    function Modal(element, config) {
4074      this._config = this._getConfig(config);
4075      this._element = element;
4076      this._dialog = element.querySelector(SELECTOR_DIALOG);
4077      this._backdrop = null;
4078      this._isShown = false;
4079      this._isBodyOverflowing = false;
4080      this._ignoreBackdropClick = false;
4081      this._isTransitioning = false;
4082      this._scrollbarWidth = 0;
4083    } // Getters
4084
4085
4086    var _proto = Modal.prototype;
4087
4088    // Public
4089    _proto.toggle = function toggle(relatedTarget) {
4090      return this._isShown ? this.hide() : this.show(relatedTarget);
4091    };
4092
4093    _proto.show = function show(relatedTarget) {
4094      var _this = this;
4095
4096      if (this._isShown || this._isTransitioning) {
4097        return;
4098      }
4099
4100      var showEvent = $__default["default"].Event(EVENT_SHOW$2, {
4101        relatedTarget: relatedTarget
4102      });
4103      $__default["default"](this._element).trigger(showEvent);
4104
4105      if (showEvent.isDefaultPrevented()) {
4106        return;
4107      }
4108
4109      this._isShown = true;
4110
4111      if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) {
4112        this._isTransitioning = true;
4113      }
4114
4115      this._checkScrollbar();
4116
4117      this._setScrollbar();
4118
4119      this._adjustDialog();
4120
4121      this._setEscapeEvent();
4122
4123      this._setResizeEvent();
4124
4125      $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function (event) {
4126        return _this.hide(event);
4127      });
4128      $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
4129        $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
4130          if ($__default["default"](event.target).is(_this._element)) {
4131            _this._ignoreBackdropClick = true;
4132          }
4133        });
4134      });
4135
4136      this._showBackdrop(function () {
4137        return _this._showElement(relatedTarget);
4138      });
4139    };
4140
4141    _proto.hide = function hide(event) {
4142      var _this2 = this;
4143
4144      if (event) {
4145        event.preventDefault();
4146      }
4147
4148      if (!this._isShown || this._isTransitioning) {
4149        return;
4150      }
4151
4152      var hideEvent = $__default["default"].Event(EVENT_HIDE$2);
4153      $__default["default"](this._element).trigger(hideEvent);
4154
4155      if (!this._isShown || hideEvent.isDefaultPrevented()) {
4156        return;
4157      }
4158
4159      this._isShown = false;
4160      var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4);
4161
4162      if (transition) {
4163        this._isTransitioning = true;
4164      }
4165
4166      this._setEscapeEvent();
4167
4168      this._setResizeEvent();
4169
4170      $__default["default"](document).off(EVENT_FOCUSIN);
4171      $__default["default"](this._element).removeClass(CLASS_NAME_SHOW$4);
4172      $__default["default"](this._element).off(EVENT_CLICK_DISMISS$1);
4173      $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
4174
4175      if (transition) {
4176        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
4177        $__default["default"](this._element).one(Util.TRANSITION_END, function (event) {
4178          return _this2._hideModal(event);
4179        }).emulateTransitionEnd(transitionDuration);
4180      } else {
4181        this._hideModal();
4182      }
4183    };
4184
4185    _proto.dispose = function dispose() {
4186      [window, this._element, this._dialog].forEach(function (htmlElement) {
4187        return $__default["default"](htmlElement).off(EVENT_KEY$5);
4188      });
4189      /**
4190       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
4191       * Do not move `document` in `htmlElements` array
4192       * It will remove `EVENT_CLICK_DATA_API` event that should remain
4193       */
4194
4195      $__default["default"](document).off(EVENT_FOCUSIN);
4196      $__default["default"].removeData(this._element, DATA_KEY$5);
4197      this._config = null;
4198      this._element = null;
4199      this._dialog = null;
4200      this._backdrop = null;
4201      this._isShown = null;
4202      this._isBodyOverflowing = null;
4203      this._ignoreBackdropClick = null;
4204      this._isTransitioning = null;
4205      this._scrollbarWidth = null;
4206    };
4207
4208    _proto.handleUpdate = function handleUpdate() {
4209      this._adjustDialog();
4210    } // Private
4211    ;
4212
4213    _proto._getConfig = function _getConfig(config) {
4214      config = _extends({}, Default$4, config);
4215      Util.typeCheckConfig(NAME$5, config, DefaultType$4);
4216      return config;
4217    };
4218
4219    _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
4220      var _this3 = this;
4221
4222      var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED);
4223      $__default["default"](this._element).trigger(hideEventPrevented);
4224
4225      if (hideEventPrevented.isDefaultPrevented()) {
4226        return;
4227      }
4228
4229      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
4230
4231      if (!isModalOverflowing) {
4232        this._element.style.overflowY = 'hidden';
4233      }
4234
4235      this._element.classList.add(CLASS_NAME_STATIC);
4236
4237      var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog);
4238      $__default["default"](this._element).off(Util.TRANSITION_END);
4239      $__default["default"](this._element).one(Util.TRANSITION_END, function () {
4240        _this3._element.classList.remove(CLASS_NAME_STATIC);
4241
4242        if (!isModalOverflowing) {
4243          $__default["default"](_this3._element).one(Util.TRANSITION_END, function () {
4244            _this3._element.style.overflowY = '';
4245          }).emulateTransitionEnd(_this3._element, modalTransitionDuration);
4246        }
4247      }).emulateTransitionEnd(modalTransitionDuration);
4248
4249      this._element.focus();
4250    };
4251
4252    _proto._showElement = function _showElement(relatedTarget) {
4253      var _this4 = this;
4254
4255      var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4);
4256      var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
4257
4258      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
4259        // Don't move modal's DOM position
4260        document.body.appendChild(this._element);
4261      }
4262
4263      this._element.style.display = 'block';
4264
4265      this._element.removeAttribute('aria-hidden');
4266
4267      this._element.setAttribute('aria-modal', true);
4268
4269      this._element.setAttribute('role', 'dialog');
4270
4271      if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
4272        modalBody.scrollTop = 0;
4273      } else {
4274        this._element.scrollTop = 0;
4275      }
4276
4277      if (transition) {
4278        Util.reflow(this._element);
4279      }
4280
4281      $__default["default"](this._element).addClass(CLASS_NAME_SHOW$4);
4282
4283      if (this._config.focus) {
4284        this._enforceFocus();
4285      }
4286
4287      var shownEvent = $__default["default"].Event(EVENT_SHOWN$2, {
4288        relatedTarget: relatedTarget
4289      });
4290
4291      var transitionComplete = function transitionComplete() {
4292        if (_this4._config.focus) {
4293          _this4._element.focus();
4294        }
4295
4296        _this4._isTransitioning = false;
4297        $__default["default"](_this4._element).trigger(shownEvent);
4298      };
4299
4300      if (transition) {
4301        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);
4302        $__default["default"](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
4303      } else {
4304        transitionComplete();
4305      }
4306    };
4307
4308    _proto._enforceFocus = function _enforceFocus() {
4309      var _this5 = this;
4310
4311      $__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
4312      .on(EVENT_FOCUSIN, function (event) {
4313        if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) {
4314          _this5._element.focus();
4315        }
4316      });
4317    };
4318
4319    _proto._setEscapeEvent = function _setEscapeEvent() {
4320      var _this6 = this;
4321
4322      if (this._isShown) {
4323        $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
4324          if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
4325            event.preventDefault();
4326
4327            _this6.hide();
4328          } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
4329            _this6._triggerBackdropTransition();
4330          }
4331        });
4332      } else if (!this._isShown) {
4333        $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS);
4334      }
4335    };
4336
4337    _proto._setResizeEvent = function _setResizeEvent() {
4338      var _this7 = this;
4339
4340      if (this._isShown) {
4341        $__default["default"](window).on(EVENT_RESIZE, function (event) {
4342          return _this7.handleUpdate(event);
4343        });
4344      } else {
4345        $__default["default"](window).off(EVENT_RESIZE);
4346      }
4347    };
4348
4349    _proto._hideModal = function _hideModal() {
4350      var _this8 = this;
4351
4352      this._element.style.display = 'none';
4353
4354      this._element.setAttribute('aria-hidden', true);
4355
4356      this._element.removeAttribute('aria-modal');
4357
4358      this._element.removeAttribute('role');
4359
4360      this._isTransitioning = false;
4361
4362      this._showBackdrop(function () {
4363        $__default["default"](document.body).removeClass(CLASS_NAME_OPEN);
4364
4365        _this8._resetAdjustments();
4366
4367        _this8._resetScrollbar();
4368
4369        $__default["default"](_this8._element).trigger(EVENT_HIDDEN$2);
4370      });
4371    };
4372
4373    _proto._removeBackdrop = function _removeBackdrop() {
4374      if (this._backdrop) {
4375        $__default["default"](this._backdrop).remove();
4376        this._backdrop = null;
4377      }
4378    };
4379
4380    _proto._showBackdrop = function _showBackdrop(callback) {
4381      var _this9 = this;
4382
4383      var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4) ? CLASS_NAME_FADE$4 : '';
4384
4385      if (this._isShown && this._config.backdrop) {
4386        this._backdrop = document.createElement('div');
4387        this._backdrop.className = CLASS_NAME_BACKDROP;
4388
4389        if (animate) {
4390          this._backdrop.classList.add(animate);
4391        }
4392
4393        $__default["default"](this._backdrop).appendTo(document.body);
4394        $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, function (event) {
4395          if (_this9._ignoreBackdropClick) {
4396            _this9._ignoreBackdropClick = false;
4397            return;
4398          }
4399
4400          if (event.target !== event.currentTarget) {
4401            return;
4402          }
4403
4404          if (_this9._config.backdrop === 'static') {
4405            _this9._triggerBackdropTransition();
4406          } else {
4407            _this9.hide();
4408          }
4409        });
4410
4411        if (animate) {
4412          Util.reflow(this._backdrop);
4413        }
4414
4415        $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW$4);
4416
4417        if (!callback) {
4418          return;
4419        }
4420
4421        if (!animate) {
4422          callback();
4423          return;
4424        }
4425
4426        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
4427        $__default["default"](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
4428      } else if (!this._isShown && this._backdrop) {
4429        $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW$4);
4430
4431        var callbackRemove = function callbackRemove() {
4432          _this9._removeBackdrop();
4433
4434          if (callback) {
4435            callback();
4436          }
4437        };
4438
4439        if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) {
4440          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
4441
4442          $__default["default"](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
4443        } else {
4444          callbackRemove();
4445        }
4446      } else if (callback) {
4447        callback();
4448      }
4449    } // ----------------------------------------------------------------------
4450    // the following methods are used to handle overflowing modals
4451    // todo (fat): these should probably be refactored out of modal.js
4452    // ----------------------------------------------------------------------
4453    ;
4454
4455    _proto._adjustDialog = function _adjustDialog() {
4456      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
4457
4458      if (!this._isBodyOverflowing && isModalOverflowing) {
4459        this._element.style.paddingLeft = this._scrollbarWidth + "px";
4460      }
4461
4462      if (this._isBodyOverflowing && !isModalOverflowing) {
4463        this._element.style.paddingRight = this._scrollbarWidth + "px";
4464      }
4465    };
4466
4467    _proto._resetAdjustments = function _resetAdjustments() {
4468      this._element.style.paddingLeft = '';
4469      this._element.style.paddingRight = '';
4470    };
4471
4472    _proto._checkScrollbar = function _checkScrollbar() {
4473      var rect = document.body.getBoundingClientRect();
4474      this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
4475      this._scrollbarWidth = this._getScrollbarWidth();
4476    };
4477
4478    _proto._setScrollbar = function _setScrollbar() {
4479      var _this10 = this;
4480
4481      if (this._isBodyOverflowing) {
4482        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
4483        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
4484        var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
4485        var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
4486
4487        $__default["default"](fixedContent).each(function (index, element) {
4488          var actualPadding = element.style.paddingRight;
4489          var calculatedPadding = $__default["default"](element).css('padding-right');
4490          $__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px");
4491        }); // Adjust sticky content margin
4492
4493        $__default["default"](stickyContent).each(function (index, element) {
4494          var actualMargin = element.style.marginRight;
4495          var calculatedMargin = $__default["default"](element).css('margin-right');
4496          $__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px");
4497        }); // Adjust body padding
4498
4499        var actualPadding = document.body.style.paddingRight;
4500        var calculatedPadding = $__default["default"](document.body).css('padding-right');
4501        $__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
4502      }
4503
4504      $__default["default"](document.body).addClass(CLASS_NAME_OPEN);
4505    };
4506
4507    _proto._resetScrollbar = function _resetScrollbar() {
4508      // Restore fixed content padding
4509      var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
4510      $__default["default"](fixedContent).each(function (index, element) {
4511        var padding = $__default["default"](element).data('padding-right');
4512        $__default["default"](element).removeData('padding-right');
4513        element.style.paddingRight = padding ? padding : '';
4514      }); // Restore sticky content
4515
4516      var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
4517      $__default["default"](elements).each(function (index, element) {
4518        var margin = $__default["default"](element).data('margin-right');
4519
4520        if (typeof margin !== 'undefined') {
4521          $__default["default"](element).css('margin-right', margin).removeData('margin-right');
4522        }
4523      }); // Restore body padding
4524
4525      var padding = $__default["default"](document.body).data('padding-right');
4526      $__default["default"](document.body).removeData('padding-right');
4527      document.body.style.paddingRight = padding ? padding : '';
4528    };
4529
4530    _proto._getScrollbarWidth = function _getScrollbarWidth() {
4531      // thx d.walsh
4532      var scrollDiv = document.createElement('div');
4533      scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
4534      document.body.appendChild(scrollDiv);
4535      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
4536      document.body.removeChild(scrollDiv);
4537      return scrollbarWidth;
4538    } // Static
4539    ;
4540
4541    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
4542      return this.each(function () {
4543        var data = $__default["default"](this).data(DATA_KEY$5);
4544
4545        var _config = _extends({}, Default$4, $__default["default"](this).data(), typeof config === 'object' && config ? config : {});
4546
4547        if (!data) {
4548          data = new Modal(this, _config);
4549          $__default["default"](this).data(DATA_KEY$5, data);
4550        }
4551
4552        if (typeof config === 'string') {
4553          if (typeof data[config] === 'undefined') {
4554            throw new TypeError("No method named \"" + config + "\"");
4555          }
4556
4557          data[config](relatedTarget);
4558        } else if (_config.show) {
4559          data.show(relatedTarget);
4560        }
4561      });
4562    };
4563
4564    _createClass(Modal, null, [{
4565      key: "VERSION",
4566      get: function get() {
4567        return VERSION$5;
4568      }
4569    }, {
4570      key: "Default",
4571      get: function get() {
4572        return Default$4;
4573      }
4574    }]);
4575
4576    return Modal;
4577  }();
4578  /**
4579   * Data API implementation
4580   */
4581
4582
4583  $__default["default"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
4584    var _this11 = this;
4585
4586    var target;
4587    var selector = Util.getSelectorFromElement(this);
4588
4589    if (selector) {
4590      target = document.querySelector(selector);
4591    }
4592
4593    var config = $__default["default"](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
4594
4595    if (this.tagName === 'A' || this.tagName === 'AREA') {
4596      event.preventDefault();
4597    }
4598
4599    var $target = $__default["default"](target).one(EVENT_SHOW$2, function (showEvent) {
4600      if (showEvent.isDefaultPrevented()) {
4601        // Only register focus restorer if modal will actually get shown
4602        return;
4603      }
4604
4605      $target.one(EVENT_HIDDEN$2, function () {
4606        if ($__default["default"](_this11).is(':visible')) {
4607          _this11.focus();
4608        }
4609      });
4610    });
4611
4612    Modal._jQueryInterface.call($__default["default"](target), config, this);
4613  });
4614  /**
4615   * jQuery
4616   */
4617
4618  $__default["default"].fn[NAME$5] = Modal._jQueryInterface;
4619  $__default["default"].fn[NAME$5].Constructor = Modal;
4620
4621  $__default["default"].fn[NAME$5].noConflict = function () {
4622    $__default["default"].fn[NAME$5] = JQUERY_NO_CONFLICT$5;
4623    return Modal._jQueryInterface;
4624  };
4625
4626  /**
4627   * --------------------------------------------------------------------------
4628   * Bootstrap (v4.6.2): tools/sanitizer.js
4629   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4630   * --------------------------------------------------------------------------
4631   */
4632  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
4633  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
4634  var DefaultWhitelist = {
4635    // Global attributes allowed on any supplied element below.
4636    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
4637    a: ['target', 'href', 'title', 'rel'],
4638    area: [],
4639    b: [],
4640    br: [],
4641    col: [],
4642    code: [],
4643    div: [],
4644    em: [],
4645    hr: [],
4646    h1: [],
4647    h2: [],
4648    h3: [],
4649    h4: [],
4650    h5: [],
4651    h6: [],
4652    i: [],
4653    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
4654    li: [],
4655    ol: [],
4656    p: [],
4657    pre: [],
4658    s: [],
4659    small: [],
4660    span: [],
4661    sub: [],
4662    sup: [],
4663    strong: [],
4664    u: [],
4665    ul: []
4666  };
4667  /**
4668   * A pattern that recognizes a commonly useful subset of URLs that are safe.
4669   *
4670   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
4671   */
4672
4673  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
4674  /**
4675   * A pattern that matches safe data URLs. Only matches image, video and audio types.
4676   *
4677   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
4678   */
4679
4680  var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
4681
4682  function allowedAttribute(attr, allowedAttributeList) {
4683    var attrName = attr.nodeName.toLowerCase();
4684
4685    if (allowedAttributeList.indexOf(attrName) !== -1) {
4686      if (uriAttrs.indexOf(attrName) !== -1) {
4687        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));
4688      }
4689
4690      return true;
4691    }
4692
4693    var regExp = allowedAttributeList.filter(function (attrRegex) {
4694      return attrRegex instanceof RegExp;
4695    }); // Check if a regular expression validates the attribute.
4696
4697    for (var i = 0, len = regExp.length; i < len; i++) {
4698      if (regExp[i].test(attrName)) {
4699        return true;
4700      }
4701    }
4702
4703    return false;
4704  }
4705
4706  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
4707    if (unsafeHtml.length === 0) {
4708      return unsafeHtml;
4709    }
4710
4711    if (sanitizeFn && typeof sanitizeFn === 'function') {
4712      return sanitizeFn(unsafeHtml);
4713    }
4714
4715    var domParser = new window.DOMParser();
4716    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
4717    var whitelistKeys = Object.keys(whiteList);
4718    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
4719
4720    var _loop = function _loop(i, len) {
4721      var el = elements[i];
4722      var elName = el.nodeName.toLowerCase();
4723
4724      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
4725        el.parentNode.removeChild(el);
4726        return "continue";
4727      }
4728
4729      var attributeList = [].slice.call(el.attributes); // eslint-disable-next-line unicorn/prefer-spread
4730
4731      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
4732      attributeList.forEach(function (attr) {
4733        if (!allowedAttribute(attr, whitelistedAttributes)) {
4734          el.removeAttribute(attr.nodeName);
4735        }
4736      });
4737    };
4738
4739    for (var i = 0, len = elements.length; i < len; i++) {
4740      var _ret = _loop(i);
4741
4742      if (_ret === "continue") continue;
4743    }
4744
4745    return createdDocument.body.innerHTML;
4746  }
4747
4748  /**
4749   * Constants
4750   */
4751
4752  var NAME$4 = 'tooltip';
4753  var VERSION$4 = '4.6.2';
4754  var DATA_KEY$4 = 'bs.tooltip';
4755  var EVENT_KEY$4 = "." + DATA_KEY$4;
4756  var JQUERY_NO_CONFLICT$4 = $__default["default"].fn[NAME$4];
4757  var CLASS_PREFIX$1 = 'bs-tooltip';
4758  var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
4759  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
4760  var CLASS_NAME_FADE$3 = 'fade';
4761  var CLASS_NAME_SHOW$3 = 'show';
4762  var HOVER_STATE_SHOW = 'show';
4763  var HOVER_STATE_OUT = 'out';
4764  var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
4765  var SELECTOR_ARROW = '.arrow';
4766  var TRIGGER_HOVER = 'hover';
4767  var TRIGGER_FOCUS = 'focus';
4768  var TRIGGER_CLICK = 'click';
4769  var TRIGGER_MANUAL = 'manual';
4770  var AttachmentMap = {
4771    AUTO: 'auto',
4772    TOP: 'top',
4773    RIGHT: 'right',
4774    BOTTOM: 'bottom',
4775    LEFT: 'left'
4776  };
4777  var Default$3 = {
4778    animation: true,
4779    template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>',
4780    trigger: 'hover focus',
4781    title: '',
4782    delay: 0,
4783    html: false,
4784    selector: false,
4785    placement: 'top',
4786    offset: 0,
4787    container: false,
4788    fallbackPlacement: 'flip',
4789    boundary: 'scrollParent',
4790    customClass: '',
4791    sanitize: true,
4792    sanitizeFn: null,
4793    whiteList: DefaultWhitelist,
4794    popperConfig: null
4795  };
4796  var DefaultType$3 = {
4797    animation: 'boolean',
4798    template: 'string',
4799    title: '(string|element|function)',
4800    trigger: 'string',
4801    delay: '(number|object)',
4802    html: 'boolean',
4803    selector: '(string|boolean)',
4804    placement: '(string|function)',
4805    offset: '(number|string|function)',
4806    container: '(string|element|boolean)',
4807    fallbackPlacement: '(string|array)',
4808    boundary: '(string|element)',
4809    customClass: '(string|function)',
4810    sanitize: 'boolean',
4811    sanitizeFn: '(null|function)',
4812    whiteList: 'object',
4813    popperConfig: '(null|object)'
4814  };
4815  var Event$1 = {
4816    HIDE: "hide" + EVENT_KEY$4,
4817    HIDDEN: "hidden" + EVENT_KEY$4,
4818    SHOW: "show" + EVENT_KEY$4,
4819    SHOWN: "shown" + EVENT_KEY$4,
4820    INSERTED: "inserted" + EVENT_KEY$4,
4821    CLICK: "click" + EVENT_KEY$4,
4822    FOCUSIN: "focusin" + EVENT_KEY$4,
4823    FOCUSOUT: "focusout" + EVENT_KEY$4,
4824    MOUSEENTER: "mouseenter" + EVENT_KEY$4,
4825    MOUSELEAVE: "mouseleave" + EVENT_KEY$4
4826  };
4827  /**
4828   * Class definition
4829   */
4830
4831  var Tooltip = /*#__PURE__*/function () {
4832    function Tooltip(element, config) {
4833      if (typeof Popper__default["default"] === 'undefined') {
4834        throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
4835      } // Private
4836
4837
4838      this._isEnabled = true;
4839      this._timeout = 0;
4840      this._hoverState = '';
4841      this._activeTrigger = {};
4842      this._popper = null; // Protected
4843
4844      this.element = element;
4845      this.config = this._getConfig(config);
4846      this.tip = null;
4847
4848      this._setListeners();
4849    } // Getters
4850
4851
4852    var _proto = Tooltip.prototype;
4853
4854    // Public
4855    _proto.enable = function enable() {
4856      this._isEnabled = true;
4857    };
4858
4859    _proto.disable = function disable() {
4860      this._isEnabled = false;
4861    };
4862
4863    _proto.toggleEnabled = function toggleEnabled() {
4864      this._isEnabled = !this._isEnabled;
4865    };
4866
4867    _proto.toggle = function toggle(event) {
4868      if (!this._isEnabled) {
4869        return;
4870      }
4871
4872      if (event) {
4873        var dataKey = this.constructor.DATA_KEY;
4874        var context = $__default["default"](event.currentTarget).data(dataKey);
4875
4876        if (!context) {
4877          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
4878          $__default["default"](event.currentTarget).data(dataKey, context);
4879        }
4880
4881        context._activeTrigger.click = !context._activeTrigger.click;
4882
4883        if (context._isWithActiveTrigger()) {
4884          context._enter(null, context);
4885        } else {
4886          context._leave(null, context);
4887        }
4888      } else {
4889        if ($__default["default"](this.getTipElement()).hasClass(CLASS_NAME_SHOW$3)) {
4890          this._leave(null, this);
4891
4892          return;
4893        }
4894
4895        this._enter(null, this);
4896      }
4897    };
4898
4899    _proto.dispose = function dispose() {
4900      clearTimeout(this._timeout);
4901      $__default["default"].removeData(this.element, this.constructor.DATA_KEY);
4902      $__default["default"](this.element).off(this.constructor.EVENT_KEY);
4903      $__default["default"](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);
4904
4905      if (this.tip) {
4906        $__default["default"](this.tip).remove();
4907      }
4908
4909      this._isEnabled = null;
4910      this._timeout = null;
4911      this._hoverState = null;
4912      this._activeTrigger = null;
4913
4914      if (this._popper) {
4915        this._popper.destroy();
4916      }
4917
4918      this._popper = null;
4919      this.element = null;
4920      this.config = null;
4921      this.tip = null;
4922    };
4923
4924    _proto.show = function show() {
4925      var _this = this;
4926
4927      if ($__default["default"](this.element).css('display') === 'none') {
4928        throw new Error('Please use show on visible elements');
4929      }
4930
4931      var showEvent = $__default["default"].Event(this.constructor.Event.SHOW);
4932
4933      if (this.isWithContent() && this._isEnabled) {
4934        $__default["default"](this.element).trigger(showEvent);
4935        var shadowRoot = Util.findShadowRoot(this.element);
4936        var isInTheDom = $__default["default"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);
4937
4938        if (showEvent.isDefaultPrevented() || !isInTheDom) {
4939          return;
4940        }
4941
4942        var tip = this.getTipElement();
4943        var tipId = Util.getUID(this.constructor.NAME);
4944        tip.setAttribute('id', tipId);
4945        this.element.setAttribute('aria-describedby', tipId);
4946        this.setContent();
4947
4948        if (this.config.animation) {
4949          $__default["default"](tip).addClass(CLASS_NAME_FADE$3);
4950        }
4951
4952        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
4953
4954        var attachment = this._getAttachment(placement);
4955
4956        this.addAttachmentClass(attachment);
4957
4958        var container = this._getContainer();
4959
4960        $__default["default"](tip).data(this.constructor.DATA_KEY, this);
4961
4962        if (!$__default["default"].contains(this.element.ownerDocument.documentElement, this.tip)) {
4963          $__default["default"](tip).appendTo(container);
4964        }
4965
4966        $__default["default"](this.element).trigger(this.constructor.Event.INSERTED);
4967        this._popper = new Popper__default["default"](this.element, tip, this._getPopperConfig(attachment));
4968        $__default["default"](tip).addClass(CLASS_NAME_SHOW$3);
4969        $__default["default"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra
4970        // empty mouseover listeners to the body's immediate children;
4971        // only needed because of broken event delegation on iOS
4972        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
4973
4974        if ('ontouchstart' in document.documentElement) {
4975          $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop);
4976        }
4977
4978        var complete = function complete() {
4979          if (_this.config.animation) {
4980            _this._fixTransition();
4981          }
4982
4983          var prevHoverState = _this._hoverState;
4984          _this._hoverState = null;
4985          $__default["default"](_this.element).trigger(_this.constructor.Event.SHOWN);
4986
4987          if (prevHoverState === HOVER_STATE_OUT) {
4988            _this._leave(null, _this);
4989          }
4990        };
4991
4992        if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) {
4993          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
4994          $__default["default"](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
4995        } else {
4996          complete();
4997        }
4998      }
4999    };
5000
5001    _proto.hide = function hide(callback) {
5002      var _this2 = this;
5003
5004      var tip = this.getTipElement();
5005      var hideEvent = $__default["default"].Event(this.constructor.Event.HIDE);
5006
5007      var complete = function complete() {
5008        if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
5009          tip.parentNode.removeChild(tip);
5010        }
5011
5012        _this2._cleanTipClass();
5013
5014        _this2.element.removeAttribute('aria-describedby');
5015
5016        $__default["default"](_this2.element).trigger(_this2.constructor.Event.HIDDEN);
5017
5018        if (_this2._popper !== null) {
5019          _this2._popper.destroy();
5020        }
5021
5022        if (callback) {
5023          callback();
5024        }
5025      };
5026
5027      $__default["default"](this.element).trigger(hideEvent);
5028
5029      if (hideEvent.isDefaultPrevented()) {
5030        return;
5031      }
5032
5033      $__default["default"](tip).removeClass(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra
5034      // empty mouseover listeners we added for iOS support
5035
5036      if ('ontouchstart' in document.documentElement) {
5037        $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop);
5038      }
5039
5040      this._activeTrigger[TRIGGER_CLICK] = false;
5041      this._activeTrigger[TRIGGER_FOCUS] = false;
5042      this._activeTrigger[TRIGGER_HOVER] = false;
5043
5044      if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) {
5045        var transitionDuration = Util.getTransitionDurationFromElement(tip);
5046        $__default["default"](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
5047      } else {
5048        complete();
5049      }
5050
5051      this._hoverState = '';
5052    };
5053
5054    _proto.update = function update() {
5055      if (this._popper !== null) {
5056        this._popper.scheduleUpdate();
5057      }
5058    } // Protected
5059    ;
5060
5061    _proto.isWithContent = function isWithContent() {
5062      return Boolean(this.getTitle());
5063    };
5064
5065    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
5066      $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment);
5067    };
5068
5069    _proto.getTipElement = function getTipElement() {
5070      this.tip = this.tip || $__default["default"](this.config.template)[0];
5071      return this.tip;
5072    };
5073
5074    _proto.setContent = function setContent() {
5075      var tip = this.getTipElement();
5076      this.setElementContent($__default["default"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());
5077      $__default["default"](tip).removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$3);
5078    };
5079
5080    _proto.setElementContent = function setElementContent($element, content) {
5081      if (typeof content === 'object' && (content.nodeType || content.jquery)) {
5082        // Content is a DOM node or a jQuery
5083        if (this.config.html) {
5084          if (!$__default["default"](content).parent().is($element)) {
5085            $element.empty().append(content);
5086          }
5087        } else {
5088          $element.text($__default["default"](content).text());
5089        }
5090
5091        return;
5092      }
5093
5094      if (this.config.html) {
5095        if (this.config.sanitize) {
5096          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
5097        }
5098
5099        $element.html(content);
5100      } else {
5101        $element.text(content);
5102      }
5103    };
5104
5105    _proto.getTitle = function getTitle() {
5106      var title = this.element.getAttribute('data-original-title');
5107
5108      if (!title) {
5109        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
5110      }
5111
5112      return title;
5113    } // Private
5114    ;
5115
5116    _proto._getPopperConfig = function _getPopperConfig(attachment) {
5117      var _this3 = this;
5118
5119      var defaultBsConfig = {
5120        placement: attachment,
5121        modifiers: {
5122          offset: this._getOffset(),
5123          flip: {
5124            behavior: this.config.fallbackPlacement
5125          },
5126          arrow: {
5127            element: SELECTOR_ARROW
5128          },
5129          preventOverflow: {
5130            boundariesElement: this.config.boundary
5131          }
5132        },
5133        onCreate: function onCreate(data) {
5134          if (data.originalPlacement !== data.placement) {
5135            _this3._handlePopperPlacementChange(data);
5136          }
5137        },
5138        onUpdate: function onUpdate(data) {
5139          return _this3._handlePopperPlacementChange(data);
5140        }
5141      };
5142      return _extends({}, defaultBsConfig, this.config.popperConfig);
5143    };
5144
5145    _proto._getOffset = function _getOffset() {
5146      var _this4 = this;
5147
5148      var offset = {};
5149
5150      if (typeof this.config.offset === 'function') {
5151        offset.fn = function (data) {
5152          data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element));
5153          return data;
5154        };
5155      } else {
5156        offset.offset = this.config.offset;
5157      }
5158
5159      return offset;
5160    };
5161
5162    _proto._getContainer = function _getContainer() {
5163      if (this.config.container === false) {
5164        return document.body;
5165      }
5166
5167      if (Util.isElement(this.config.container)) {
5168        return $__default["default"](this.config.container);
5169      }
5170
5171      return $__default["default"](document).find(this.config.container);
5172    };
5173
5174    _proto._getAttachment = function _getAttachment(placement) {
5175      return AttachmentMap[placement.toUpperCase()];
5176    };
5177
5178    _proto._setListeners = function _setListeners() {
5179      var _this5 = this;
5180
5181      var triggers = this.config.trigger.split(' ');
5182      triggers.forEach(function (trigger) {
5183        if (trigger === 'click') {
5184          $__default["default"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
5185            return _this5.toggle(event);
5186          });
5187        } else if (trigger !== TRIGGER_MANUAL) {
5188          var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;
5189          var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;
5190          $__default["default"](_this5.element).on(eventIn, _this5.config.selector, function (event) {
5191            return _this5._enter(event);
5192          }).on(eventOut, _this5.config.selector, function (event) {
5193            return _this5._leave(event);
5194          });
5195        }
5196      });
5197
5198      this._hideModalHandler = function () {
5199        if (_this5.element) {
5200          _this5.hide();
5201        }
5202      };
5203
5204      $__default["default"](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
5205
5206      if (this.config.selector) {
5207        this.config = _extends({}, this.config, {
5208          trigger: 'manual',
5209          selector: ''
5210        });
5211      } else {
5212        this._fixTitle();
5213      }
5214    };
5215
5216    _proto._fixTitle = function _fixTitle() {
5217      var titleType = typeof this.element.getAttribute('data-original-title');
5218
5219      if (this.element.getAttribute('title') || titleType !== 'string') {
5220        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
5221        this.element.setAttribute('title', '');
5222      }
5223    };
5224
5225    _proto._enter = function _enter(event, context) {
5226      var dataKey = this.constructor.DATA_KEY;
5227      context = context || $__default["default"](event.currentTarget).data(dataKey);
5228
5229      if (!context) {
5230        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
5231        $__default["default"](event.currentTarget).data(dataKey, context);
5232      }
5233
5234      if (event) {
5235        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
5236      }
5237
5238      if ($__default["default"](context.getTipElement()).hasClass(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {
5239        context._hoverState = HOVER_STATE_SHOW;
5240        return;
5241      }
5242
5243      clearTimeout(context._timeout);
5244      context._hoverState = HOVER_STATE_SHOW;
5245
5246      if (!context.config.delay || !context.config.delay.show) {
5247        context.show();
5248        return;
5249      }
5250
5251      context._timeout = setTimeout(function () {
5252        if (context._hoverState === HOVER_STATE_SHOW) {
5253          context.show();
5254        }
5255      }, context.config.delay.show);
5256    };
5257
5258    _proto._leave = function _leave(event, context) {
5259      var dataKey = this.constructor.DATA_KEY;
5260      context = context || $__default["default"](event.currentTarget).data(dataKey);
5261
5262      if (!context) {
5263        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
5264        $__default["default"](event.currentTarget).data(dataKey, context);
5265      }
5266
5267      if (event) {
5268        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;
5269      }
5270
5271      if (context._isWithActiveTrigger()) {
5272        return;
5273      }
5274
5275      clearTimeout(context._timeout);
5276      context._hoverState = HOVER_STATE_OUT;
5277
5278      if (!context.config.delay || !context.config.delay.hide) {
5279        context.hide();
5280        return;
5281      }
5282
5283      context._timeout = setTimeout(function () {
5284        if (context._hoverState === HOVER_STATE_OUT) {
5285          context.hide();
5286        }
5287      }, context.config.delay.hide);
5288    };
5289
5290    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {
5291      for (var trigger in this._activeTrigger) {
5292        if (this._activeTrigger[trigger]) {
5293          return true;
5294        }
5295      }
5296
5297      return false;
5298    };
5299
5300    _proto._getConfig = function _getConfig(config) {
5301      var dataAttributes = $__default["default"](this.element).data();
5302      Object.keys(dataAttributes).forEach(function (dataAttr) {
5303        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
5304          delete dataAttributes[dataAttr];
5305        }
5306      });
5307      config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
5308
5309      if (typeof config.delay === 'number') {
5310        config.delay = {
5311          show: config.delay,
5312          hide: config.delay
5313        };
5314      }
5315
5316      if (typeof config.title === 'number') {
5317        config.title = config.title.toString();
5318      }
5319
5320      if (typeof config.content === 'number') {
5321        config.content = config.content.toString();
5322      }
5323
5324      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
5325
5326      if (config.sanitize) {
5327        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
5328      }
5329
5330      return config;
5331    };
5332
5333    _proto._getDelegateConfig = function _getDelegateConfig() {
5334      var config = {};
5335
5336      if (this.config) {
5337        for (var key in this.config) {
5338          if (this.constructor.Default[key] !== this.config[key]) {
5339            config[key] = this.config[key];
5340          }
5341        }
5342      }
5343
5344      return config;
5345    };
5346
5347    _proto._cleanTipClass = function _cleanTipClass() {
5348      var $tip = $__default["default"](this.getTipElement());
5349      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);
5350
5351      if (tabClass !== null && tabClass.length) {
5352        $tip.removeClass(tabClass.join(''));
5353      }
5354    };
5355
5356    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
5357      this.tip = popperData.instance.popper;
5358
5359      this._cleanTipClass();
5360
5361      this.addAttachmentClass(this._getAttachment(popperData.placement));
5362    };
5363
5364    _proto._fixTransition = function _fixTransition() {
5365      var tip = this.getTipElement();
5366      var initConfigAnimation = this.config.animation;
5367
5368      if (tip.getAttribute('x-placement') !== null) {
5369        return;
5370      }
5371
5372      $__default["default"](tip).removeClass(CLASS_NAME_FADE$3);
5373      this.config.animation = false;
5374      this.hide();
5375      this.show();
5376      this.config.animation = initConfigAnimation;
5377    } // Static
5378    ;
5379
5380    Tooltip._jQueryInterface = function _jQueryInterface(config) {
5381      return this.each(function () {
5382        var $element = $__default["default"](this);
5383        var data = $element.data(DATA_KEY$4);
5384
5385        var _config = typeof config === 'object' && config;
5386
5387        if (!data && /dispose|hide/.test(config)) {
5388          return;
5389        }
5390
5391        if (!data) {
5392          data = new Tooltip(this, _config);
5393          $element.data(DATA_KEY$4, data);
5394        }
5395
5396        if (typeof config === 'string') {
5397          if (typeof data[config] === 'undefined') {
5398            throw new TypeError("No method named \"" + config + "\"");
5399          }
5400
5401          data[config]();
5402        }
5403      });
5404    };
5405
5406    _createClass(Tooltip, null, [{
5407      key: "VERSION",
5408      get: function get() {
5409        return VERSION$4;
5410      }
5411    }, {
5412      key: "Default",
5413      get: function get() {
5414        return Default$3;
5415      }
5416    }, {
5417      key: "NAME",
5418      get: function get() {
5419        return NAME$4;
5420      }
5421    }, {
5422      key: "DATA_KEY",
5423      get: function get() {
5424        return DATA_KEY$4;
5425      }
5426    }, {
5427      key: "Event",
5428      get: function get() {
5429        return Event$1;
5430      }
5431    }, {
5432      key: "EVENT_KEY",
5433      get: function get() {
5434        return EVENT_KEY$4;
5435      }
5436    }, {
5437      key: "DefaultType",
5438      get: function get() {
5439        return DefaultType$3;
5440      }
5441    }]);
5442
5443    return Tooltip;
5444  }();
5445  /**
5446   * jQuery
5447   */
5448
5449
5450  $__default["default"].fn[NAME$4] = Tooltip._jQueryInterface;
5451  $__default["default"].fn[NAME$4].Constructor = Tooltip;
5452
5453  $__default["default"].fn[NAME$4].noConflict = function () {
5454    $__default["default"].fn[NAME$4] = JQUERY_NO_CONFLICT$4;
5455    return Tooltip._jQueryInterface;
5456  };
5457
5458  /**
5459   * Constants
5460   */
5461
5462  var NAME$3 = 'popover';
5463  var VERSION$3 = '4.6.2';
5464  var DATA_KEY$3 = 'bs.popover';
5465  var EVENT_KEY$3 = "." + DATA_KEY$3;
5466  var JQUERY_NO_CONFLICT$3 = $__default["default"].fn[NAME$3];
5467  var CLASS_PREFIX = 'bs-popover';
5468  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
5469  var CLASS_NAME_FADE$2 = 'fade';
5470  var CLASS_NAME_SHOW$2 = 'show';
5471  var SELECTOR_TITLE = '.popover-header';
5472  var SELECTOR_CONTENT = '.popover-body';
5473
5474  var Default$2 = _extends({}, Tooltip.Default, {
5475    placement: 'right',
5476    trigger: 'click',
5477    content: '',
5478    template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
5479  });
5480
5481  var DefaultType$2 = _extends({}, Tooltip.DefaultType, {
5482    content: '(string|element|function)'
5483  });
5484
5485  var Event = {
5486    HIDE: "hide" + EVENT_KEY$3,
5487    HIDDEN: "hidden" + EVENT_KEY$3,
5488    SHOW: "show" + EVENT_KEY$3,
5489    SHOWN: "shown" + EVENT_KEY$3,
5490    INSERTED: "inserted" + EVENT_KEY$3,
5491    CLICK: "click" + EVENT_KEY$3,
5492    FOCUSIN: "focusin" + EVENT_KEY$3,
5493    FOCUSOUT: "focusout" + EVENT_KEY$3,
5494    MOUSEENTER: "mouseenter" + EVENT_KEY$3,
5495    MOUSELEAVE: "mouseleave" + EVENT_KEY$3
5496  };
5497  /**
5498   * Class definition
5499   */
5500
5501  var Popover = /*#__PURE__*/function (_Tooltip) {
5502    _inheritsLoose(Popover, _Tooltip);
5503
5504    function Popover() {
5505      return _Tooltip.apply(this, arguments) || this;
5506    }
5507
5508    var _proto = Popover.prototype;
5509
5510    // Overrides
5511    _proto.isWithContent = function isWithContent() {
5512      return this.getTitle() || this._getContent();
5513    };
5514
5515    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
5516      $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
5517    };
5518
5519    _proto.getTipElement = function getTipElement() {
5520      this.tip = this.tip || $__default["default"](this.config.template)[0];
5521      return this.tip;
5522    };
5523
5524    _proto.setContent = function setContent() {
5525      var $tip = $__default["default"](this.getTipElement()); // We use append for html objects to maintain js events
5526
5527      this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());
5528
5529      var content = this._getContent();
5530
5531      if (typeof content === 'function') {
5532        content = content.call(this.element);
5533      }
5534
5535      this.setElementContent($tip.find(SELECTOR_CONTENT), content);
5536      $tip.removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$2);
5537    } // Private
5538    ;
5539
5540    _proto._getContent = function _getContent() {
5541      return this.element.getAttribute('data-content') || this.config.content;
5542    };
5543
5544    _proto._cleanTipClass = function _cleanTipClass() {
5545      var $tip = $__default["default"](this.getTipElement());
5546      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
5547
5548      if (tabClass !== null && tabClass.length > 0) {
5549        $tip.removeClass(tabClass.join(''));
5550      }
5551    } // Static
5552    ;
5553
5554    Popover._jQueryInterface = function _jQueryInterface(config) {
5555      return this.each(function () {
5556        var data = $__default["default"](this).data(DATA_KEY$3);
5557
5558        var _config = typeof config === 'object' ? config : null;
5559
5560        if (!data && /dispose|hide/.test(config)) {
5561          return;
5562        }
5563
5564        if (!data) {
5565          data = new Popover(this, _config);
5566          $__default["default"](this).data(DATA_KEY$3, data);
5567        }
5568
5569        if (typeof config === 'string') {
5570          if (typeof data[config] === 'undefined') {
5571            throw new TypeError("No method named \"" + config + "\"");
5572          }
5573
5574          data[config]();
5575        }
5576      });
5577    };
5578
5579    _createClass(Popover, null, [{
5580      key: "VERSION",
5581      get: // Getters
5582      function get() {
5583        return VERSION$3;
5584      }
5585    }, {
5586      key: "Default",
5587      get: function get() {
5588        return Default$2;
5589      }
5590    }, {
5591      key: "NAME",
5592      get: function get() {
5593        return NAME$3;
5594      }
5595    }, {
5596      key: "DATA_KEY",
5597      get: function get() {
5598        return DATA_KEY$3;
5599      }
5600    }, {
5601      key: "Event",
5602      get: function get() {
5603        return Event;
5604      }
5605    }, {
5606      key: "EVENT_KEY",
5607      get: function get() {
5608        return EVENT_KEY$3;
5609      }
5610    }, {
5611      key: "DefaultType",
5612      get: function get() {
5613        return DefaultType$2;
5614      }
5615    }]);
5616
5617    return Popover;
5618  }(Tooltip);
5619  /**
5620   * jQuery
5621   */
5622
5623
5624  $__default["default"].fn[NAME$3] = Popover._jQueryInterface;
5625  $__default["default"].fn[NAME$3].Constructor = Popover;
5626
5627  $__default["default"].fn[NAME$3].noConflict = function () {
5628    $__default["default"].fn[NAME$3] = JQUERY_NO_CONFLICT$3;
5629    return Popover._jQueryInterface;
5630  };
5631
5632  /**
5633   * Constants
5634   */
5635
5636  var NAME$2 = 'scrollspy';
5637  var VERSION$2 = '4.6.2';
5638  var DATA_KEY$2 = 'bs.scrollspy';
5639  var EVENT_KEY$2 = "." + DATA_KEY$2;
5640  var DATA_API_KEY$1 = '.data-api';
5641  var JQUERY_NO_CONFLICT$2 = $__default["default"].fn[NAME$2];
5642  var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
5643  var CLASS_NAME_ACTIVE$1 = 'active';
5644  var EVENT_ACTIVATE = "activate" + EVENT_KEY$2;
5645  var EVENT_SCROLL = "scroll" + EVENT_KEY$2;
5646  var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$2 + DATA_API_KEY$1;
5647  var METHOD_OFFSET = 'offset';
5648  var METHOD_POSITION = 'position';
5649  var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
5650  var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';
5651  var SELECTOR_NAV_LINKS = '.nav-link';
5652  var SELECTOR_NAV_ITEMS = '.nav-item';
5653  var SELECTOR_LIST_ITEMS = '.list-group-item';
5654  var SELECTOR_DROPDOWN$1 = '.dropdown';
5655  var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';
5656  var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
5657  var Default$1 = {
5658    offset: 10,
5659    method: 'auto',
5660    target: ''
5661  };
5662  var DefaultType$1 = {
5663    offset: 'number',
5664    method: 'string',
5665    target: '(string|element)'
5666  };
5667  /**
5668   * Class definition
5669   */
5670
5671  var ScrollSpy = /*#__PURE__*/function () {
5672    function ScrollSpy(element, config) {
5673      var _this = this;
5674
5675      this._element = element;
5676      this._scrollElement = element.tagName === 'BODY' ? window : element;
5677      this._config = this._getConfig(config);
5678      this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS);
5679      this._offsets = [];
5680      this._targets = [];
5681      this._activeTarget = null;
5682      this._scrollHeight = 0;
5683      $__default["default"](this._scrollElement).on(EVENT_SCROLL, function (event) {
5684        return _this._process(event);
5685      });
5686      this.refresh();
5687
5688      this._process();
5689    } // Getters
5690
5691
5692    var _proto = ScrollSpy.prototype;
5693
5694    // Public
5695    _proto.refresh = function refresh() {
5696      var _this2 = this;
5697
5698      var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
5699      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
5700      var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
5701      this._offsets = [];
5702      this._targets = [];
5703      this._scrollHeight = this._getScrollHeight();
5704      var targets = [].slice.call(document.querySelectorAll(this._selector));
5705      targets.map(function (element) {
5706        var target;
5707        var targetSelector = Util.getSelectorFromElement(element);
5708
5709        if (targetSelector) {
5710          target = document.querySelector(targetSelector);
5711        }
5712
5713        if (target) {
5714          var targetBCR = target.getBoundingClientRect();
5715
5716          if (targetBCR.width || targetBCR.height) {
5717            // TODO (fat): remove sketch reliance on jQuery position/offset
5718            return [$__default["default"](target)[offsetMethod]().top + offsetBase, targetSelector];
5719          }
5720        }
5721
5722        return null;
5723      }).filter(Boolean).sort(function (a, b) {
5724        return a[0] - b[0];
5725      }).forEach(function (item) {
5726        _this2._offsets.push(item[0]);
5727
5728        _this2._targets.push(item[1]);
5729      });
5730    };
5731
5732    _proto.dispose = function dispose() {
5733      $__default["default"].removeData(this._element, DATA_KEY$2);
5734      $__default["default"](this._scrollElement).off(EVENT_KEY$2);
5735      this._element = null;
5736      this._scrollElement = null;
5737      this._config = null;
5738      this._selector = null;
5739      this._offsets = null;
5740      this._targets = null;
5741      this._activeTarget = null;
5742      this._scrollHeight = null;
5743    } // Private
5744    ;
5745
5746    _proto._getConfig = function _getConfig(config) {
5747      config = _extends({}, Default$1, typeof config === 'object' && config ? config : {});
5748
5749      if (typeof config.target !== 'string' && Util.isElement(config.target)) {
5750        var id = $__default["default"](config.target).attr('id');
5751
5752        if (!id) {
5753          id = Util.getUID(NAME$2);
5754          $__default["default"](config.target).attr('id', id);
5755        }
5756
5757        config.target = "#" + id;
5758      }
5759
5760      Util.typeCheckConfig(NAME$2, config, DefaultType$1);
5761      return config;
5762    };
5763
5764    _proto._getScrollTop = function _getScrollTop() {
5765      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
5766    };
5767
5768    _proto._getScrollHeight = function _getScrollHeight() {
5769      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
5770    };
5771
5772    _proto._getOffsetHeight = function _getOffsetHeight() {
5773      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
5774    };
5775
5776    _proto._process = function _process() {
5777      var scrollTop = this._getScrollTop() + this._config.offset;
5778
5779      var scrollHeight = this._getScrollHeight();
5780
5781      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
5782
5783      if (this._scrollHeight !== scrollHeight) {
5784        this.refresh();
5785      }
5786
5787      if (scrollTop >= maxScroll) {
5788        var target = this._targets[this._targets.length - 1];
5789
5790        if (this._activeTarget !== target) {
5791          this._activate(target);
5792        }
5793
5794        return;
5795      }
5796
5797      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
5798        this._activeTarget = null;
5799
5800        this._clear();
5801
5802        return;
5803      }
5804
5805      for (var i = this._offsets.length; i--;) {
5806        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
5807
5808        if (isActiveTarget) {
5809          this._activate(this._targets[i]);
5810        }
5811      }
5812    };
5813
5814    _proto._activate = function _activate(target) {
5815      this._activeTarget = target;
5816
5817      this._clear();
5818
5819      var queries = this._selector.split(',').map(function (selector) {
5820        return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
5821      });
5822
5823      var $link = $__default["default"]([].slice.call(document.querySelectorAll(queries.join(','))));
5824
5825      if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {
5826        $link.closest(SELECTOR_DROPDOWN$1).find(SELECTOR_DROPDOWN_TOGGLE$1).addClass(CLASS_NAME_ACTIVE$1);
5827        $link.addClass(CLASS_NAME_ACTIVE$1);
5828      } else {
5829        // Set triggered link as active
5830        $link.addClass(CLASS_NAME_ACTIVE$1); // Set triggered links parents as active
5831        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
5832
5833        $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$1); // Handle special case when .nav-link is inside .nav-item
5834
5835        $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$1);
5836      }
5837
5838      $__default["default"](this._scrollElement).trigger(EVENT_ACTIVATE, {
5839        relatedTarget: target
5840      });
5841    };
5842
5843    _proto._clear = function _clear() {
5844      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
5845        return node.classList.contains(CLASS_NAME_ACTIVE$1);
5846      }).forEach(function (node) {
5847        return node.classList.remove(CLASS_NAME_ACTIVE$1);
5848      });
5849    } // Static
5850    ;
5851
5852    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
5853      return this.each(function () {
5854        var data = $__default["default"](this).data(DATA_KEY$2);
5855
5856        var _config = typeof config === 'object' && config;
5857
5858        if (!data) {
5859          data = new ScrollSpy(this, _config);
5860          $__default["default"](this).data(DATA_KEY$2, data);
5861        }
5862
5863        if (typeof config === 'string') {
5864          if (typeof data[config] === 'undefined') {
5865            throw new TypeError("No method named \"" + config + "\"");
5866          }
5867
5868          data[config]();
5869        }
5870      });
5871    };
5872
5873    _createClass(ScrollSpy, null, [{
5874      key: "VERSION",
5875      get: function get() {
5876        return VERSION$2;
5877      }
5878    }, {
5879      key: "Default",
5880      get: function get() {
5881        return Default$1;
5882      }
5883    }]);
5884
5885    return ScrollSpy;
5886  }();
5887  /**
5888   * Data API implementation
5889   */
5890
5891
5892  $__default["default"](window).on(EVENT_LOAD_DATA_API, function () {
5893    var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));
5894    var scrollSpysLength = scrollSpys.length;
5895
5896    for (var i = scrollSpysLength; i--;) {
5897      var $spy = $__default["default"](scrollSpys[i]);
5898
5899      ScrollSpy._jQueryInterface.call($spy, $spy.data());
5900    }
5901  });
5902  /**
5903   * jQuery
5904   */
5905
5906  $__default["default"].fn[NAME$2] = ScrollSpy._jQueryInterface;
5907  $__default["default"].fn[NAME$2].Constructor = ScrollSpy;
5908
5909  $__default["default"].fn[NAME$2].noConflict = function () {
5910    $__default["default"].fn[NAME$2] = JQUERY_NO_CONFLICT$2;
5911    return ScrollSpy._jQueryInterface;
5912  };
5913
5914  /**
5915   * Constants
5916   */
5917
5918  var NAME$1 = 'tab';
5919  var VERSION$1 = '4.6.2';
5920  var DATA_KEY$1 = 'bs.tab';
5921  var EVENT_KEY$1 = "." + DATA_KEY$1;
5922  var DATA_API_KEY = '.data-api';
5923  var JQUERY_NO_CONFLICT$1 = $__default["default"].fn[NAME$1];
5924  var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
5925  var CLASS_NAME_ACTIVE = 'active';
5926  var CLASS_NAME_DISABLED = 'disabled';
5927  var CLASS_NAME_FADE$1 = 'fade';
5928  var CLASS_NAME_SHOW$1 = 'show';
5929  var EVENT_HIDE$1 = "hide" + EVENT_KEY$1;
5930  var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$1;
5931  var EVENT_SHOW$1 = "show" + EVENT_KEY$1;
5932  var EVENT_SHOWN$1 = "shown" + EVENT_KEY$1;
5933  var EVENT_CLICK_DATA_API = "click" + EVENT_KEY$1 + DATA_API_KEY;
5934  var SELECTOR_DROPDOWN = '.dropdown';
5935  var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
5936  var SELECTOR_ACTIVE = '.active';
5937  var SELECTOR_ACTIVE_UL = '> li > .active';
5938  var SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]';
5939  var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
5940  var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';
5941  /**
5942   * Class definition
5943   */
5944
5945  var Tab = /*#__PURE__*/function () {
5946    function Tab(element) {
5947      this._element = element;
5948    } // Getters
5949
5950
5951    var _proto = Tab.prototype;
5952
5953    // Public
5954    _proto.show = function show() {
5955      var _this = this;
5956
5957      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default["default"](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) || this._element.hasAttribute('disabled')) {
5958        return;
5959      }
5960
5961      var target;
5962      var previous;
5963      var listElement = $__default["default"](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0];
5964      var selector = Util.getSelectorFromElement(this._element);
5965
5966      if (listElement) {
5967        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
5968        previous = $__default["default"].makeArray($__default["default"](listElement).find(itemSelector));
5969        previous = previous[previous.length - 1];
5970      }
5971
5972      var hideEvent = $__default["default"].Event(EVENT_HIDE$1, {
5973        relatedTarget: this._element
5974      });
5975      var showEvent = $__default["default"].Event(EVENT_SHOW$1, {
5976        relatedTarget: previous
5977      });
5978
5979      if (previous) {
5980        $__default["default"](previous).trigger(hideEvent);
5981      }
5982
5983      $__default["default"](this._element).trigger(showEvent);
5984
5985      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
5986        return;
5987      }
5988
5989      if (selector) {
5990        target = document.querySelector(selector);
5991      }
5992
5993      this._activate(this._element, listElement);
5994
5995      var complete = function complete() {
5996        var hiddenEvent = $__default["default"].Event(EVENT_HIDDEN$1, {
5997          relatedTarget: _this._element
5998        });
5999        var shownEvent = $__default["default"].Event(EVENT_SHOWN$1, {
6000          relatedTarget: previous
6001        });
6002        $__default["default"](previous).trigger(hiddenEvent);
6003        $__default["default"](_this._element).trigger(shownEvent);
6004      };
6005
6006      if (target) {
6007        this._activate(target, target.parentNode, complete);
6008      } else {
6009        complete();
6010      }
6011    };
6012
6013    _proto.dispose = function dispose() {
6014      $__default["default"].removeData(this._element, DATA_KEY$1);
6015      this._element = null;
6016    } // Private
6017    ;
6018
6019    _proto._activate = function _activate(element, container, callback) {
6020      var _this2 = this;
6021
6022      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default["default"](container).find(SELECTOR_ACTIVE_UL) : $__default["default"](container).children(SELECTOR_ACTIVE);
6023      var active = activeElements[0];
6024      var isTransitioning = callback && active && $__default["default"](active).hasClass(CLASS_NAME_FADE$1);
6025
6026      var complete = function complete() {
6027        return _this2._transitionComplete(element, active, callback);
6028      };
6029
6030      if (active && isTransitioning) {
6031        var transitionDuration = Util.getTransitionDurationFromElement(active);
6032        $__default["default"](active).removeClass(CLASS_NAME_SHOW$1).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
6033      } else {
6034        complete();
6035      }
6036    };
6037
6038    _proto._transitionComplete = function _transitionComplete(element, active, callback) {
6039      if (active) {
6040        $__default["default"](active).removeClass(CLASS_NAME_ACTIVE);
6041        var dropdownChild = $__default["default"](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
6042
6043        if (dropdownChild) {
6044          $__default["default"](dropdownChild).removeClass(CLASS_NAME_ACTIVE);
6045        }
6046
6047        if (active.getAttribute('role') === 'tab') {
6048          active.setAttribute('aria-selected', false);
6049        }
6050      }
6051
6052      $__default["default"](element).addClass(CLASS_NAME_ACTIVE);
6053
6054      if (element.getAttribute('role') === 'tab') {
6055        element.setAttribute('aria-selected', true);
6056      }
6057
6058      Util.reflow(element);
6059
6060      if (element.classList.contains(CLASS_NAME_FADE$1)) {
6061        element.classList.add(CLASS_NAME_SHOW$1);
6062      }
6063
6064      var parent = element.parentNode;
6065
6066      if (parent && parent.nodeName === 'LI') {
6067        parent = parent.parentNode;
6068      }
6069
6070      if (parent && $__default["default"](parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
6071        var dropdownElement = $__default["default"](element).closest(SELECTOR_DROPDOWN)[0];
6072
6073        if (dropdownElement) {
6074          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE));
6075          $__default["default"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE);
6076        }
6077
6078        element.setAttribute('aria-expanded', true);
6079      }
6080
6081      if (callback) {
6082        callback();
6083      }
6084    } // Static
6085    ;
6086
6087    Tab._jQueryInterface = function _jQueryInterface(config) {
6088      return this.each(function () {
6089        var $this = $__default["default"](this);
6090        var data = $this.data(DATA_KEY$1);
6091
6092        if (!data) {
6093          data = new Tab(this);
6094          $this.data(DATA_KEY$1, data);
6095        }
6096
6097        if (typeof config === 'string') {
6098          if (typeof data[config] === 'undefined') {
6099            throw new TypeError("No method named \"" + config + "\"");
6100          }
6101
6102          data[config]();
6103        }
6104      });
6105    };
6106
6107    _createClass(Tab, null, [{
6108      key: "VERSION",
6109      get: function get() {
6110        return VERSION$1;
6111      }
6112    }]);
6113
6114    return Tab;
6115  }();
6116  /**
6117   * Data API implementation
6118   */
6119
6120
6121  $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
6122    event.preventDefault();
6123
6124    Tab._jQueryInterface.call($__default["default"](this), 'show');
6125  });
6126  /**
6127   * jQuery
6128   */
6129
6130  $__default["default"].fn[NAME$1] = Tab._jQueryInterface;
6131  $__default["default"].fn[NAME$1].Constructor = Tab;
6132
6133  $__default["default"].fn[NAME$1].noConflict = function () {
6134    $__default["default"].fn[NAME$1] = JQUERY_NO_CONFLICT$1;
6135    return Tab._jQueryInterface;
6136  };
6137
6138  /**
6139   * Constants
6140   */
6141
6142  var NAME = 'toast';
6143  var VERSION = '4.6.2';
6144  var DATA_KEY = 'bs.toast';
6145  var EVENT_KEY = "." + DATA_KEY;
6146  var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
6147  var CLASS_NAME_FADE = 'fade';
6148  var CLASS_NAME_HIDE = 'hide';
6149  var CLASS_NAME_SHOW = 'show';
6150  var CLASS_NAME_SHOWING = 'showing';
6151  var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY;
6152  var EVENT_HIDE = "hide" + EVENT_KEY;
6153  var EVENT_HIDDEN = "hidden" + EVENT_KEY;
6154  var EVENT_SHOW = "show" + EVENT_KEY;
6155  var EVENT_SHOWN = "shown" + EVENT_KEY;
6156  var SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]';
6157  var Default = {
6158    animation: true,
6159    autohide: true,
6160    delay: 500
6161  };
6162  var DefaultType = {
6163    animation: 'boolean',
6164    autohide: 'boolean',
6165    delay: 'number'
6166  };
6167  /**
6168   * Class definition
6169   */
6170
6171  var Toast = /*#__PURE__*/function () {
6172    function Toast(element, config) {
6173      this._element = element;
6174      this._config = this._getConfig(config);
6175      this._timeout = null;
6176
6177      this._setListeners();
6178    } // Getters
6179
6180
6181    var _proto = Toast.prototype;
6182
6183    // Public
6184    _proto.show = function show() {
6185      var _this = this;
6186
6187      var showEvent = $__default["default"].Event(EVENT_SHOW);
6188      $__default["default"](this._element).trigger(showEvent);
6189
6190      if (showEvent.isDefaultPrevented()) {
6191        return;
6192      }
6193
6194      this._clearTimeout();
6195
6196      if (this._config.animation) {
6197        this._element.classList.add(CLASS_NAME_FADE);
6198      }
6199
6200      var complete = function complete() {
6201        _this._element.classList.remove(CLASS_NAME_SHOWING);
6202
6203        _this._element.classList.add(CLASS_NAME_SHOW);
6204
6205        $__default["default"](_this._element).trigger(EVENT_SHOWN);
6206
6207        if (_this._config.autohide) {
6208          _this._timeout = setTimeout(function () {
6209            _this.hide();
6210          }, _this._config.delay);
6211        }
6212      };
6213
6214      this._element.classList.remove(CLASS_NAME_HIDE);
6215
6216      Util.reflow(this._element);
6217
6218      this._element.classList.add(CLASS_NAME_SHOWING);
6219
6220      if (this._config.animation) {
6221        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
6222        $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
6223      } else {
6224        complete();
6225      }
6226    };
6227
6228    _proto.hide = function hide() {
6229      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {
6230        return;
6231      }
6232
6233      var hideEvent = $__default["default"].Event(EVENT_HIDE);
6234      $__default["default"](this._element).trigger(hideEvent);
6235
6236      if (hideEvent.isDefaultPrevented()) {
6237        return;
6238      }
6239
6240      this._close();
6241    };
6242
6243    _proto.dispose = function dispose() {
6244      this._clearTimeout();
6245
6246      if (this._element.classList.contains(CLASS_NAME_SHOW)) {
6247        this._element.classList.remove(CLASS_NAME_SHOW);
6248      }
6249
6250      $__default["default"](this._element).off(EVENT_CLICK_DISMISS);
6251      $__default["default"].removeData(this._element, DATA_KEY);
6252      this._element = null;
6253      this._config = null;
6254    } // Private
6255    ;
6256
6257    _proto._getConfig = function _getConfig(config) {
6258      config = _extends({}, Default, $__default["default"](this._element).data(), typeof config === 'object' && config ? config : {});
6259      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
6260      return config;
6261    };
6262
6263    _proto._setListeners = function _setListeners() {
6264      var _this2 = this;
6265
6266      $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function () {
6267        return _this2.hide();
6268      });
6269    };
6270
6271    _proto._close = function _close() {
6272      var _this3 = this;
6273
6274      var complete = function complete() {
6275        _this3._element.classList.add(CLASS_NAME_HIDE);
6276
6277        $__default["default"](_this3._element).trigger(EVENT_HIDDEN);
6278      };
6279
6280      this._element.classList.remove(CLASS_NAME_SHOW);
6281
6282      if (this._config.animation) {
6283        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
6284        $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
6285      } else {
6286        complete();
6287      }
6288    };
6289
6290    _proto._clearTimeout = function _clearTimeout() {
6291      clearTimeout(this._timeout);
6292      this._timeout = null;
6293    } // Static
6294    ;
6295
6296    Toast._jQueryInterface = function _jQueryInterface(config) {
6297      return this.each(function () {
6298        var $element = $__default["default"](this);
6299        var data = $element.data(DATA_KEY);
6300
6301        var _config = typeof config === 'object' && config;
6302
6303        if (!data) {
6304          data = new Toast(this, _config);
6305          $element.data(DATA_KEY, data);
6306        }
6307
6308        if (typeof config === 'string') {
6309          if (typeof data[config] === 'undefined') {
6310            throw new TypeError("No method named \"" + config + "\"");
6311          }
6312
6313          data[config](this);
6314        }
6315      });
6316    };
6317
6318    _createClass(Toast, null, [{
6319      key: "VERSION",
6320      get: function get() {
6321        return VERSION;
6322      }
6323    }, {
6324      key: "DefaultType",
6325      get: function get() {
6326        return DefaultType;
6327      }
6328    }, {
6329      key: "Default",
6330      get: function get() {
6331        return Default;
6332      }
6333    }]);
6334
6335    return Toast;
6336  }();
6337  /**
6338   * jQuery
6339   */
6340
6341
6342  $__default["default"].fn[NAME] = Toast._jQueryInterface;
6343  $__default["default"].fn[NAME].Constructor = Toast;
6344
6345  $__default["default"].fn[NAME].noConflict = function () {
6346    $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
6347    return Toast._jQueryInterface;
6348  };
6349
6350  exports.Alert = Alert;
6351  exports.Button = Button;
6352  exports.Carousel = Carousel;
6353  exports.Collapse = Collapse;
6354  exports.Dropdown = Dropdown;
6355  exports.Modal = Modal;
6356  exports.Popover = Popover;
6357  exports.Scrollspy = ScrollSpy;
6358  exports.Tab = Tab;
6359  exports.Toast = Toast;
6360  exports.Tooltip = Tooltip;
6361  exports.Util = Util;
6362
6363  Object.defineProperty(exports, '__esModule', { value: true });
6364
6365}));
6366//# sourceMappingURL=bootstrap.js.map
6367
6368
6369/***/ }),
6370
vendor: 60,628 bytes, lines 6371-8038
6371/***/ "./node_modules/dinero.js/build/esm/dinero.js":
6372/*!****************************************************!*\
6373  !*** ./node_modules/dinero.js/build/esm/dinero.js ***!
6374  \****************************************************/
6375/*! exports provided: default */
6376/***/ (function(module, __webpack_exports__, __webpack_require__) {
6377
6378"use strict";
6379__webpack_require__.r(__webpack_exports__);
6380/**
6381 * Default values for all Dinero objects.
6382 *
6383 * You can override default values for all subsequent Dinero objects by changing them directly on the global `Dinero` object.
6384 * Existing instances won't be affected.
6385 *
6386 * @property {Number} defaultAmount - The default amount for new Dinero objects (see {@link module:Dinero Dinero} for format).
6387 * @property {String} defaultCurrency - The default currency for new Dinero objects (see {@link module:Dinero Dinero} for format).
6388 * @property {Number} defaultPrecision - The default precision for new Dinero objects (see {@link module:Dinero Dinero} for format).
6389 *
6390 * @example
6391 * // Will set currency to 'EUR' for all Dinero objects.
6392 * Dinero.defaultCurrency = 'EUR'
6393 *
6394 * @type {Object}
6395 */
6396var Defaults = {
6397  defaultAmount: 0,
6398  defaultCurrency: 'USD',
6399  defaultPrecision: 2
6400};
6401/**
6402 * Global settings for all Dinero objects.
6403 *
6404 * You can override global values for all subsequent Dinero objects by changing them directly on the global `Dinero` object.
6405 * Existing instances won't be affected.
6406 *
6407 * @property {String}  globalLocale - The global locale for new Dinero objects (see {@link module:Dinero~setLocale setLocale} for format).
6408 * @property {String}  globalFormat - The global format for new Dinero objects (see {@link module:Dinero~toFormat toFormat} for format).
6409 * @property {String}  globalRoundingMode - The global rounding mode for new Dinero objects (see {@link module:Dinero~multiply multiply} or {@link module:Dinero~divide divide} for format).
6410 * @property {String}  globalFormatRoundingMode - The global rounding mode to format new Dinero objects (see {@link module:Dinero~toFormat toFormat} or {@link module:Dinero~toRoundedUnit toRoundedUnit} for format).
6411 * @property {(String|Promise)}  globalExchangeRatesApi.endpoint - The global exchange rate API endpoint for new Dinero objects, or the global promise that resolves to the exchanges rates (see {@link module:Dinero~convert convert} for format).
6412 * @property {String}  globalExchangeRatesApi.propertyPath - The global exchange rate API property path for new Dinero objects (see {@link module:Dinero~convert convert} for format).
6413 * @property {Object}  globalExchangeRatesApi.headers - The global exchange rate API headers for new Dinero objects (see {@link module:Dinero~convert convert} for format).
6414 *
6415 * @example
6416 * // Will set locale to 'fr-FR' for all Dinero objects.
6417 * Dinero.globalLocale = 'fr-FR'
6418 * @example
6419 * // Will set global exchange rate API parameters for all Dinero objects.
6420 * Dinero.globalExchangeRatesApi = {
6421 *  endpoint: 'https://yourexchangerates.api/latest?base={{from}}',
6422 *  propertyPath: 'data.rates.{{to}}',
6423 *  headers: {
6424 *    'user-key': 'xxxxxxxxx'
6425 *  }
6426 * }
6427 *
6428 * @type {Object}
6429 */
6430
6431var Globals = {
6432  globalLocale: 'en-US',
6433  globalFormat: '$0,0.00',
6434  globalRoundingMode: 'HALF_EVEN',
6435  globalFormatRoundingMode: 'HALF_AWAY_FROM_ZERO',
6436  globalExchangeRatesApi: {
6437    endpoint: undefined,
6438    headers: undefined,
6439    propertyPath: undefined
6440  }
6441};
6442
6443function _typeof(obj) {
6444  "@babel/helpers - typeof";
6445
6446  if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
6447    _typeof = function (obj) {
6448      return typeof obj;
6449    };
6450  } else {
6451    _typeof = function (obj) {
6452      return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
6453    };
6454  }
6455
6456  return _typeof(obj);
6457}
6458
6459function _toArray(arr) {
6460  return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest();
6461}
6462
6463function _arrayWithHoles(arr) {
6464  if (Array.isArray(arr)) return arr;
6465}
6466
6467function _iterableToArray(iter) {
6468  if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
6469}
6470
6471function _unsupportedIterableToArray(o, minLen) {
6472  if (!o) return;
6473  if (typeof o === "string") return _arrayLikeToArray(o, minLen);
6474  var n = Object.prototype.toString.call(o).slice(8, -1);
6475  if (n === "Object" && o.constructor) n = o.constructor.name;
6476  if (n === "Map" || n === "Set") return Array.from(o);
6477  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
6478}
6479
6480function _arrayLikeToArray(arr, len) {
6481  if (len == null || len > arr.length) len = arr.length;
6482
6483  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
6484
6485  return arr2;
6486}
6487
6488function _nonIterableRest() {
6489  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
6490}
6491
6492/**
6493 * Static methods for Dinero.
6494 * @ignore
6495 *
6496 * @type {Object}
6497 */
6498var Static = {
6499  /**
6500   * Returns an array of Dinero objects, normalized to the same precision (the highest).
6501   *
6502   * @memberof module:Dinero
6503   * @method
6504   *
6505   * @param {Dinero[]} objects - An array of Dinero objects
6506   *
6507   * @example
6508   * // returns an array of Dinero objects
6509   * // both with a precision of 3
6510   * // and an amount of 1000
6511   * Dinero.normalizePrecision([
6512   *   Dinero({ amount: 100, precision: 2 }),
6513   *   Dinero({ amount: 1000, precision: 3 })
6514   * ])
6515   *
6516   * @return {Dinero[]}
6517   */
6518  normalizePrecision: function normalizePrecision(objects) {
6519    var highestPrecision = objects.reduce(function (a, b) {
6520      return Math.max(a.getPrecision(), b.getPrecision());
6521    });
6522    return objects.map(function (object) {
6523      return object.getPrecision() !== highestPrecision ? object.convertPrecision(highestPrecision) : object;
6524    });
6525  },
6526
6527  /**
6528   * Returns the smallest Dinero object from an array of Dinero objects
6529   *
6530   * @memberof module:Dinero
6531   * @method
6532   *
6533   * @param {Dinero[]} objects - An array of Dinero objects
6534   *
6535   * @example
6536   * // returns the smallest Dinero object with amount of 500 from an array of Dinero objects with different precisions
6537   * Dinero.minimum([
6538   *   Dinero({ amount: 500, precision: 3 }),
6539   *   Dinero({ amount: 100, precision: 2 })
6540   * ])
6541   * @example
6542   * // returns the smallest Dinero object with amount of 50 from an array of Dinero objects
6543   * Dinero.minimum([
6544   *   Dinero({ amount: 50 }),
6545   *   Dinero({ amount: 100 })
6546   * ])
6547   *
6548   * @return {Dinero[]}
6549   */
6550  minimum: function minimum(objects) {
6551    var _objects = _toArray(objects),
6552        firstObject = _objects[0],
6553        tailObjects = _objects.slice(1);
6554
6555    var currentMinimum = firstObject;
6556    tailObjects.forEach(function (obj) {
6557      currentMinimum = currentMinimum.lessThan(obj) ? currentMinimum : obj;
6558    });
6559    return currentMinimum;
6560  },
6561
6562  /**
6563   * Returns the biggest Dinero object from an array of Dinero objects
6564   *
6565   * @memberof module:Dinero
6566   * @method
6567   *
6568   * @param {Dinero[]} objects - An array of Dinero objects
6569   *
6570   * @example
6571   * // returns the biggest Dinero object with amount of 20, from an array of Dinero objects with different precisions
6572   * Dinero.maximum([
6573   *   Dinero({ amount: 20, precision: 2 }),
6574   *   Dinero({ amount: 150, precision: 3 })
6575   * ])
6576   * @example
6577   * // returns the biggest Dinero object with amount of 100, from an array of Dinero objects
6578   * Dinero.maximum([
6579   *   Dinero({ amount: 100 }),
6580   *   Dinero({ amount: 50 })
6581   * ])
6582   *
6583   * @return {Dinero[]}
6584   */
6585  maximum: function maximum(objects) {
6586    var _objects2 = _toArray(objects),
6587        firstObject = _objects2[0],
6588        tailObjects = _objects2.slice(1);
6589
6590    var currentMaximum = firstObject;
6591    tailObjects.forEach(function (obj) {
6592      currentMaximum = currentMaximum.greaterThan(obj) ? currentMaximum : obj;
6593    });
6594    return currentMaximum;
6595  }
6596};
6597
6598/**
6599 * Returns whether a value is numeric.
6600 * @ignore
6601 *
6602 * @param  {} value - The value to test.
6603 *
6604 * @return {Boolean}
6605 */
6606function isNumeric(value) {
6607  return !isNaN(parseInt(value)) && isFinite(value);
6608}
6609/**
6610 * Returns whether a value is a percentage.
6611 * @ignore
6612 *
6613 * @param  {}  percentage - The percentage to test.
6614 *
6615 * @return {Boolean}
6616 */
6617
6618function isPercentage(percentage) {
6619  return isNumeric(percentage) && percentage <= 100 && percentage >= 0;
6620}
6621/**
6622 * Returns whether an array of ratios is valid.
6623 * @ignore
6624 *
6625 * @param  {}  ratios - The ratios to test.
6626 *
6627 * @return {Boolean}
6628 */
6629
6630function areValidRatios(ratios) {
6631  return ratios.length > 0 && ratios.every(function (ratio) {
6632    return ratio >= 0;
6633  }) && ratios.some(function (ratio) {
6634    return ratio > 0;
6635  });
6636}
6637/**
6638 * Returns whether a value is even.
6639 * @ignore
6640 *
6641 * @param  {Number} value - The value to test.
6642 *
6643 * @return {Boolean}
6644 */
6645
6646function isEven(value) {
6647  return value % 2 === 0;
6648}
6649/**
6650 * Returns whether a value is a float.
6651 * @ignore
6652 *
6653 * @param  {}  value - The value to test.
6654 *
6655 * @return {Boolean}
6656 */
6657
6658function isFloat(value) {
6659  return isNumeric(value) && !Number.isInteger(value);
6660}
6661/**
6662 * Returns how many fraction digits a number has.
6663 * @ignore
6664 *
6665 * @param  {Number} [number=0] - The number to test.
6666 *
6667 * @return {Number}
6668 */
6669
6670function countFractionDigits() {
6671  var number = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
6672  var stringRepresentation = number.toString();
6673
6674  if (stringRepresentation.indexOf('e-') > 0) {
6675    // It's too small for a normal string representation, e.g. 1e-7 instead of 0.00000001
6676    return parseInt(stringRepresentation.split('e-')[1]);
6677  } else {
6678    var fractionDigits = stringRepresentation.split('.')[1];
6679    return fractionDigits ? fractionDigits.length : 0;
6680  }
6681}
6682/**
6683 * Returns whether a number is half.
6684 * @ignore
6685 *
6686 * @param {Number} number - The number to test.
6687 *
6688 * @return {Number}
6689 */
6690
6691function isHalf(number) {
6692  return Math.abs(number) % 1 === 0.5;
6693}
6694/**
6695 * Fetches a JSON resource.
6696 * @ignore
6697 *
6698 * @param  {String} url - The resource to fetch.
6699 * @param  {Object} [options.headers] - The headers to pass.
6700 *
6701 * @throws {Error} If `request.status` is lesser than 200 or greater or equal to 400.
6702 * @throws {Error} If network fails.
6703 *
6704 * @return {JSON}
6705 */
6706
6707function getJSON(url) {
6708  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
6709  return new Promise(function (resolve, reject) {
6710    var request = Object.assign(new XMLHttpRequest(), {
6711      onreadystatechange: function onreadystatechange() {
6712        if (request.readyState === 4) {
6713          if (request.status >= 200 && request.status < 400) resolve(JSON.parse(request.responseText));else reject(new Error(request.statusText));
6714        }
6715      },
6716      onerror: function onerror() {
6717        reject(new Error('Network error'));
6718      }
6719    });
6720    request.open('GET', url, true);
6721    setXHRHeaders(request, options.headers);
6722    request.send();
6723  });
6724}
6725/**
6726 * Returns an XHR object with attached headers.
6727 * @ignore
6728 *
6729 * @param {XMLHttpRequest} xhr - The XHR request to set headers to.
6730 * @param {Object} headers - The headers to set.
6731 *
6732 * @return {XMLHttpRequest}
6733 */
6734
6735function setXHRHeaders(xhr) {
6736  var headers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
6737
6738  for (var header in headers) {
6739    xhr.setRequestHeader(header, headers[header]);
6740  }
6741
6742  return xhr;
6743}
6744/**
6745 * Returns whether a value is undefined.
6746 * @ignore
6747 *
6748 * @param {} value - The value to test.
6749 *
6750 * @return {Boolean}
6751 */
6752
6753function isUndefined(value) {
6754  return typeof value === 'undefined';
6755}
6756/**
6757 * Returns an object flattened to one level deep.
6758 * @ignore
6759 *
6760 * @param {Object} object - The object to flatten.
6761 * @param {String} separator - The separator to use between flattened nodes.
6762 *
6763 * @return {Object}
6764 */
6765
6766function flattenObject(object) {
6767  var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '.';
6768  var finalObject = {};
6769  Object.entries(object).forEach(function (item) {
6770    if (_typeof(item[1]) === 'object') {
6771      var flatObject = flattenObject(item[1]);
6772      Object.entries(flatObject).forEach(function (node) {
6773        finalObject[item[0] + separator + node[0]] = node[1];
6774      });
6775    } else {
6776      finalObject[item[0]] = item[1];
6777    }
6778  });
6779  return finalObject;
6780}
6781/**
6782 * Returns whether a value is thenable.
6783 * @ignore
6784 *
6785 * @param {} value - The value to test.
6786 *
6787 * @return {Boolean}
6788 */
6789
6790function isThenable(value) {
6791  return Boolean(value) && (_typeof(value) === 'object' || typeof value === 'function') && typeof value.then === 'function';
6792}
6793
6794function Calculator() {
6795  var floatMultiply = function floatMultiply(a, b) {
6796    var getFactor = function getFactor(number) {
6797      return Math.pow(10, countFractionDigits(number));
6798    };
6799
6800    var factor = Math.max(getFactor(a), getFactor(b));
6801    return Math.round(a * factor) * Math.round(b * factor) / (factor * factor);
6802  };
6803
6804  var roundingModes = {
6805    HALF_ODD: function HALF_ODD(number) {
6806      var rounded = Math.round(number);
6807      return isHalf(number) ? isEven(rounded) ? rounded - 1 : rounded : rounded;
6808    },
6809    HALF_EVEN: function HALF_EVEN(number) {
6810      var rounded = Math.round(number);
6811      return isHalf(number) ? isEven(rounded) ? rounded : rounded - 1 : rounded;
6812    },
6813    HALF_UP: function HALF_UP(number) {
6814      return Math.round(number);
6815    },
6816    HALF_DOWN: function HALF_DOWN(number) {
6817      return isHalf(number) ? Math.floor(number) : Math.round(number);
6818    },
6819    HALF_TOWARDS_ZERO: function HALF_TOWARDS_ZERO(number) {
6820      return isHalf(number) ? Math.sign(number) * Math.floor(Math.abs(number)) : Math.round(number);
6821    },
6822    HALF_AWAY_FROM_ZERO: function HALF_AWAY_FROM_ZERO(number) {
6823      return isHalf(number) ? Math.sign(number) * Math.ceil(Math.abs(number)) : Math.round(number);
6824    },
6825    DOWN: function DOWN(number) {
6826      return Math.floor(number);
6827    }
6828  };
6829  return {
6830    /**
6831     * Returns the sum of two numbers.
6832     * @ignore
6833     *
6834     * @param {Number} a - The first number to add.
6835     * @param {Number} b - The second number to add.
6836     *
6837     * @return {Number}
6838     */
6839    add: function add(a, b) {
6840      return a + b;
6841    },
6842
6843    /**
6844     * Returns the difference of two numbers.
6845     * @ignore
6846     *
6847     * @param {Number} a - The first number to subtract.
6848     * @param {Number} b - The second number to subtract.
6849     *
6850     * @return {Number}
6851     */
6852    subtract: function subtract(a, b) {
6853      return a - b;
6854    },
6855
6856    /**
6857     * Returns the product of two numbers.
6858     * @ignore
6859     *
6860     * @param {Number} a - The first number to multiply.
6861     * @param {Number} b - The second number to multiply.
6862     *
6863     * @return {Number}
6864     */
6865    multiply: function multiply(a, b) {
6866      return isFloat(a) || isFloat(b) ? floatMultiply(a, b) : a * b;
6867    },
6868
6869    /**
6870     * Returns the quotient of two numbers.
6871     * @ignore
6872     *
6873     * @param {Number} a - The first number to divide.
6874     * @param {Number} b - The second number to divide.
6875     *
6876     * @return {Number}
6877     */
6878    divide: function divide(a, b) {
6879      return a / b;
6880    },
6881
6882    /**
6883     * Returns the remainder of two numbers.
6884     * @ignore
6885     *
6886     * @param  {Number} a - The first number to divide.
6887     * @param  {Number} b - The second number to divide.
6888     *
6889     * @return {Number}
6890     */
6891    modulo: function modulo(a, b) {
6892      return a % b;
6893    },
6894
6895    /**
6896     * Returns a rounded number based off a specific rounding mode.
6897     * @ignore
6898     *
6899     * @param {Number} number - The number to round.
6900     * @param {String} [roundingMode='HALF_EVEN'] - The rounding mode to use.
6901     *
6902     * @returns {Number}
6903     */
6904    round: function round(number) {
6905      var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'HALF_EVEN';
6906      return roundingModes[roundingMode](number);
6907    }
6908  };
6909}
6910
6911var calculator = Calculator();
6912function Format(format) {
6913  var matches = /^(?:(\$|USD)?0(?:(,)0)?(\.)?(0+)?|0(?:(,)0)?(\.)?(0+)?\s?(dollar)?)$/gm.exec(format);
6914  return {
6915    /**
6916     * Returns the matches.
6917     * @ignore
6918     *
6919     * @return {Array}
6920     */
6921    getMatches: function getMatches() {
6922      return matches !== null ? matches.slice(1).filter(function (match) {
6923        return !isUndefined(match);
6924      }) : [];
6925    },
6926
6927    /**
6928     * Returns the amount of fraction digits to display.
6929     * @ignore
6930     *
6931     * @return {Number}
6932     */
6933    getMinimumFractionDigits: function getMinimumFractionDigits() {
6934      var decimalPosition = function decimalPosition(match) {
6935        return match === '.';
6936      };
6937
6938      return !isUndefined(this.getMatches().find(decimalPosition)) ? this.getMatches()[calculator.add(this.getMatches().findIndex(decimalPosition), 1)].split('').length : 0;
6939    },
6940
6941    /**
6942     * Returns the currency display mode.
6943     * @ignore
6944     *
6945     * @return {String}
6946     */
6947    getCurrencyDisplay: function getCurrencyDisplay() {
6948      var modes = {
6949        USD: 'code',
6950        dollar: 'name',
6951        $: 'symbol'
6952      };
6953      return modes[this.getMatches().find(function (match) {
6954        return match === 'USD' || match === 'dollar' || match === '$';
6955      })];
6956    },
6957
6958    /**
6959     * Returns the formatting style.
6960     * @ignore
6961     *
6962     * @return {String}
6963     */
6964    getStyle: function getStyle() {
6965      return !isUndefined(this.getCurrencyDisplay(this.getMatches())) ? 'currency' : 'decimal';
6966    },
6967
6968    /**
6969     * Returns whether grouping should be used or not.
6970     * @ignore
6971     *
6972     * @return {Boolean}
6973     */
6974    getUseGrouping: function getUseGrouping() {
6975      return !isUndefined(this.getMatches().find(function (match) {
6976        return match === ',';
6977      }));
6978    }
6979  };
6980}
6981
6982function CurrencyConverter(options) {
6983  /* istanbul ignore next */
6984  var mergeTags = function mergeTags() {
6985    var string = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
6986    var tags = arguments.length > 1 ? arguments[1] : undefined;
6987
6988    for (var tag in tags) {
6989      string = string.replace("{{".concat(tag, "}}"), tags[tag]);
6990    }
6991
6992    return string;
6993  };
6994  /* istanbul ignore next */
6995
6996
6997  var getRatesFromRestApi = function getRatesFromRestApi(from, to) {
6998    return getJSON(mergeTags(options.endpoint, {
6999      from: from,
7000      to: to
7001    }), {
7002      headers: options.headers
7003    });
7004  };
7005
7006  return {
7007    /**
7008     * Returns the exchange rate.
7009     * @ignore
7010     *
7011     * @param  {String} from - The base currency.
7012     * @param  {String} to   - The destination currency.
7013     *
7014     * @return {Promise}
7015     */
7016    getExchangeRate: function getExchangeRate(from, to) {
7017      return (isThenable(options.endpoint) ? options.endpoint : getRatesFromRestApi(from, to)).then(function (data) {
7018        return flattenObject(data)[mergeTags(options.propertyPath, {
7019          from: from,
7020          to: to
7021        })];
7022      });
7023    }
7024  };
7025}
7026
7027/**
7028 * Performs an assertion.
7029 * @ignore
7030 *
7031 * @param  {Boolean} condition - The expression to assert.
7032 * @param  {String}  errorMessage - The message to throw if the assertion fails
7033 * @param  {ErrorConstructor}   [ErrorType=Error] - The error to throw if the assertion fails.
7034 *
7035 * @throws {Error} If `condition` returns `false`.
7036 */
7037
7038function assert(condition, errorMessage) {
7039  var ErrorType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Error;
7040  if (!condition) throw new ErrorType(errorMessage);
7041}
7042/**
7043 * Asserts a value is a percentage.
7044 * @ignore
7045 *
7046 * @param  {}  percentage - The percentage to test.
7047 *
7048 * @throws {RangeError} If `percentage` is out of range.
7049 */
7050
7051function assertPercentage(percentage) {
7052  assert(isPercentage(percentage), 'You must provide a numeric value between 0 and 100.', RangeError);
7053}
7054/**
7055 * Asserts an array of ratios is valid.
7056 * @ignore
7057 *
7058 * @param  {}  ratios - The ratios to test.
7059 *
7060 * @throws {TypeError} If `ratios` are invalid.
7061 */
7062
7063function assertValidRatios(ratios) {
7064  assert(areValidRatios(ratios), 'You must provide a non-empty array of numeric values greater than 0.', TypeError);
7065}
7066/**
7067 * Asserts a value is an integer.
7068 * @ignore
7069 *
7070 * @param  {}  number - The value to test.
7071 *
7072 * @throws {TypeError}
7073 */
7074
7075function assertInteger(number) {
7076  assert(Number.isInteger(number), 'You must provide an integer.', TypeError);
7077}
7078
7079var calculator$1 = Calculator();
7080/**
7081 * A Dinero object is an immutable data structure representing a specific monetary value.
7082 * It comes with methods for creating, parsing, manipulating, testing, transforming and formatting them.
7083 *
7084 * A Dinero object has:
7085 *
7086 * * An `amount`, expressed in minor currency units, as an integer.
7087 * * A `currency`, expressed as an {@link https://en.wikipedia.org/wiki/ISO_4217#Active_codes ISO 4217 currency code}.
7088 * * A `precision`, expressed as an integer, to represent the number of decimal places in the `amount`.
7089 *   This is helpful when you want to represent fractional minor currency units (e.g.: $10.4545).
7090 *   You can also use it to represent a currency with a different [exponent](https://en.wikipedia.org/wiki/ISO_4217#Treatment_of_minor_currency_units_.28the_.22exponent.22.29) than `2` (e.g.: Iraqi dinar with 1000 fils in 1 dinar (exponent of `3`), Japanese yen with no sub-units (exponent of `0`)).
7091 * * An optional `locale` property that affects how output strings are formatted.
7092 *
7093 * Here's an overview of the public API:
7094 *
7095 * * **Access:** {@link module:Dinero~getAmount getAmount}, {@link module:Dinero~getCurrency getCurrency}, {@link module:Dinero~getLocale getLocale} and {@link module:Dinero~getPrecision getPrecision}.
7096 * * **Manipulation:** {@link module:Dinero~add add}, {@link module:Dinero~subtract subtract}, {@link module:Dinero~multiply multiply}, {@link module:Dinero~divide divide}, {@link module:Dinero~percentage percentage}, {@link module:Dinero~allocate allocate} and {@link module:Dinero~convert convert}.
7097 * * **Testing:** {@link module:Dinero~equalsTo equalsTo}, {@link module:Dinero~lessThan lessThan}, {@link module:Dinero~lessThanOrEqual lessThanOrEqual}, {@link module:Dinero~greaterThan greaterThan}, {@link module:Dinero~greaterThanOrEqual greaterThanOrEqual}, {@link module:Dinero~isZero isZero}, {@link module:Dinero~isPositive isPositive}, {@link module:Dinero~isNegative isNegative}, {@link module:Dinero~hasSubUnits hasSubUnits}, {@link module:Dinero~hasSameCurrency hasSameCurrency} and {@link module:Dinero~hasSameAmount hasSameAmount}.
7098 * * **Configuration:** {@link module:Dinero~setLocale setLocale}.
7099 * * **Conversion & formatting:** {@link module:Dinero~toFormat toFormat}, {@link module:Dinero~toUnit toUnit}, {@link module:Dinero~toRoundedUnit toRoundedUnit}, {@link module:Dinero~toObject toObject}, {@link module:Dinero~toJSON toJSON}, {@link module:Dinero~convertPrecision convertPrecision} and {@link module:Dinero.normalizePrecision normalizePrecision}.
7100 *
7101 * Dinero.js uses `number`s under the hood, so it's constrained by the [double-precision floating-point format](https://en.wikipedia.org/wiki/Double-precision_floating-point_format). Using values over [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Number/MAX_SAFE_INTEGER) or below [`Number.MIN_SAFE_INTEGER`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Number/MIN_SAFE_INTEGER) will yield unpredictable results.
7102 * Same goes with performing calculations: once the internal `amount` value exceeds those limits, precision is no longer guaranteed.
7103 *
7104 * @module Dinero
7105 * @param  {Number} [options.amount=0] - The amount in minor currency units (as an integer).
7106 * @param  {String} [options.currency='USD'] - An ISO 4217 currency code.
7107 * @param  {String} [options.precision=2] - The number of decimal places to represent.
7108 *
7109 * @throws {TypeError} If `amount` or `precision` is invalid. Integers over [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Number/MAX_SAFE_INTEGER) or below [`Number.MIN_SAFE_INTEGER`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Number/MIN_SAFE_INTEGER) are considered valid, even though they can lead to imprecise amounts.
7110 *
7111 * @return {Object}
7112 */
7113
7114var Dinero = function Dinero(options) {
7115  var _Object$assign = Object.assign({}, {
7116    amount: Dinero.defaultAmount,
7117    currency: Dinero.defaultCurrency,
7118    precision: Dinero.defaultPrecision
7119  }, options),
7120      amount = _Object$assign.amount,
7121      currency = _Object$assign.currency,
7122      precision = _Object$assign.precision;
7123
7124  assertInteger(amount);
7125  assertInteger(precision);
7126  var globalLocale = Dinero.globalLocale,
7127      globalFormat = Dinero.globalFormat,
7128      globalRoundingMode = Dinero.globalRoundingMode,
7129      globalFormatRoundingMode = Dinero.globalFormatRoundingMode;
7130  var globalExchangeRatesApi = Object.assign({}, Dinero.globalExchangeRatesApi);
7131  /**
7132   * Uses ES5 function notation so `this` can be passed through call, apply and bind
7133   * @ignore
7134   */
7135
7136  var create = function create(options) {
7137    var obj = Object.assign({}, Object.assign({}, {
7138      amount: amount,
7139      currency: currency,
7140      precision: precision
7141    }, options), Object.assign({}, {
7142      locale: this.locale
7143    }, options));
7144    return Object.assign(Dinero({
7145      amount: obj.amount,
7146      currency: obj.currency,
7147      precision: obj.precision
7148    }), {
7149      locale: obj.locale
7150    });
7151  };
7152  /**
7153   * Uses ES5 function notation so `this` can be passed through call, apply and bind
7154   * @ignore
7155   */
7156
7157
7158  var assertSameCurrency = function assertSameCurrency(comparator) {
7159    assert(this.hasSameCurrency(comparator), 'You must provide a Dinero instance with the same currency.', TypeError);
7160  };
7161
7162  return {
7163    /**
7164     * Returns the amount.
7165     *
7166     * @example
7167     * // returns 500
7168     * Dinero({ amount: 500 }).getAmount()
7169     *
7170     * @return {Number}
7171     */
7172    getAmount: function getAmount() {
7173      return amount;
7174    },
7175
7176    /**
7177     * Returns the currency.
7178     *
7179     * @example
7180     * // returns 'EUR'
7181     * Dinero({ currency: 'EUR' }).getCurrency()
7182     *
7183     * @return {String}
7184     */
7185    getCurrency: function getCurrency() {
7186      return currency;
7187    },
7188
7189    /**
7190     * Returns the locale.
7191     *
7192     * @example
7193     * // returns 'fr-FR'
7194     * Dinero().setLocale('fr-FR').getLocale()
7195     *
7196     * @return {String}
7197     */
7198    getLocale: function getLocale() {
7199      return this.locale || globalLocale;
7200    },
7201
7202    /**
7203     * Returns a new Dinero object with an embedded locale.
7204     *
7205     * @param {String} newLocale - The new locale as an {@link http://tools.ietf.org/html/rfc5646 BCP 47 language tag}.
7206     *
7207     * @example
7208     * // Returns a Dinero object with locale 'ja-JP'
7209     * Dinero().setLocale('ja-JP')
7210     *
7211     * @return {Dinero}
7212     */
7213    setLocale: function setLocale(newLocale) {
7214      return create.call(this, {
7215        locale: newLocale
7216      });
7217    },
7218
7219    /**
7220     * Returns the precision.
7221     *
7222     * @example
7223     * // returns 3
7224     * Dinero({ precision: 3 }).getPrecision()
7225     *
7226     * @return {Number}
7227     */
7228    getPrecision: function getPrecision() {
7229      return precision;
7230    },
7231
7232    /**
7233     * Returns a new Dinero object with a new precision and a converted amount.
7234     *
7235     * By default, fractional minor currency units are rounded using the **half to even** rule ([banker's rounding](http://wiki.c2.com/?BankersRounding)).
7236     * This can be necessary when you need to convert objects to a smaller precision.
7237     *
7238     * Rounding *can* lead to accuracy issues as you chain many times. Consider a minimal amount of subsequent conversions for safer results.
7239     * You can also specify a different `roundingMode` to better fit your needs.
7240     *
7241     * @param {Number} newPrecision - The new precision.
7242     * @param {String} [roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`.
7243     *
7244     * @example
7245     * // Returns a Dinero object with precision 3 and amount 1000
7246     * Dinero({ amount: 100, precision: 2 }).convertPrecision(3)
7247     *
7248     * @throws {TypeError} If `newPrecision` is invalid.
7249     *
7250     * @return {Dinero}
7251     */
7252    convertPrecision: function convertPrecision(newPrecision) {
7253      var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalFormatRoundingMode;
7254      assertInteger(newPrecision);
7255      var precision = this.getPrecision();
7256      var isNewPrecisionLarger = newPrecision > precision;
7257      var operation = isNewPrecisionLarger ? calculator$1.multiply : calculator$1.divide;
7258      var terms = isNewPrecisionLarger ? [newPrecision, precision] : [precision, newPrecision];
7259      var factor = Math.pow(10, calculator$1.subtract.apply(calculator$1, terms));
7260      return create.call(this, {
7261        amount: calculator$1.round(operation(this.getAmount(), factor), roundingMode),
7262        precision: newPrecision
7263      });
7264    },
7265
7266    /**
7267     * Returns a new Dinero object that represents the sum of this and an other Dinero object.
7268     *
7269     * If Dinero objects have a different `precision`, they will be first converted to the highest.
7270     *
7271     * @param {Dinero} addend - The Dinero object to add.
7272     *
7273     * @example
7274     * // returns a Dinero object with amount 600
7275     * Dinero({ amount: 400 }).add(Dinero({ amount: 200 }))
7276     * @example
7277     * // returns a Dinero object with amount 144545 and precision 4
7278     * Dinero({ amount: 400 }).add(Dinero({ amount: 104545, precision: 4 }))
7279     *
7280     * @throws {TypeError} If `addend` has a different currency.
7281     *
7282     * @return {Dinero}
7283     */
7284    add: function add(addend) {
7285      assertSameCurrency.call(this, addend);
7286      var addends = Dinero.normalizePrecision([this, addend]);
7287      return create.call(this, {
7288        amount: calculator$1.add(addends[0].getAmount(), addends[1].getAmount()),
7289        precision: addends[0].getPrecision()
7290      });
7291    },
7292
7293    /**
7294     * Returns a new Dinero object that represents the difference of this and an other Dinero object.
7295     *
7296     * If Dinero objects have a different `precision`, they will be first converted to the highest.
7297     *
7298     * @param  {Dinero} subtrahend - The Dinero object to subtract.
7299     *
7300     * @example
7301     * // returns a Dinero object with amount 200
7302     * Dinero({ amount: 400 }).subtract(Dinero({ amount: 200 }))
7303     * @example
7304     * // returns a Dinero object with amount 64545 and precision 4
7305     * Dinero({ amount: 104545, precision: 4 }).subtract(Dinero({ amount: 400 }))
7306     *
7307     * @throws {TypeError} If `subtrahend` has a different currency.
7308     *
7309     * @return {Dinero}
7310     */
7311    subtract: function subtract(subtrahend) {
7312      assertSameCurrency.call(this, subtrahend);
7313      var subtrahends = Dinero.normalizePrecision([this, subtrahend]);
7314      return create.call(this, {
7315        amount: calculator$1.subtract(subtrahends[0].getAmount(), subtrahends[1].getAmount()),
7316        precision: subtrahends[0].getPrecision()
7317      });
7318    },
7319
7320    /**
7321     * Returns a new Dinero object that represents the multiplied value by the given factor.
7322     *
7323     * By default, fractional minor currency units are rounded using the **half to even** rule ([banker's rounding](http://wiki.c2.com/?BankersRounding)).
7324     *
7325     * Rounding *can* lead to accuracy issues as you chain many times. Consider a minimal amount of subsequent calculations for safer results.
7326     * You can also specify a different `roundingMode` to better fit your needs.
7327     *
7328     * @param  {Number} multiplier - The factor to multiply by.
7329     * @param  {String} [roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`.
7330     *
7331     * @example
7332     * // returns a Dinero object with amount 1600
7333     * Dinero({ amount: 400 }).multiply(4)
7334     * @example
7335     * // returns a Dinero object with amount 800
7336     * Dinero({ amount: 400 }).multiply(2.001)
7337     * @example
7338     * // returns a Dinero object with amount 801
7339     * Dinero({ amount: 400 }).multiply(2.00125, 'HALF_UP')
7340     *
7341     * @return {Dinero}
7342     */
7343    multiply: function multiply(multiplier) {
7344      var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalRoundingMode;
7345      return create.call(this, {
7346        amount: calculator$1.round(calculator$1.multiply(this.getAmount(), multiplier), roundingMode)
7347      });
7348    },
7349
7350    /**
7351     * Returns a new Dinero object that represents the divided value by the given factor.
7352     *
7353     * By default, fractional minor currency units are rounded using the **half to even** rule ([banker's rounding](http://wiki.c2.com/?BankersRounding)).
7354     *
7355     * Rounding *can* lead to accuracy issues as you chain many times. Consider a minimal amount of subsequent calculations for safer results.
7356     * You can also specify a different `roundingMode` to better fit your needs.
7357     *
7358     * As rounding is applied, precision may be lost in the process. If you want to accurately split a Dinero object, use {@link module:Dinero~allocate allocate} instead.
7359     *
7360     * @param  {Number} divisor - The factor to divide by.
7361     * @param  {String} [roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`.
7362     *
7363     * @example
7364     * // returns a Dinero object with amount 100
7365     * Dinero({ amount: 400 }).divide(4)
7366     * @example
7367     * // returns a Dinero object with amount 52
7368     * Dinero({ amount: 105 }).divide(2)
7369     * @example
7370     * // returns a Dinero object with amount 53
7371     * Dinero({ amount: 105 }).divide(2, 'HALF_UP')
7372     *
7373     * @return {Dinero}
7374     */
7375    divide: function divide(divisor) {
7376      var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalRoundingMode;
7377      return create.call(this, {
7378        amount: calculator$1.round(calculator$1.divide(this.getAmount(), divisor), roundingMode)
7379      });
7380    },
7381
7382    /**
7383     * Returns a new Dinero object that represents a percentage of this.
7384     *
7385     * As rounding is applied, precision may be lost in the process. If you want to accurately split a Dinero object, use {@link module:Dinero~allocate allocate} instead.
7386     *
7387     * @param  {Number} percentage - The percentage to extract (between 0 and 100).
7388     * @param  {String} [roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`.
7389     *
7390     * @example
7391     * // returns a Dinero object with amount 5000
7392     * Dinero({ amount: 10000 }).percentage(50)
7393     * @example
7394     * // returns a Dinero object with amount 29
7395     * Dinero({ amount: 57 }).percentage(50, "HALF_ODD")
7396     *
7397     * @throws {RangeError} If `percentage` is out of range.
7398     *
7399     * @return {Dinero}
7400     */
7401    percentage: function percentage(_percentage) {
7402      var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalRoundingMode;
7403      assertPercentage(_percentage);
7404      return this.multiply(calculator$1.divide(_percentage, 100), roundingMode);
7405    },
7406
7407    /**
7408     * Allocates the amount of a Dinero object according to a list of ratios.
7409     *
7410     * Sometimes you need to split monetary values but percentages can't cut it without adding or losing pennies.
7411     * A good example is invoicing: let's say you need to bill $1,000.03 and you want a 50% downpayment.
7412     * If you use {@link module:Dinero~percentage percentage}, you'll get an accurate Dinero object but the amount won't be billable: you can't split a penny.
7413     * If you round it, you'll bill a penny extra.
7414     * With {@link module:Dinero~allocate allocate}, you can split a monetary amount then distribute the remainder as evenly as possible.
7415     *
7416     * You can use percentage style or ratio style for `ratios`: `[25, 75]` and `[1, 3]` will do the same thing.
7417     *
7418     * Since v1.8.0, you can use zero ratios (such as [0, 50, 50]). If there's a remainder to distribute, zero ratios are skipped and return a Dinero object with amount zero.
7419     *
7420     * @param  {Number[]} ratios - The ratios to allocate the money to.
7421     *
7422     * @example
7423     * // returns an array of two Dinero objects
7424     * // the first one with an amount of 502
7425     * // the second one with an amount of 501
7426     * Dinero({ amount: 1003 }).allocate([50, 50])
7427     * @example
7428     * // returns an array of two Dinero objects
7429     * // the first one with an amount of 25
7430     * // the second one with an amount of 75
7431     * Dinero({ amount: 100 }).allocate([1, 3])
7432     * @example
7433     * // since version 1.8.0
7434     * // returns an array of three Dinero objects
7435     * // the first one with an amount of 0
7436     * // the second one with an amount of 502
7437     * // the third one with an amount of 501
7438     * Dinero({ amount: 1003 }).allocate([0, 50, 50])
7439     *
7440     * @throws {TypeError} If ratios are invalid.
7441     *
7442     * @return {Dinero[]}
7443     */
7444    allocate: function allocate(ratios) {
7445      var _this = this;
7446
7447      assertValidRatios(ratios);
7448      var total = ratios.reduce(function (a, b) {
7449        return calculator$1.add(a, b);
7450      });
7451      var remainder = this.getAmount();
7452      var shares = ratios.map(function (ratio) {
7453        var share = Math.floor(calculator$1.divide(calculator$1.multiply(_this.getAmount(), ratio), total));
7454        remainder = calculator$1.subtract(remainder, share);
7455        return create.call(_this, {
7456          amount: share
7457        });
7458      });
7459      var i = 0;
7460
7461      while (remainder > 0) {
7462        if (ratios[i] > 0) {
7463          shares[i] = shares[i].add(create.call(this, {
7464            amount: 1
7465          }));
7466          remainder = calculator$1.subtract(remainder, 1);
7467        }
7468
7469        i += 1;
7470      }
7471
7472      return shares;
7473    },
7474
7475    /**
7476     * Returns a Promise containing a new Dinero object converted to another currency.
7477     *
7478     * You have two options to provide the exchange rates:
7479     *
7480     * 1. **Use an exchange rate REST API, and let Dinero handle the fetching and conversion.**
7481     *   This is a simple option if you have access to an exchange rate REST API and want Dinero to do the rest.
7482     * 2. **Fetch the exchange rates on your own and provide them directly.**
7483     *   This is useful if you're fetching your rates from somewhere else (a file, a database), use a different protocol or query language than REST (SOAP, GraphQL) or want to fetch rates once and cache them instead of making new requests every time.
7484     *
7485     * **If you want to use a REST API**, you must provide a third-party endpoint yourself. Dinero doesn't come bundled with an exchange rates endpoint.
7486     *
7487     * Here are some exchange rate APIs you can use:
7488     *
7489     * * [Fixer](https://fixer.io)
7490     * * [Open Exchange Rates](https://openexchangerates.org)
7491     * * [Coinbase](https://api.coinbase.com/v2/exchange-rates)
7492     * * More [foreign](https://github.com/toddmotto/public-apis#currency-exchange) and [crypto](https://github.com/toddmotto/public-apis#cryptocurrency) exchange rate APIs.
7493     *
7494     * **If you want to fetch your own rates and provide them directly**, you need to pass a promise that resolves to the exchanges rates.
7495     *
7496     * In both cases, you need to specify at least:
7497     *
7498     * * a **destination currency**: the currency in which you want to convert your Dinero object. You can specify it with `currency`.
7499     * * an **endpoint**: the API URL to query exchange rates, with parameters, or a promise that resolves to the exchange rates. You can specify it with `options.endpoint`.
7500     * * a **property path**: the path to access the wanted rate in your API's JSON response (or the custom promise's payload). For example, with a response of:
7501     * ```json
7502     * {
7503     *     "data": {
7504     *       "base": "USD",
7505     *       "destination": "EUR",
7506     *       "rate": "0.827728919"
7507     *     }
7508     * }
7509     * ```
7510     * Then the property path is `'data.rate'`. You can specify it with `options.propertyPath`.
7511     *
7512     * The base currency (the one of your Dinero object) and the destination currency can be used as "merge tags" with the mustache syntax, respectively `{{from}}` and `{{to}}`.
7513     * You can use these tags to refer to these values in `options.endpoint` and `options.propertyPath`.
7514     *
7515     * For example, if you need to specify the base currency as a query parameter, you can do the following:
7516     *
7517     * ```js
7518     * {
7519     *   endpoint: 'https://yourexchangerates.api/latest?base={{from}}'
7520     * }
7521     * ```
7522     *
7523     * @param  {String} currency - The destination currency, expressed as an {@link https://en.wikipedia.org/wiki/ISO_4217#Active_codes ISO 4217 currency code}.
7524     * @param  {(String|Promise)} options.endpoint - The API endpoint to retrieve exchange rates. You can substitute this with a promise that resolves to the exchanges rates if you already have them.
7525     * @param  {String} [options.propertyPath='rates.{{to}}'] - The property path to the rate.
7526     * @param  {Object} [options.headers] - The HTTP headers to provide, if needed.
7527     * @param  {String} [options.roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`.
7528     *
7529     * @example
7530     * // your global API parameters
7531     * Dinero.globalExchangeRatesApi = { ... }
7532     *
7533     * // returns a Promise containing a Dinero object with the destination currency
7534     * // and the initial amount converted to the new currency.
7535     * Dinero({ amount: 500 }).convert('EUR')
7536     * @example
7537     * // returns a Promise containing a Dinero object,
7538     * // with specific API parameters and rounding mode for this specific instance.
7539     * Dinero({ amount: 500 })
7540     *   .convert('XBT', {
7541     *     endpoint: 'https://yourexchangerates.api/latest?base={{from}}',
7542     *     propertyPath: 'data.rates.{{to}}',
7543     *     headers: {
7544     *       'user-key': 'xxxxxxxxx'
7545     *     },
7546     *     roundingMode: 'HALF_UP'
7547     *   })
7548     * @example
7549     * // usage with exchange rates provided as a custom promise
7550     * // using the default `propertyPath` format (so it doesn't have to be specified)
7551     * const rates = {
7552     *   rates: {
7553     *     EUR: 0.81162
7554     *   }
7555     * }
7556     *
7557     * Dinero({ amount: 500 })
7558     *   .convert('EUR', {
7559     *     endpoint: new Promise(resolve => resolve(rates))
7560     *   })
7561     * @example
7562     * // usage with Promise.prototype.then and Promise.prototype.catch
7563     * Dinero({ amount: 500 })
7564     *   .convert('EUR')
7565     *   .then(dinero => {
7566     *     dinero.getCurrency() // returns 'EUR'
7567     *   })
7568     *   .catch(err => {
7569     *     // handle errors
7570     *   })
7571     * @example
7572     * // usage with async/await
7573     * (async () => {
7574     *   const price = await Dinero({ amount: 500 }).convert('EUR')
7575     *   price.getCurrency() // returns 'EUR'
7576     * })()
7577     *
7578     * @return {Promise}
7579     */
7580    convert: function convert(currency) {
7581      var _this2 = this;
7582
7583      var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
7584          _ref$endpoint = _ref.endpoint,
7585          endpoint = _ref$endpoint === void 0 ? globalExchangeRatesApi.endpoint : _ref$endpoint,
7586          _ref$propertyPath = _ref.propertyPath,
7587          propertyPath = _ref$propertyPath === void 0 ? globalExchangeRatesApi.propertyPath || 'rates.{{to}}' : _ref$propertyPath,
7588          _ref$headers = _ref.headers,
7589          headers = _ref$headers === void 0 ? globalExchangeRatesApi.headers : _ref$headers,
7590          _ref$roundingMode = _ref.roundingMode,
7591          roundingMode = _ref$roundingMode === void 0 ? globalRoundingMode : _ref$roundingMode;
7592
7593      var options = Object.assign({}, {
7594        endpoint: endpoint,
7595        propertyPath: propertyPath,
7596        headers: headers,
7597        roundingMode: roundingMode
7598      });
7599      return CurrencyConverter(options).getExchangeRate(this.getCurrency(), currency).then(function (rate) {
7600        assert(!isUndefined(rate), "No rate was found for the destination currency \"".concat(currency, "\"."), TypeError);
7601        return create.call(_this2, {
7602          amount: calculator$1.round(calculator$1.multiply(_this2.getAmount(), parseFloat(rate)), options.roundingMode),
7603          currency: currency
7604        });
7605      });
7606    },
7607
7608    /**
7609     * Checks whether the value represented by this object equals to the other.
7610     *
7611     * @param  {Dinero} comparator - The Dinero object to compare to.
7612     *
7613     * @example
7614     * // returns true
7615     * Dinero({ amount: 500, currency: 'EUR' }).equalsTo(Dinero({ amount: 500, currency: 'EUR' }))
7616     * @example
7617     * // returns false
7618     * Dinero({ amount: 500, currency: 'EUR' }).equalsTo(Dinero({ amount: 800, currency: 'EUR' }))
7619     * @example
7620     * // returns false
7621     * Dinero({ amount: 500, currency: 'USD' }).equalsTo(Dinero({ amount: 500, currency: 'EUR' }))
7622     * @example
7623     * // returns false
7624     * Dinero({ amount: 500, currency: 'USD' }).equalsTo(Dinero({ amount: 800, currency: 'EUR' }))
7625     * @example
7626     * // returns true
7627     * Dinero({ amount: 1000, currency: 'EUR', precision: 2 }).equalsTo(Dinero({ amount: 10000, currency: 'EUR', precision: 3 }))
7628     * @example
7629     * // returns false
7630     * Dinero({ amount: 10000, currency: 'EUR', precision: 2 }).equalsTo(Dinero({ amount: 10000, currency: 'EUR', precision: 3 }))
7631     *
7632     * @return {Boolean}
7633     */
7634    equalsTo: function equalsTo(comparator) {
7635      return this.hasSameAmount(comparator) && this.hasSameCurrency(comparator);
7636    },
7637
7638    /**
7639     * Checks whether the value represented by this object is less than the other.
7640     *
7641     * @param  {Dinero} comparator - The Dinero object to compare to.
7642     *
7643     * @example
7644     * // returns true
7645     * Dinero({ amount: 500 }).lessThan(Dinero({ amount: 800 }))
7646     * @example
7647     * // returns false
7648     * Dinero({ amount: 800 }).lessThan(Dinero({ amount: 500 }))
7649     * @example
7650     * // returns true
7651     * Dinero({ amount: 5000, precision: 3 }).lessThan(Dinero({ amount: 800 }))
7652     * @example
7653     * // returns false
7654     * Dinero({ amount: 800 }).lessThan(Dinero({ amount: 5000, precision: 3 }))
7655     *
7656     * @throws {TypeError} If `comparator` has a different currency.
7657     *
7658     * @return {Boolean}
7659     */
7660    lessThan: function lessThan(comparator) {
7661      assertSameCurrency.call(this, comparator);
7662      var comparators = Dinero.normalizePrecision([this, comparator]);
7663      return comparators[0].getAmount() < comparators[1].getAmount();
7664    },
7665
7666    /**
7667     * Checks whether the value represented by this object is less than or equal to the other.
7668     *
7669     * @param  {Dinero} comparator - The Dinero object to compare to.
7670     *
7671     * @example
7672     * // returns true
7673     * Dinero({ amount: 500 }).lessThanOrEqual(Dinero({ amount: 800 }))
7674     * @example
7675     * // returns true
7676     * Dinero({ amount: 500 }).lessThanOrEqual(Dinero({ amount: 500 }))
7677     * @example
7678     * // returns false
7679     * Dinero({ amount: 500 }).lessThanOrEqual(Dinero({ amount: 300 }))
7680     * @example
7681     * // returns true
7682     * Dinero({ amount: 5000, precision: 3 }).lessThanOrEqual(Dinero({ amount: 800 }))
7683     * @example
7684     * // returns true
7685     * Dinero({ amount: 5000, precision: 3 }).lessThanOrEqual(Dinero({ amount: 500 }))
7686     * @example
7687     * // returns false
7688     * Dinero({ amount: 800 }).lessThanOrEqual(Dinero({ amount: 5000, precision: 3 }))
7689     *
7690     * @throws {TypeError} If `comparator` has a different currency.
7691     *
7692     * @return {Boolean}
7693     */
7694    lessThanOrEqual: function lessThanOrEqual(comparator) {
7695      assertSameCurrency.call(this, comparator);
7696      var comparators = Dinero.normalizePrecision([this, comparator]);
7697      return comparators[0].getAmount() <= comparators[1].getAmount();
7698    },
7699
7700    /**
7701     * Checks whether the value represented by this object is greater than the other.
7702     *
7703     * @param  {Dinero} comparator - The Dinero object to compare to.
7704     *
7705     * @example
7706     * // returns false
7707     * Dinero({ amount: 500 }).greaterThan(Dinero({ amount: 800 }))
7708     * @example
7709     * // returns true
7710     * Dinero({ amount: 800 }).greaterThan(Dinero({ amount: 500 }))
7711     * @example
7712     * // returns true
7713     * Dinero({ amount: 800 }).greaterThan(Dinero({ amount: 5000, precision: 3 }))
7714     * @example
7715     * // returns false
7716     * Dinero({ amount: 5000, precision: 3 }).greaterThan(Dinero({ amount: 800 }))
7717     *
7718     * @throws {TypeError} If `comparator` has a different currency.
7719     *
7720     * @return {Boolean}
7721     */
7722    greaterThan: function greaterThan(comparator) {
7723      assertSameCurrency.call(this, comparator);
7724      var comparators = Dinero.normalizePrecision([this, comparator]);
7725      return comparators[0].getAmount() > comparators[1].getAmount();
7726    },
7727
7728    /**
7729     * Checks whether the value represented by this object is greater than or equal to the other.
7730     *
7731     * @param  {Dinero} comparator - The Dinero object to compare to.
7732     *
7733     * @example
7734     * // returns true
7735     * Dinero({ amount: 500 }).greaterThanOrEqual(Dinero({ amount: 300 }))
7736     * @example
7737     * // returns true
7738     * Dinero({ amount: 500 }).greaterThanOrEqual(Dinero({ amount: 500 }))
7739     * @example
7740     * // returns false
7741     * Dinero({ amount: 500 }).greaterThanOrEqual(Dinero({ amount: 800 }))
7742     * @example
7743     * // returns true
7744     * Dinero({ amount: 800 }).greaterThanOrEqual(Dinero({ amount: 5000, precision: 3 }))
7745     * @example
7746     * // returns true
7747     * Dinero({ amount: 500 }).greaterThanOrEqual(Dinero({ amount: 5000, precision: 3 }))
7748     * @example
7749     * // returns false
7750     * Dinero({ amount: 5000, precision: 3 }).greaterThanOrEqual(Dinero({ amount: 800 }))
7751     *
7752     * @throws {TypeError} If `comparator` has a different currency.
7753     *
7754     * @return {Boolean}
7755     */
7756    greaterThanOrEqual: function greaterThanOrEqual(comparator) {
7757      assertSameCurrency.call(this, comparator);
7758      var comparators = Dinero.normalizePrecision([this, comparator]);
7759      return comparators[0].getAmount() >= comparators[1].getAmount();
7760    },
7761
7762    /**
7763     * Checks if the value represented by this object is zero.
7764     *
7765     * @example
7766     * // returns true
7767     * Dinero({ amount: 0 }).isZero()
7768     * @example
7769     * // returns false
7770     * Dinero({ amount: 100 }).isZero()
7771     *
7772     * @return {Boolean}
7773     */
7774    isZero: function isZero() {
7775      return this.getAmount() === 0;
7776    },
7777
7778    /**
7779     * Checks if the value represented by this object is positive.
7780     *
7781     * @example
7782     * // returns false
7783     * Dinero({ amount: -10 }).isPositive()
7784     * @example
7785     * // returns true
7786     * Dinero({ amount: 10 }).isPositive()
7787     * @example
7788     * // returns true
7789     * Dinero({ amount: 0 }).isPositive()
7790     *
7791     * @return {Boolean}
7792     */
7793    isPositive: function isPositive() {
7794      return this.getAmount() >= 0;
7795    },
7796
7797    /**
7798     * Checks if the value represented by this object is negative.
7799     *
7800     * @example
7801     * // returns true
7802     * Dinero({ amount: -10 }).isNegative()
7803     * @example
7804     * // returns false
7805     * Dinero({ amount: 10 }).isNegative()
7806     * @example
7807     * // returns false
7808     * Dinero({ amount: 0 }).isNegative()
7809     *
7810     * @return {Boolean}
7811     */
7812    isNegative: function isNegative() {
7813      return this.getAmount() < 0;
7814    },
7815
7816    /**
7817     * Checks if this has minor currency units.
7818     * Deprecates {@link module:Dinero~hasCents hasCents}.
7819     *
7820     * @example
7821     * // returns false
7822     * Dinero({ amount: 1100 }).hasSubUnits()
7823     * @example
7824     * // returns true
7825     * Dinero({ amount: 1150 }).hasSubUnits()
7826     *
7827     * @return {Boolean}
7828     */
7829    hasSubUnits: function hasSubUnits() {
7830      return calculator$1.modulo(this.getAmount(), Math.pow(10, precision)) !== 0;
7831    },
7832
7833    /**
7834     * Checks if this has minor currency units.
7835     *
7836     * @deprecated since version 1.4.0, will be removed in 2.0.0
7837     * Use {@link module:Dinero~hasSubUnits hasSubUnits} instead.
7838     *
7839     * @example
7840     * // returns false
7841     * Dinero({ amount: 1100 }).hasCents()
7842     * @example
7843     * // returns true
7844     * Dinero({ amount: 1150 }).hasCents()
7845     *
7846     * @return {Boolean}
7847     */
7848    hasCents: function hasCents() {
7849      return calculator$1.modulo(this.getAmount(), Math.pow(10, precision)) !== 0;
7850    },
7851
7852    /**
7853     * Checks whether the currency represented by this object equals to the other.
7854     *
7855     * @param  {Dinero}  comparator - The Dinero object to compare to.
7856     *
7857     * @example
7858     * // returns true
7859     * Dinero({ amount: 2000, currency: 'EUR' }).hasSameCurrency(Dinero({ amount: 1000, currency: 'EUR' }))
7860     * @example
7861     * // returns false
7862     * Dinero({ amount: 1000, currency: 'EUR' }).hasSameCurrency(Dinero({ amount: 1000, currency: 'USD' }))
7863     *
7864     * @return {Boolean}
7865     */
7866    hasSameCurrency: function hasSameCurrency(comparator) {
7867      return this.getCurrency() === comparator.getCurrency();
7868    },
7869
7870    /**
7871     * Checks whether the amount represented by this object equals to the other.
7872     *
7873     * @param  {Dinero}  comparator - The Dinero object to compare to.
7874     *
7875     * @example
7876     * // returns true
7877     * Dinero({ amount: 1000, currency: 'EUR' }).hasSameAmount(Dinero({ amount: 1000 }))
7878     * @example
7879     * // returns false
7880     * Dinero({ amount: 2000, currency: 'EUR' }).hasSameAmount(Dinero({ amount: 1000, currency: 'EUR' }))
7881     * @example
7882     * // returns true
7883     * Dinero({ amount: 1000, currency: 'EUR', precision: 2 }).hasSameAmount(Dinero({ amount: 10000, precision: 3 }))
7884     * @example
7885     * // returns false
7886     * Dinero({ amount: 10000, currency: 'EUR', precision: 2 }).hasSameAmount(Dinero({ amount: 10000, precision: 3 }))
7887     *
7888     * @return {Boolean}
7889     */
7890    hasSameAmount: function hasSameAmount(comparator) {
7891      var comparators = Dinero.normalizePrecision([this, comparator]);
7892      return comparators[0].getAmount() === comparators[1].getAmount();
7893    },
7894
7895    /**
7896     * Returns this object formatted as a string.
7897     *
7898     * The format is a mask which defines how the output string will be formatted.
7899     * It defines whether to display a currency, in what format, how many fraction digits to display and whether to use grouping separators.
7900     * The output is formatted according to the applying locale.
7901     *
7902     * Object                       | Format            | String
7903     * :--------------------------- | :---------------- | :---
7904     * `Dinero({ amount: 500050 })` | `'$0,0.00'`       | $5,000.50
7905     * `Dinero({ amount: 500050 })` | `'$0,0'`          | $5,001
7906     * `Dinero({ amount: 500050 })` | `'$0'`            | $5001
7907     * `Dinero({ amount: 500050 })` | `'$0.0'`          | $5000.5
7908     * `Dinero({ amount: 500050 })` | `'USD0,0.0'`      | USD5,000.5
7909     * `Dinero({ amount: 500050 })` | `'0,0.0 dollar'`  | 5,000.5 dollars
7910     *
7911     * Don't try to substitute the `$` sign or the `USD` code with your target currency, nor adapt the format string to the exact format you want.
7912     * The format is a mask which defines a pattern and returns a valid, localized currency string.
7913     * If you want to display the object in a custom way, either use {@link module:Dinero~getAmount getAmount}, {@link module:Dinero~toUnit toUnit} or {@link module:Dinero~toRoundedUnit toRoundedUnit} and manipulate the output string as you wish.
7914     *
7915     * {@link module:Dinero~toFormat toFormat} wraps around `Number.prototype.toLocaleString`. For that reason, **format will vary depending on how it's implemented in the end user's environment**.
7916     *
7917     * You can also use `toLocaleString` directly:
7918     * `Dinero().toRoundedUnit(digits, roundingMode).toLocaleString(locale, options)`.
7919     *
7920     * By default, amounts are rounded using the **half away from zero** rule ([commercial rounding](https://en.wikipedia.org/wiki/Rounding#Round_half_away_from_zero)).
7921     * You can also specify a different `roundingMode` to better fit your needs.
7922     *
7923     * @param  {String} [format='$0,0.00'] - The format mask to format to.
7924     * @param  {String} [roundingMode='HALF_AWAY_FROM_ZERO'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`.
7925     *
7926     * @example
7927     * // returns $2,000
7928     * Dinero({ amount: 200000 }).toFormat('$0,0')
7929     * @example
7930     * // returns €50.5
7931     * Dinero({ amount: 5050, currency: 'EUR' }).toFormat('$0,0.0')
7932     * @example
7933     * // returns 100 euros
7934     * Dinero({ amount: 10000, currency: 'EUR' }).setLocale('fr-FR').toFormat('0,0 dollar')
7935     * @example
7936     * // returns 2000
7937     * Dinero({ amount: 200000, currency: 'EUR' }).toFormat()
7938     * @example
7939     * // returns $10
7940     * Dinero({ amount: 1050 }).toFormat('$0', 'HALF_EVEN')
7941     *
7942     * @return {String}
7943     */
7944    toFormat: function toFormat() {
7945      var format = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : globalFormat;
7946      var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalFormatRoundingMode;
7947      var formatter = Format(format);
7948      return this.toRoundedUnit(formatter.getMinimumFractionDigits(), roundingMode).toLocaleString(this.getLocale(), {
7949        currencyDisplay: formatter.getCurrencyDisplay(),
7950        useGrouping: formatter.getUseGrouping(),
7951        minimumFractionDigits: formatter.getMinimumFractionDigits(),
7952        style: formatter.getStyle(),
7953        currency: this.getCurrency()
7954      });
7955    },
7956
7957    /**
7958     * Returns the amount represented by this object in units.
7959     *
7960     * @example
7961     * // returns 10.5
7962     * Dinero({ amount: 1050 }).toUnit()
7963     * @example
7964     * // returns 10.545
7965     * Dinero({ amount: 10545, precision: 3 }).toUnit()
7966     *
7967     * @return {Number}
7968     */
7969    toUnit: function toUnit() {
7970      return calculator$1.divide(this.getAmount(), Math.pow(10, precision));
7971    },
7972
7973    /**
7974     * Returns the amount represented by this object in rounded units.
7975     *
7976     * By default, the method uses the **half away from zero** rule ([commercial rounding](https://en.wikipedia.org/wiki/Rounding#Round_half_away_from_zero)).
7977     * You can also specify a different `roundingMode` to better fit your needs.
7978     *
7979     * @example
7980     * // returns 10.6
7981     * Dinero({ amount: 1055 }).toRoundedUnit(1)
7982     * @example
7983     * // returns 10
7984     * Dinero({ amount: 1050 }).toRoundedUnit(0, 'HALF_EVEN')
7985     *
7986     * @param  {Number} digits - The number of fraction digits to round to.
7987     * @param  {String} [roundingMode='HALF_AWAY_FROM_ZERO'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`.
7988     *
7989     * @return {Number}
7990     */
7991    toRoundedUnit: function toRoundedUnit(digits) {
7992      var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalFormatRoundingMode;
7993      var factor = Math.pow(10, digits);
7994      return calculator$1.divide(calculator$1.round(calculator$1.multiply(this.toUnit(), factor), roundingMode), factor);
7995    },
7996
7997    /**
7998     * Returns the object's data as an object literal.
7999     *
8000     * @example
8001     * // returns { amount: 500, currency: 'EUR', precision: 2 }
8002     * Dinero({ amount: 500, currency: 'EUR', precision: 2 }).toObject()
8003     *
8004     * @return {Object}
8005     */
8006    toObject: function toObject() {
8007      return {
8008        amount: amount,
8009        currency: currency,
8010        precision: precision
8011      };
8012    },
8013
8014    /**
8015     * Returns the object's data as an object literal.
8016     *
8017     * Alias of {@link module:Dinero~toObject toObject}.
8018     * It is defined so that calling `JSON.stringify` on a Dinero object will automatically extract the relevant data.
8019     *
8020     * @example
8021     * // returns '{"amount":500,"currency":"EUR","precision":2}'
8022     * JSON.stringify(Dinero({ amount: 500, currency: 'EUR', precision: 2 }))
8023     *
8024     * @return {Object}
8025     */
8026    toJSON: function toJSON() {
8027      return this.toObject();
8028    }
8029  };
8030};
8031
8032var dinero = Object.assign(Dinero, Defaults, Globals, Static);
8033
8034/* harmony default export */ __webpack_exports__["default"] = (dinero);
8035
8036
8037/***/ }),
8038
vendor: 564 bytes, lines 8039-8060
8039/***/ "./node_modules/is-buffer/index.js":
8040/*!*****************************************!*\
8041  !*** ./node_modules/is-buffer/index.js ***!
8042  \*****************************************/
8043/*! no static exports found */
8044/***/ (function(module, exports) {
8045
8046/*!
8047 * Determine if an object is a Buffer
8048 *
8049 * @author   Feross Aboukhadijeh <https://feross.org>
8050 * @license  MIT
8051 */
8052
8053module.exports = function isBuffer (obj) {
8054  return obj != null && obj.constructor != null &&
8055    typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
8056}
8057
8058
8059/***/ }),
8060
vendor: 285,809 bytes, lines 8061-18788
8061/***/ "./node_modules/jquery/dist/jquery.js":
8062/*!********************************************!*\
8063  !*** ./node_modules/jquery/dist/jquery.js ***!
8064  \********************************************/
8065/*! no static exports found */
8066/***/ (function(module, exports, __webpack_require__) {
8067
8068var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
8069 * jQuery JavaScript Library v3.7.1
8070 * https://jquery.com/
8071 *
8072 * Copyright OpenJS Foundation and other contributors
8073 * Released under the MIT license
8074 * https://jquery.org/license
8075 *
8076 * Date: 2023-08-28T13:37Z
8077 */
8078( function( global, factory ) {
8079
8080	"use strict";
8081
8082	if (  true && typeof module.exports === "object" ) {
8083
8084		// For CommonJS and CommonJS-like environments where a proper `window`
8085		// is present, execute the factory and get jQuery.
8086		// For environments that do not have a `window` with a `document`
8087		// (such as Node.js), expose a factory as module.exports.
8088		// This accentuates the need for the creation of a real `window`.
8089		// e.g. var jQuery = require("jquery")(window);
8090		// See ticket trac-14549 for more info.
8091		module.exports = global.document ?
8092			factory( global, true ) :
8093			function( w ) {
8094				if ( !w.document ) {
8095					throw new Error( "jQuery requires a window with a document" );
8096				}
8097				return factory( w );
8098			};
8099	} else {
8100		factory( global );
8101	}
8102
8103// Pass this if window is not defined yet
8104} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
8105
8106// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
8107// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
8108// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
8109// enough that all such attempts are guarded in a try block.
8110"use strict";
8111
8112var arr = [];
8113
8114var getProto = Object.getPrototypeOf;
8115
8116var slice = arr.slice;
8117
8118var flat = arr.flat ? function( array ) {
8119	return arr.flat.call( array );
8120} : function( array ) {
8121	return arr.concat.apply( [], array );
8122};
8123
8124
8125var push = arr.push;
8126
8127var indexOf = arr.indexOf;
8128
8129var class2type = {};
8130
8131var toString = class2type.toString;
8132
8133var hasOwn = class2type.hasOwnProperty;
8134
8135var fnToString = hasOwn.toString;
8136
8137var ObjectFunctionString = fnToString.call( Object );
8138
8139var support = {};
8140
8141var isFunction = function isFunction( obj ) {
8142
8143		// Support: Chrome <=57, Firefox <=52
8144		// In some browsers, typeof returns "function" for HTML <object> elements
8145		// (i.e., `typeof document.createElement( "object" ) === "function"`).
8146		// We don't want to classify *any* DOM node as a function.
8147		// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
8148		// Plus for old WebKit, typeof returns "function" for HTML collections
8149		// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
8150		return typeof obj === "function" && typeof obj.nodeType !== "number" &&
8151			typeof obj.item !== "function";
8152	};
8153
8154
8155var isWindow = function isWindow( obj ) {
8156		return obj != null && obj === obj.window;
8157	};
8158
8159
8160var document = window.document;
8161
8162
8163
8164	var preservedScriptAttributes = {
8165		type: true,
8166		src: true,
8167		nonce: true,
8168		noModule: true
8169	};
8170
8171	function DOMEval( code, node, doc ) {
8172		doc = doc || document;
8173
8174		var i, val,
8175			script = doc.createElement( "script" );
8176
8177		script.text = code;
8178		if ( node ) {
8179			for ( i in preservedScriptAttributes ) {
8180
8181				// Support: Firefox 64+, Edge 18+
8182				// Some browsers don't support the "nonce" property on scripts.
8183				// On the other hand, just using `getAttribute` is not enough as
8184				// the `nonce` attribute is reset to an empty string whenever it
8185				// becomes browsing-context connected.
8186				// See https://github.com/whatwg/html/issues/2369
8187				// See https://html.spec.whatwg.org/#nonce-attributes
8188				// The `node.getAttribute` check was added for the sake of
8189				// `jQuery.globalEval` so that it can fake a nonce-containing node
8190				// via an object.
8191				val = node[ i ] || node.getAttribute && node.getAttribute( i );
8192				if ( val ) {
8193					script.setAttribute( i, val );
8194				}
8195			}
8196		}
8197		doc.head.appendChild( script ).parentNode.removeChild( script );
8198	}
8199
8200
8201function toType( obj ) {
8202	if ( obj == null ) {
8203		return obj + "";
8204	}
8205
8206	// Support: Android <=2.3 only (functionish RegExp)
8207	return typeof obj === "object" || typeof obj === "function" ?
8208		class2type[ toString.call( obj ) ] || "object" :
8209		typeof obj;
8210}
8211/* global Symbol */
8212// Defining this global in .eslintrc.json would create a danger of using the global
8213// unguarded in another place, it seems safer to define global only for this module
8214
8215
8216
8217var version = "3.7.1",
8218
8219	rhtmlSuffix = /HTML$/i,
8220
8221	// Define a local copy of jQuery
8222	jQuery = function( selector, context ) {
8223
8224		// The jQuery object is actually just the init constructor 'enhanced'
8225		// Need init if jQuery is called (just allow error to be thrown if not included)
8226		return new jQuery.fn.init( selector, context );
8227	};
8228
8229jQuery.fn = jQuery.prototype = {
8230
8231	// The current version of jQuery being used
8232	jquery: version,
8233
8234	constructor: jQuery,
8235
8236	// The default length of a jQuery object is 0
8237	length: 0,
8238
8239	toArray: function() {
8240		return slice.call( this );
8241	},
8242
8243	// Get the Nth element in the matched element set OR
8244	// Get the whole matched element set as a clean array
8245	get: function( num ) {
8246
8247		// Return all the elements in a clean array
8248		if ( num == null ) {
8249			return slice.call( this );
8250		}
8251
8252		// Return just the one element from the set
8253		return num < 0 ? this[ num + this.length ] : this[ num ];
8254	},
8255
8256	// Take an array of elements and push it onto the stack
8257	// (returning the new matched element set)
8258	pushStack: function( elems ) {
8259
8260		// Build a new jQuery matched element set
8261		var ret = jQuery.merge( this.constructor(), elems );
8262
8263		// Add the old object onto the stack (as a reference)
8264		ret.prevObject = this;
8265
8266		// Return the newly-formed element set
8267		return ret;
8268	},
8269
8270	// Execute a callback for every element in the matched set.
8271	each: function( callback ) {
8272		return jQuery.each( this, callback );
8273	},
8274
8275	map: function( callback ) {
8276		return this.pushStack( jQuery.map( this, function( elem, i ) {
8277			return callback.call( elem, i, elem );
8278		} ) );
8279	},
8280
8281	slice: function() {
8282		return this.pushStack( slice.apply( this, arguments ) );
8283	},
8284
8285	first: function() {
8286		return this.eq( 0 );
8287	},
8288
8289	last: function() {
8290		return this.eq( -1 );
8291	},
8292
8293	even: function() {
8294		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
8295			return ( i + 1 ) % 2;
8296		} ) );
8297	},
8298
8299	odd: function() {
8300		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
8301			return i % 2;
8302		} ) );
8303	},
8304
8305	eq: function( i ) {
8306		var len = this.length,
8307			j = +i + ( i < 0 ? len : 0 );
8308		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
8309	},
8310
8311	end: function() {
8312		return this.prevObject || this.constructor();
8313	},
8314
8315	// For internal use only.
8316	// Behaves like an Array's method, not like a jQuery method.
8317	push: push,
8318	sort: arr.sort,
8319	splice: arr.splice
8320};
8321
8322jQuery.extend = jQuery.fn.extend = function() {
8323	var options, name, src, copy, copyIsArray, clone,
8324		target = arguments[ 0 ] || {},
8325		i = 1,
8326		length = arguments.length,
8327		deep = false;
8328
8329	// Handle a deep copy situation
8330	if ( typeof target === "boolean" ) {
8331		deep = target;
8332
8333		// Skip the boolean and the target
8334		target = arguments[ i ] || {};
8335		i++;
8336	}
8337
8338	// Handle case when target is a string or something (possible in deep copy)
8339	if ( typeof target !== "object" && !isFunction( target ) ) {
8340		target = {};
8341	}
8342
8343	// Extend jQuery itself if only one argument is passed
8344	if ( i === length ) {
8345		target = this;
8346		i--;
8347	}
8348
8349	for ( ; i < length; i++ ) {
8350
8351		// Only deal with non-null/undefined values
8352		if ( ( options = arguments[ i ] ) != null ) {
8353
8354			// Extend the base object
8355			for ( name in options ) {
8356				copy = options[ name ];
8357
8358				// Prevent Object.prototype pollution
8359				// Prevent never-ending loop
8360				if ( name === "__proto__" || target === copy ) {
8361					continue;
8362				}
8363
8364				// Recurse if we're merging plain objects or arrays
8365				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
8366					( copyIsArray = Array.isArray( copy ) ) ) ) {
8367					src = target[ name ];
8368
8369					// Ensure proper type for the source value
8370					if ( copyIsArray && !Array.isArray( src ) ) {
8371						clone = [];
8372					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
8373						clone = {};
8374					} else {
8375						clone = src;
8376					}
8377					copyIsArray = false;
8378
8379					// Never move original objects, clone them
8380					target[ name ] = jQuery.extend( deep, clone, copy );
8381
8382				// Don't bring in undefined values
8383				} else if ( copy !== undefined ) {
8384					target[ name ] = copy;
8385				}
8386			}
8387		}
8388	}
8389
8390	// Return the modified object
8391	return target;
8392};
8393
8394jQuery.extend( {
8395
8396	// Unique for each copy of jQuery on the page
8397	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
8398
8399	// Assume jQuery is ready without the ready module
8400	isReady: true,
8401
8402	error: function( msg ) {
8403		throw new Error( msg );
8404	},
8405
8406	noop: function() {},
8407
8408	isPlainObject: function( obj ) {
8409		var proto, Ctor;
8410
8411		// Detect obvious negatives
8412		// Use toString instead of jQuery.type to catch host objects
8413		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
8414			return false;
8415		}
8416
8417		proto = getProto( obj );
8418
8419		// Objects with no prototype (e.g., `Object.create( null )`) are plain
8420		if ( !proto ) {
8421			return true;
8422		}
8423
8424		// Objects with prototype are plain iff they were constructed by a global Object function
8425		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
8426		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
8427	},
8428
8429	isEmptyObject: function( obj ) {
8430		var name;
8431
8432		for ( name in obj ) {
8433			return false;
8434		}
8435		return true;
8436	},
8437
8438	// Evaluates a script in a provided context; falls back to the global one
8439	// if not specified.
8440	globalEval: function( code, options, doc ) {
8441		DOMEval( code, { nonce: options && options.nonce }, doc );
8442	},
8443
8444	each: function( obj, callback ) {
8445		var length, i = 0;
8446
8447		if ( isArrayLike( obj ) ) {
8448			length = obj.length;
8449			for ( ; i < length; i++ ) {
8450				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
8451					break;
8452				}
8453			}
8454		} else {
8455			for ( i in obj ) {
8456				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
8457					break;
8458				}
8459			}
8460		}
8461
8462		return obj;
8463	},
8464
8465
8466	// Retrieve the text value of an array of DOM nodes
8467	text: function( elem ) {
8468		var node,
8469			ret = "",
8470			i = 0,
8471			nodeType = elem.nodeType;
8472
8473		if ( !nodeType ) {
8474
8475			// If no nodeType, this is expected to be an array
8476			while ( ( node = elem[ i++ ] ) ) {
8477
8478				// Do not traverse comment nodes
8479				ret += jQuery.text( node );
8480			}
8481		}
8482		if ( nodeType === 1 || nodeType === 11 ) {
8483			return elem.textContent;
8484		}
8485		if ( nodeType === 9 ) {
8486			return elem.documentElement.textContent;
8487		}
8488		if ( nodeType === 3 || nodeType === 4 ) {
8489			return elem.nodeValue;
8490		}
8491
8492		// Do not include comment or processing instruction nodes
8493
8494		return ret;
8495	},
8496
8497	// results is for internal usage only
8498	makeArray: function( arr, results ) {
8499		var ret = results || [];
8500
8501		if ( arr != null ) {
8502			if ( isArrayLike( Object( arr ) ) ) {
8503				jQuery.merge( ret,
8504					typeof arr === "string" ?
8505						[ arr ] : arr
8506				);
8507			} else {
8508				push.call( ret, arr );
8509			}
8510		}
8511
8512		return ret;
8513	},
8514
8515	inArray: function( elem, arr, i ) {
8516		return arr == null ? -1 : indexOf.call( arr, elem, i );
8517	},
8518
8519	isXMLDoc: function( elem ) {
8520		var namespace = elem && elem.namespaceURI,
8521			docElem = elem && ( elem.ownerDocument || elem ).documentElement;
8522
8523		// Assume HTML when documentElement doesn't yet exist, such as inside
8524		// document fragments.
8525		return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" );
8526	},
8527
8528	// Support: Android <=4.0 only, PhantomJS 1 only
8529	// push.apply(_, arraylike) throws on ancient WebKit
8530	merge: function( first, second ) {
8531		var len = +second.length,
8532			j = 0,
8533			i = first.length;
8534
8535		for ( ; j < len; j++ ) {
8536			first[ i++ ] = second[ j ];
8537		}
8538
8539		first.length = i;
8540
8541		return first;
8542	},
8543
8544	grep: function( elems, callback, invert ) {
8545		var callbackInverse,
8546			matches = [],
8547			i = 0,
8548			length = elems.length,
8549			callbackExpect = !invert;
8550
8551		// Go through the array, only saving the items
8552		// that pass the validator function
8553		for ( ; i < length; i++ ) {
8554			callbackInverse = !callback( elems[ i ], i );
8555			if ( callbackInverse !== callbackExpect ) {
8556				matches.push( elems[ i ] );
8557			}
8558		}
8559
8560		return matches;
8561	},
8562
8563	// arg is for internal usage only
8564	map: function( elems, callback, arg ) {
8565		var length, value,
8566			i = 0,
8567			ret = [];
8568
8569		// Go through the array, translating each of the items to their new values
8570		if ( isArrayLike( elems ) ) {
8571			length = elems.length;
8572			for ( ; i < length; i++ ) {
8573				value = callback( elems[ i ], i, arg );
8574
8575				if ( value != null ) {
8576					ret.push( value );
8577				}
8578			}
8579
8580		// Go through every key on the object,
8581		} else {
8582			for ( i in elems ) {
8583				value = callback( elems[ i ], i, arg );
8584
8585				if ( value != null ) {
8586					ret.push( value );
8587				}
8588			}
8589		}
8590
8591		// Flatten any nested arrays
8592		return flat( ret );
8593	},
8594
8595	// A global GUID counter for objects
8596	guid: 1,
8597
8598	// jQuery.support is not used in Core but other projects attach their
8599	// properties to it so it needs to exist.
8600	support: support
8601} );
8602
8603if ( typeof Symbol === "function" ) {
8604	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
8605}
8606
8607// Populate the class2type map
8608jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
8609	function( _i, name ) {
8610		class2type[ "[object " + name + "]" ] = name.toLowerCase();
8611	} );
8612
8613function isArrayLike( obj ) {
8614
8615	// Support: real iOS 8.2 only (not reproducible in simulator)
8616	// `in` check used to prevent JIT error (gh-2145)
8617	// hasOwn isn't used here due to false negatives
8618	// regarding Nodelist length in IE
8619	var length = !!obj && "length" in obj && obj.length,
8620		type = toType( obj );
8621
8622	if ( isFunction( obj ) || isWindow( obj ) ) {
8623		return false;
8624	}
8625
8626	return type === "array" || length === 0 ||
8627		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
8628}
8629
8630
8631function nodeName( elem, name ) {
8632
8633	return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
8634
8635}
8636var pop = arr.pop;
8637
8638
8639var sort = arr.sort;
8640
8641
8642var splice = arr.splice;
8643
8644
8645var whitespace = "[\\x20\\t\\r\\n\\f]";
8646
8647
8648var rtrimCSS = new RegExp(
8649	"^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
8650	"g"
8651);
8652
8653
8654
8655
8656// Note: an element does not contain itself
8657jQuery.contains = function( a, b ) {
8658	var bup = b && b.parentNode;
8659
8660	return a === bup || !!( bup && bup.nodeType === 1 && (
8661
8662		// Support: IE 9 - 11+
8663		// IE doesn't have `contains` on SVG.
8664		a.contains ?
8665			a.contains( bup ) :
8666			a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
8667	) );
8668};
8669
8670
8671
8672
8673// CSS string/identifier serialization
8674// https://drafts.csswg.org/cssom/#common-serializing-idioms
8675var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
8676
8677function fcssescape( ch, asCodePoint ) {
8678	if ( asCodePoint ) {
8679
8680		// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
8681		if ( ch === "\0" ) {
8682			return "\uFFFD";
8683		}
8684
8685		// Control characters and (dependent upon position) numbers get escaped as code points
8686		return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
8687	}
8688
8689	// Other potentially-special ASCII characters get backslash-escaped
8690	return "\\" + ch;
8691}
8692
8693jQuery.escapeSelector = function( sel ) {
8694	return ( sel + "" ).replace( rcssescape, fcssescape );
8695};
8696
8697
8698
8699
8700var preferredDoc = document,
8701	pushNative = push;
8702
8703( function() {
8704
8705var i,
8706	Expr,
8707	outermostContext,
8708	sortInput,
8709	hasDuplicate,
8710	push = pushNative,
8711
8712	// Local document vars
8713	document,
8714	documentElement,
8715	documentIsHTML,
8716	rbuggyQSA,
8717	matches,
8718
8719	// Instance-specific data
8720	expando = jQuery.expando,
8721	dirruns = 0,
8722	done = 0,
8723	classCache = createCache(),
8724	tokenCache = createCache(),
8725	compilerCache = createCache(),
8726	nonnativeSelectorCache = createCache(),
8727	sortOrder = function( a, b ) {
8728		if ( a === b ) {
8729			hasDuplicate = true;
8730		}
8731		return 0;
8732	},
8733
8734	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" +
8735		"loop|multiple|open|readonly|required|scoped",
8736
8737	// Regular expressions
8738
8739	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
8740	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
8741		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
8742
8743	// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors
8744	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
8745
8746		// Operator (capture 2)
8747		"*([*^$|!~]?=)" + whitespace +
8748
8749		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
8750		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
8751		whitespace + "*\\]",
8752
8753	pseudos = ":(" + identifier + ")(?:\\((" +
8754
8755		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
8756		// 1. quoted (capture 3; capture 4 or capture 5)
8757		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
8758
8759		// 2. simple (capture 6)
8760		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
8761
8762		// 3. anything else (capture 2)
8763		".*" +
8764		")\\)|)",
8765
8766	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
8767	rwhitespace = new RegExp( whitespace + "+", "g" ),
8768
8769	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
8770	rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" +
8771		whitespace + "*" ),
8772	rdescend = new RegExp( whitespace + "|>" ),
8773
8774	rpseudo = new RegExp( pseudos ),
8775	ridentifier = new RegExp( "^" + identifier + "$" ),
8776
8777	matchExpr = {
8778		ID: new RegExp( "^#(" + identifier + ")" ),
8779		CLASS: new RegExp( "^\\.(" + identifier + ")" ),
8780		TAG: new RegExp( "^(" + identifier + "|[*])" ),
8781		ATTR: new RegExp( "^" + attributes ),
8782		PSEUDO: new RegExp( "^" + pseudos ),
8783		CHILD: new RegExp(
8784			"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
8785				whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
8786				whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
8787		bool: new RegExp( "^(?:" + booleans + ")$", "i" ),
8788
8789		// For use in libraries implementing .is()
8790		// We use this for POS matching in `select`
8791		needsContext: new RegExp( "^" + whitespace +
8792			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
8793			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
8794	},
8795
8796	rinputs = /^(?:input|select|textarea|button)$/i,
8797	rheader = /^h\d$/i,
8798
8799	// Easily-parseable/retrievable ID or TAG or CLASS selectors
8800	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
8801
8802	rsibling = /[+~]/,
8803
8804	// CSS escapes
8805	// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters
8806	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace +
8807		"?|\\\\([^\\r\\n\\f])", "g" ),
8808	funescape = function( escape, nonHex ) {
8809		var high = "0x" + escape.slice( 1 ) - 0x10000;
8810
8811		if ( nonHex ) {
8812
8813			// Strip the backslash prefix from a non-hex escape sequence
8814			return nonHex;
8815		}
8816
8817		// Replace a hexadecimal escape sequence with the encoded Unicode code point
8818		// Support: IE <=11+
8819		// For values outside the Basic Multilingual Plane (BMP), manually construct a
8820		// surrogate pair
8821		return high < 0 ?
8822			String.fromCharCode( high + 0x10000 ) :
8823			String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
8824	},
8825
8826	// Used for iframes; see `setDocument`.
8827	// Support: IE 9 - 11+, Edge 12 - 18+
8828	// Removing the function wrapper causes a "Permission Denied"
8829	// error in IE/Edge.
8830	unloadHandler = function() {
8831		setDocument();
8832	},
8833
8834	inDisabledFieldset = addCombinator(
8835		function( elem ) {
8836			return elem.disabled === true && nodeName( elem, "fieldset" );
8837		},
8838		{ dir: "parentNode", next: "legend" }
8839	);
8840
8841// Support: IE <=9 only
8842// Accessing document.activeElement can throw unexpectedly
8843// https://bugs.jquery.com/ticket/13393
8844function safeActiveElement() {
8845	try {
8846		return document.activeElement;
8847	} catch ( err ) { }
8848}
8849
8850// Optimize for push.apply( _, NodeList )
8851try {
8852	push.apply(
8853		( arr = slice.call( preferredDoc.childNodes ) ),
8854		preferredDoc.childNodes
8855	);
8856
8857	// Support: Android <=4.0
8858	// Detect silently failing push.apply
8859	// eslint-disable-next-line no-unused-expressions
8860	arr[ preferredDoc.childNodes.length ].nodeType;
8861} catch ( e ) {
8862	push = {
8863		apply: function( target, els ) {
8864			pushNative.apply( target, slice.call( els ) );
8865		},
8866		call: function( target ) {
8867			pushNative.apply( target, slice.call( arguments, 1 ) );
8868		}
8869	};
8870}
8871
8872function find( selector, context, results, seed ) {
8873	var m, i, elem, nid, match, groups, newSelector,
8874		newContext = context && context.ownerDocument,
8875
8876		// nodeType defaults to 9, since context defaults to document
8877		nodeType = context ? context.nodeType : 9;
8878
8879	results = results || [];
8880
8881	// Return early from calls with invalid selector or context
8882	if ( typeof selector !== "string" || !selector ||
8883		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
8884
8885		return results;
8886	}
8887
8888	// Try to shortcut find operations (as opposed to filters) in HTML documents
8889	if ( !seed ) {
8890		setDocument( context );
8891		context = context || document;
8892
8893		if ( documentIsHTML ) {
8894
8895			// If the selector is sufficiently simple, try using a "get*By*" DOM method
8896			// (excepting DocumentFragment context, where the methods don't exist)
8897			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
8898
8899				// ID selector
8900				if ( ( m = match[ 1 ] ) ) {
8901
8902					// Document context
8903					if ( nodeType === 9 ) {
8904						if ( ( elem = context.getElementById( m ) ) ) {
8905
8906							// Support: IE 9 only
8907							// getElementById can match elements by name instead of ID
8908							if ( elem.id === m ) {
8909								push.call( results, elem );
8910								return results;
8911							}
8912						} else {
8913							return results;
8914						}
8915
8916					// Element context
8917					} else {
8918
8919						// Support: IE 9 only
8920						// getElementById can match elements by name instead of ID
8921						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
8922							find.contains( context, elem ) &&
8923							elem.id === m ) {
8924
8925							push.call( results, elem );
8926							return results;
8927						}
8928					}
8929
8930				// Type selector
8931				} else if ( match[ 2 ] ) {
8932					push.apply( results, context.getElementsByTagName( selector ) );
8933					return results;
8934
8935				// Class selector
8936				} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {
8937					push.apply( results, context.getElementsByClassName( m ) );
8938					return results;
8939				}
8940			}
8941
8942			// Take advantage of querySelectorAll
8943			if ( !nonnativeSelectorCache[ selector + " " ] &&
8944				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {
8945
8946				newSelector = selector;
8947				newContext = context;
8948
8949				// qSA considers elements outside a scoping root when evaluating child or
8950				// descendant combinators, which is not what we want.
8951				// In such cases, we work around the behavior by prefixing every selector in the
8952				// list with an ID selector referencing the scope context.
8953				// The technique has to be used as well when a leading combinator is used
8954				// as such selectors are not recognized by querySelectorAll.
8955				// Thanks to Andrew Dupont for this technique.
8956				if ( nodeType === 1 &&
8957					( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
8958
8959					// Expand context for sibling selectors
8960					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
8961						context;
8962
8963					// We can use :scope instead of the ID hack if the browser
8964					// supports it & if we're not changing the context.
8965					// Support: IE 11+, Edge 17 - 18+
8966					// IE/Edge sometimes throw a "Permission denied" error when
8967					// strict-comparing two documents; shallow comparisons work.
8968					// eslint-disable-next-line eqeqeq
8969					if ( newContext != context || !support.scope ) {
8970
8971						// Capture the context ID, setting it first if necessary
8972						if ( ( nid = context.getAttribute( "id" ) ) ) {
8973							nid = jQuery.escapeSelector( nid );
8974						} else {
8975							context.setAttribute( "id", ( nid = expando ) );
8976						}
8977					}
8978
8979					// Prefix every selector in the list
8980					groups = tokenize( selector );
8981					i = groups.length;
8982					while ( i-- ) {
8983						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
8984							toSelector( groups[ i ] );
8985					}
8986					newSelector = groups.join( "," );
8987				}
8988
8989				try {
8990					push.apply( results,
8991						newContext.querySelectorAll( newSelector )
8992					);
8993					return results;
8994				} catch ( qsaError ) {
8995					nonnativeSelectorCache( selector, true );
8996				} finally {
8997					if ( nid === expando ) {
8998						context.removeAttribute( "id" );
8999					}
9000				}
9001			}
9002		}
9003	}
9004
9005	// All others
9006	return select( selector.replace( rtrimCSS, "$1" ), context, results, seed );
9007}
9008
9009/**
9010 * Create key-value caches of limited size
9011 * @returns {function(string, object)} Returns the Object data after storing it on itself with
9012 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
9013 *	deleting the oldest entry
9014 */
9015function createCache() {
9016	var keys = [];
9017
9018	function cache( key, value ) {
9019
9020		// Use (key + " ") to avoid collision with native prototype properties
9021		// (see https://github.com/jquery/sizzle/issues/157)
9022		if ( keys.push( key + " " ) > Expr.cacheLength ) {
9023
9024			// Only keep the most recent entries
9025			delete cache[ keys.shift() ];
9026		}
9027		return ( cache[ key + " " ] = value );
9028	}
9029	return cache;
9030}
9031
9032/**
9033 * Mark a function for special use by jQuery selector module
9034 * @param {Function} fn The function to mark
9035 */
9036function markFunction( fn ) {
9037	fn[ expando ] = true;
9038	return fn;
9039}
9040
9041/**
9042 * Support testing using an element
9043 * @param {Function} fn Passed the created element and returns a boolean result
9044 */
9045function assert( fn ) {
9046	var el = document.createElement( "fieldset" );
9047
9048	try {
9049		return !!fn( el );
9050	} catch ( e ) {
9051		return false;
9052	} finally {
9053
9054		// Remove from its parent by default
9055		if ( el.parentNode ) {
9056			el.parentNode.removeChild( el );
9057		}
9058
9059		// release memory in IE
9060		el = null;
9061	}
9062}
9063
9064/**
9065 * Returns a function to use in pseudos for input types
9066 * @param {String} type
9067 */
9068function createInputPseudo( type ) {
9069	return function( elem ) {
9070		return nodeName( elem, "input" ) && elem.type === type;
9071	};
9072}
9073
9074/**
9075 * Returns a function to use in pseudos for buttons
9076 * @param {String} type
9077 */
9078function createButtonPseudo( type ) {
9079	return function( elem ) {
9080		return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) &&
9081			elem.type === type;
9082	};
9083}
9084
9085/**
9086 * Returns a function to use in pseudos for :enabled/:disabled
9087 * @param {Boolean} disabled true for :disabled; false for :enabled
9088 */
9089function createDisabledPseudo( disabled ) {
9090
9091	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
9092	return function( elem ) {
9093
9094		// Only certain elements can match :enabled or :disabled
9095		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
9096		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
9097		if ( "form" in elem ) {
9098
9099			// Check for inherited disabledness on relevant non-disabled elements:
9100			// * listed form-associated elements in a disabled fieldset
9101			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
9102			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
9103			// * option elements in a disabled optgroup
9104			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
9105			// All such elements have a "form" property.
9106			if ( elem.parentNode && elem.disabled === false ) {
9107
9108				// Option elements defer to a parent optgroup if present
9109				if ( "label" in elem ) {
9110					if ( "label" in elem.parentNode ) {
9111						return elem.parentNode.disabled === disabled;
9112					} else {
9113						return elem.disabled === disabled;
9114					}
9115				}
9116
9117				// Support: IE 6 - 11+
9118				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
9119				return elem.isDisabled === disabled ||
9120
9121					// Where there is no isDisabled, check manually
9122					elem.isDisabled !== !disabled &&
9123						inDisabledFieldset( elem ) === disabled;
9124			}
9125
9126			return elem.disabled === disabled;
9127
9128		// Try to winnow out elements that can't be disabled before trusting the disabled property.
9129		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
9130		// even exist on them, let alone have a boolean value.
9131		} else if ( "label" in elem ) {
9132			return elem.disabled === disabled;
9133		}
9134
9135		// Remaining elements are neither :enabled nor :disabled
9136		return false;
9137	};
9138}
9139
9140/**
9141 * Returns a function to use in pseudos for positionals
9142 * @param {Function} fn
9143 */
9144function createPositionalPseudo( fn ) {
9145	return markFunction( function( argument ) {
9146		argument = +argument;
9147		return markFunction( function( seed, matches ) {
9148			var j,
9149				matchIndexes = fn( [], seed.length, argument ),
9150				i = matchIndexes.length;
9151
9152			// Match elements found at the specified indexes
9153			while ( i-- ) {
9154				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
9155					seed[ j ] = !( matches[ j ] = seed[ j ] );
9156				}
9157			}
9158		} );
9159	} );
9160}
9161
9162/**
9163 * Checks a node for validity as a jQuery selector context
9164 * @param {Element|Object=} context
9165 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
9166 */
9167function testContext( context ) {
9168	return context && typeof context.getElementsByTagName !== "undefined" && context;
9169}
9170
9171/**
9172 * Sets document-related variables once based on the current document
9173 * @param {Element|Object} [node] An element or document object to use to set the document
9174 * @returns {Object} Returns the current document
9175 */
9176function setDocument( node ) {
9177	var subWindow,
9178		doc = node ? node.ownerDocument || node : preferredDoc;
9179
9180	// Return early if doc is invalid or already selected
9181	// Support: IE 11+, Edge 17 - 18+
9182	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9183	// two documents; shallow comparisons work.
9184	// eslint-disable-next-line eqeqeq
9185	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
9186		return document;
9187	}
9188
9189	// Update global variables
9190	document = doc;
9191	documentElement = document.documentElement;
9192	documentIsHTML = !jQuery.isXMLDoc( document );
9193
9194	// Support: iOS 7 only, IE 9 - 11+
9195	// Older browsers didn't support unprefixed `matches`.
9196	matches = documentElement.matches ||
9197		documentElement.webkitMatchesSelector ||
9198		documentElement.msMatchesSelector;
9199
9200	// Support: IE 9 - 11+, Edge 12 - 18+
9201	// Accessing iframe documents after unload throws "permission denied" errors
9202	// (see trac-13936).
9203	// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,
9204	// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.
9205	if ( documentElement.msMatchesSelector &&
9206
9207		// Support: IE 11+, Edge 17 - 18+
9208		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9209		// two documents; shallow comparisons work.
9210		// eslint-disable-next-line eqeqeq
9211		preferredDoc != document &&
9212		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
9213
9214		// Support: IE 9 - 11+, Edge 12 - 18+
9215		subWindow.addEventListener( "unload", unloadHandler );
9216	}
9217
9218	// Support: IE <10
9219	// Check if getElementById returns elements by name
9220	// The broken getElementById methods don't pick up programmatically-set names,
9221	// so use a roundabout getElementsByName test
9222	support.getById = assert( function( el ) {
9223		documentElement.appendChild( el ).id = jQuery.expando;
9224		return !document.getElementsByName ||
9225			!document.getElementsByName( jQuery.expando ).length;
9226	} );
9227
9228	// Support: IE 9 only
9229	// Check to see if it's possible to do matchesSelector
9230	// on a disconnected node.
9231	support.disconnectedMatch = assert( function( el ) {
9232		return matches.call( el, "*" );
9233	} );
9234
9235	// Support: IE 9 - 11+, Edge 12 - 18+
9236	// IE/Edge don't support the :scope pseudo-class.
9237	support.scope = assert( function() {
9238		return document.querySelectorAll( ":scope" );
9239	} );
9240
9241	// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only
9242	// Make sure the `:has()` argument is parsed unforgivingly.
9243	// We include `*` in the test to detect buggy implementations that are
9244	// _selectively_ forgiving (specifically when the list includes at least
9245	// one valid selector).
9246	// Note that we treat complete lack of support for `:has()` as if it were
9247	// spec-compliant support, which is fine because use of `:has()` in such
9248	// environments will fail in the qSA path and fall back to jQuery traversal
9249	// anyway.
9250	support.cssHas = assert( function() {
9251		try {
9252			document.querySelector( ":has(*,:jqfake)" );
9253			return false;
9254		} catch ( e ) {
9255			return true;
9256		}
9257	} );
9258
9259	// ID filter and find
9260	if ( support.getById ) {
9261		Expr.filter.ID = function( id ) {
9262			var attrId = id.replace( runescape, funescape );
9263			return function( elem ) {
9264				return elem.getAttribute( "id" ) === attrId;
9265			};
9266		};
9267		Expr.find.ID = function( id, context ) {
9268			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
9269				var elem = context.getElementById( id );
9270				return elem ? [ elem ] : [];
9271			}
9272		};
9273	} else {
9274		Expr.filter.ID =  function( id ) {
9275			var attrId = id.replace( runescape, funescape );
9276			return function( elem ) {
9277				var node = typeof elem.getAttributeNode !== "undefined" &&
9278					elem.getAttributeNode( "id" );
9279				return node && node.value === attrId;
9280			};
9281		};
9282
9283		// Support: IE 6 - 7 only
9284		// getElementById is not reliable as a find shortcut
9285		Expr.find.ID = function( id, context ) {
9286			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
9287				var node, i, elems,
9288					elem = context.getElementById( id );
9289
9290				if ( elem ) {
9291
9292					// Verify the id attribute
9293					node = elem.getAttributeNode( "id" );
9294					if ( node && node.value === id ) {
9295						return [ elem ];
9296					}
9297
9298					// Fall back on getElementsByName
9299					elems = context.getElementsByName( id );
9300					i = 0;
9301					while ( ( elem = elems[ i++ ] ) ) {
9302						node = elem.getAttributeNode( "id" );
9303						if ( node && node.value === id ) {
9304							return [ elem ];
9305						}
9306					}
9307				}
9308
9309				return [];
9310			}
9311		};
9312	}
9313
9314	// Tag
9315	Expr.find.TAG = function( tag, context ) {
9316		if ( typeof context.getElementsByTagName !== "undefined" ) {
9317			return context.getElementsByTagName( tag );
9318
9319		// DocumentFragment nodes don't have gEBTN
9320		} else {
9321			return context.querySelectorAll( tag );
9322		}
9323	};
9324
9325	// Class
9326	Expr.find.CLASS = function( className, context ) {
9327		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
9328			return context.getElementsByClassName( className );
9329		}
9330	};
9331
9332	/* QSA/matchesSelector
9333	---------------------------------------------------------------------- */
9334
9335	// QSA and matchesSelector support
9336
9337	rbuggyQSA = [];
9338
9339	// Build QSA regex
9340	// Regex strategy adopted from Diego Perini
9341	assert( function( el ) {
9342
9343		var input;
9344
9345		documentElement.appendChild( el ).innerHTML =
9346			"<a id='" + expando + "' href='' disabled='disabled'></a>" +
9347			"<select id='" + expando + "-\r\\' disabled='disabled'>" +
9348			"<option selected=''></option></select>";
9349
9350		// Support: iOS <=7 - 8 only
9351		// Boolean attributes and "value" are not treated correctly in some XML documents
9352		if ( !el.querySelectorAll( "[selected]" ).length ) {
9353			rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
9354		}
9355
9356		// Support: iOS <=7 - 8 only
9357		if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
9358			rbuggyQSA.push( "~=" );
9359		}
9360
9361		// Support: iOS 8 only
9362		// https://bugs.webkit.org/show_bug.cgi?id=136851
9363		// In-page `selector#id sibling-combinator selector` fails
9364		if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
9365			rbuggyQSA.push( ".#.+[+~]" );
9366		}
9367
9368		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
9369		// In some of the document kinds, these selectors wouldn't work natively.
9370		// This is probably OK but for backwards compatibility we want to maintain
9371		// handling them through jQuery traversal in jQuery 3.x.
9372		if ( !el.querySelectorAll( ":checked" ).length ) {
9373			rbuggyQSA.push( ":checked" );
9374		}
9375
9376		// Support: Windows 8 Native Apps
9377		// The type and name attributes are restricted during .innerHTML assignment
9378		input = document.createElement( "input" );
9379		input.setAttribute( "type", "hidden" );
9380		el.appendChild( input ).setAttribute( "name", "D" );
9381
9382		// Support: IE 9 - 11+
9383		// IE's :disabled selector does not pick up the children of disabled fieldsets
9384		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
9385		// In some of the document kinds, these selectors wouldn't work natively.
9386		// This is probably OK but for backwards compatibility we want to maintain
9387		// handling them through jQuery traversal in jQuery 3.x.
9388		documentElement.appendChild( el ).disabled = true;
9389		if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
9390			rbuggyQSA.push( ":enabled", ":disabled" );
9391		}
9392
9393		// Support: IE 11+, Edge 15 - 18+
9394		// IE 11/Edge don't find elements on a `[name='']` query in some cases.
9395		// Adding a temporary attribute to the document before the selection works
9396		// around the issue.
9397		// Interestingly, IE 10 & older don't seem to have the issue.
9398		input = document.createElement( "input" );
9399		input.setAttribute( "name", "" );
9400		el.appendChild( input );
9401		if ( !el.querySelectorAll( "[name='']" ).length ) {
9402			rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
9403				whitespace + "*(?:''|\"\")" );
9404		}
9405	} );
9406
9407	if ( !support.cssHas ) {
9408
9409		// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
9410		// Our regular `try-catch` mechanism fails to detect natively-unsupported
9411		// pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)
9412		// in browsers that parse the `:has()` argument as a forgiving selector list.
9413		// https://drafts.csswg.org/selectors/#relational now requires the argument
9414		// to be parsed unforgivingly, but browsers have not yet fully adjusted.
9415		rbuggyQSA.push( ":has" );
9416	}
9417
9418	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
9419
9420	/* Sorting
9421	---------------------------------------------------------------------- */
9422
9423	// Document order sorting
9424	sortOrder = function( a, b ) {
9425
9426		// Flag for duplicate removal
9427		if ( a === b ) {
9428			hasDuplicate = true;
9429			return 0;
9430		}
9431
9432		// Sort on method existence if only one input has compareDocumentPosition
9433		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
9434		if ( compare ) {
9435			return compare;
9436		}
9437
9438		// Calculate position if both inputs belong to the same document
9439		// Support: IE 11+, Edge 17 - 18+
9440		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9441		// two documents; shallow comparisons work.
9442		// eslint-disable-next-line eqeqeq
9443		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
9444			a.compareDocumentPosition( b ) :
9445
9446			// Otherwise we know they are disconnected
9447			1;
9448
9449		// Disconnected nodes
9450		if ( compare & 1 ||
9451			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
9452
9453			// Choose the first element that is related to our preferred document
9454			// Support: IE 11+, Edge 17 - 18+
9455			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9456			// two documents; shallow comparisons work.
9457			// eslint-disable-next-line eqeqeq
9458			if ( a === document || a.ownerDocument == preferredDoc &&
9459				find.contains( preferredDoc, a ) ) {
9460				return -1;
9461			}
9462
9463			// Support: IE 11+, Edge 17 - 18+
9464			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9465			// two documents; shallow comparisons work.
9466			// eslint-disable-next-line eqeqeq
9467			if ( b === document || b.ownerDocument == preferredDoc &&
9468				find.contains( preferredDoc, b ) ) {
9469				return 1;
9470			}
9471
9472			// Maintain original order
9473			return sortInput ?
9474				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
9475				0;
9476		}
9477
9478		return compare & 4 ? -1 : 1;
9479	};
9480
9481	return document;
9482}
9483
9484find.matches = function( expr, elements ) {
9485	return find( expr, null, null, elements );
9486};
9487
9488find.matchesSelector = function( elem, expr ) {
9489	setDocument( elem );
9490
9491	if ( documentIsHTML &&
9492		!nonnativeSelectorCache[ expr + " " ] &&
9493		( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
9494
9495		try {
9496			var ret = matches.call( elem, expr );
9497
9498			// IE 9's matchesSelector returns false on disconnected nodes
9499			if ( ret || support.disconnectedMatch ||
9500
9501					// As well, disconnected nodes are said to be in a document
9502					// fragment in IE 9
9503					elem.document && elem.document.nodeType !== 11 ) {
9504				return ret;
9505			}
9506		} catch ( e ) {
9507			nonnativeSelectorCache( expr, true );
9508		}
9509	}
9510
9511	return find( expr, document, null, [ elem ] ).length > 0;
9512};
9513
9514find.contains = function( context, elem ) {
9515
9516	// Set document vars if needed
9517	// Support: IE 11+, Edge 17 - 18+
9518	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9519	// two documents; shallow comparisons work.
9520	// eslint-disable-next-line eqeqeq
9521	if ( ( context.ownerDocument || context ) != document ) {
9522		setDocument( context );
9523	}
9524	return jQuery.contains( context, elem );
9525};
9526
9527
9528find.attr = function( elem, name ) {
9529
9530	// Set document vars if needed
9531	// Support: IE 11+, Edge 17 - 18+
9532	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9533	// two documents; shallow comparisons work.
9534	// eslint-disable-next-line eqeqeq
9535	if ( ( elem.ownerDocument || elem ) != document ) {
9536		setDocument( elem );
9537	}
9538
9539	var fn = Expr.attrHandle[ name.toLowerCase() ],
9540
9541		// Don't get fooled by Object.prototype properties (see trac-13807)
9542		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
9543			fn( elem, name, !documentIsHTML ) :
9544			undefined;
9545
9546	if ( val !== undefined ) {
9547		return val;
9548	}
9549
9550	return elem.getAttribute( name );
9551};
9552
9553find.error = function( msg ) {
9554	throw new Error( "Syntax error, unrecognized expression: " + msg );
9555};
9556
9557/**
9558 * Document sorting and removing duplicates
9559 * @param {ArrayLike} results
9560 */
9561jQuery.uniqueSort = function( results ) {
9562	var elem,
9563		duplicates = [],
9564		j = 0,
9565		i = 0;
9566
9567	// Unless we *know* we can detect duplicates, assume their presence
9568	//
9569	// Support: Android <=4.0+
9570	// Testing for detecting duplicates is unpredictable so instead assume we can't
9571	// depend on duplicate detection in all browsers without a stable sort.
9572	hasDuplicate = !support.sortStable;
9573	sortInput = !support.sortStable && slice.call( results, 0 );
9574	sort.call( results, sortOrder );
9575
9576	if ( hasDuplicate ) {
9577		while ( ( elem = results[ i++ ] ) ) {
9578			if ( elem === results[ i ] ) {
9579				j = duplicates.push( i );
9580			}
9581		}
9582		while ( j-- ) {
9583			splice.call( results, duplicates[ j ], 1 );
9584		}
9585	}
9586
9587	// Clear input after sorting to release objects
9588	// See https://github.com/jquery/sizzle/pull/225
9589	sortInput = null;
9590
9591	return results;
9592};
9593
9594jQuery.fn.uniqueSort = function() {
9595	return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );
9596};
9597
9598Expr = jQuery.expr = {
9599
9600	// Can be adjusted by the user
9601	cacheLength: 50,
9602
9603	createPseudo: markFunction,
9604
9605	match: matchExpr,
9606
9607	attrHandle: {},
9608
9609	find: {},
9610
9611	relative: {
9612		">": { dir: "parentNode", first: true },
9613		" ": { dir: "parentNode" },
9614		"+": { dir: "previousSibling", first: true },
9615		"~": { dir: "previousSibling" }
9616	},
9617
9618	preFilter: {
9619		ATTR: function( match ) {
9620			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
9621
9622			// Move the given value to match[3] whether quoted or unquoted
9623			match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" )
9624				.replace( runescape, funescape );
9625
9626			if ( match[ 2 ] === "~=" ) {
9627				match[ 3 ] = " " + match[ 3 ] + " ";
9628			}
9629
9630			return match.slice( 0, 4 );
9631		},
9632
9633		CHILD: function( match ) {
9634
9635			/* matches from matchExpr["CHILD"]
9636				1 type (only|nth|...)
9637				2 what (child|of-type)
9638				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
9639				4 xn-component of xn+y argument ([+-]?\d*n|)
9640				5 sign of xn-component
9641				6 x of xn-component
9642				7 sign of y-component
9643				8 y of y-component
9644			*/
9645			match[ 1 ] = match[ 1 ].toLowerCase();
9646
9647			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
9648
9649				// nth-* requires argument
9650				if ( !match[ 3 ] ) {
9651					find.error( match[ 0 ] );
9652				}
9653
9654				// numeric x and y parameters for Expr.filter.CHILD
9655				// remember that false/true cast respectively to 0/1
9656				match[ 4 ] = +( match[ 4 ] ?
9657					match[ 5 ] + ( match[ 6 ] || 1 ) :
9658					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" )
9659				);
9660				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
9661
9662			// other types prohibit arguments
9663			} else if ( match[ 3 ] ) {
9664				find.error( match[ 0 ] );
9665			}
9666
9667			return match;
9668		},
9669
9670		PSEUDO: function( match ) {
9671			var excess,
9672				unquoted = !match[ 6 ] && match[ 2 ];
9673
9674			if ( matchExpr.CHILD.test( match[ 0 ] ) ) {
9675				return null;
9676			}
9677
9678			// Accept quoted arguments as-is
9679			if ( match[ 3 ] ) {
9680				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
9681
9682			// Strip excess characters from unquoted arguments
9683			} else if ( unquoted && rpseudo.test( unquoted ) &&
9684
9685				// Get excess from tokenize (recursively)
9686				( excess = tokenize( unquoted, true ) ) &&
9687
9688				// advance to the next closing parenthesis
9689				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
9690
9691				// excess is a negative index
9692				match[ 0 ] = match[ 0 ].slice( 0, excess );
9693				match[ 2 ] = unquoted.slice( 0, excess );
9694			}
9695
9696			// Return only captures needed by the pseudo filter method (type and argument)
9697			return match.slice( 0, 3 );
9698		}
9699	},
9700
9701	filter: {
9702
9703		TAG: function( nodeNameSelector ) {
9704			var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
9705			return nodeNameSelector === "*" ?
9706				function() {
9707					return true;
9708				} :
9709				function( elem ) {
9710					return nodeName( elem, expectedNodeName );
9711				};
9712		},
9713
9714		CLASS: function( className ) {
9715			var pattern = classCache[ className + " " ];
9716
9717			return pattern ||
9718				( pattern = new RegExp( "(^|" + whitespace + ")" + className +
9719					"(" + whitespace + "|$)" ) ) &&
9720				classCache( className, function( elem ) {
9721					return pattern.test(
9722						typeof elem.className === "string" && elem.className ||
9723							typeof elem.getAttribute !== "undefined" &&
9724								elem.getAttribute( "class" ) ||
9725							""
9726					);
9727				} );
9728		},
9729
9730		ATTR: function( name, operator, check ) {
9731			return function( elem ) {
9732				var result = find.attr( elem, name );
9733
9734				if ( result == null ) {
9735					return operator === "!=";
9736				}
9737				if ( !operator ) {
9738					return true;
9739				}
9740
9741				result += "";
9742
9743				if ( operator === "=" ) {
9744					return result === check;
9745				}
9746				if ( operator === "!=" ) {
9747					return result !== check;
9748				}
9749				if ( operator === "^=" ) {
9750					return check && result.indexOf( check ) === 0;
9751				}
9752				if ( operator === "*=" ) {
9753					return check && result.indexOf( check ) > -1;
9754				}
9755				if ( operator === "$=" ) {
9756					return check && result.slice( -check.length ) === check;
9757				}
9758				if ( operator === "~=" ) {
9759					return ( " " + result.replace( rwhitespace, " " ) + " " )
9760						.indexOf( check ) > -1;
9761				}
9762				if ( operator === "|=" ) {
9763					return result === check || result.slice( 0, check.length + 1 ) === check + "-";
9764				}
9765
9766				return false;
9767			};
9768		},
9769
9770		CHILD: function( type, what, _argument, first, last ) {
9771			var simple = type.slice( 0, 3 ) !== "nth",
9772				forward = type.slice( -4 ) !== "last",
9773				ofType = what === "of-type";
9774
9775			return first === 1 && last === 0 ?
9776
9777				// Shortcut for :nth-*(n)
9778				function( elem ) {
9779					return !!elem.parentNode;
9780				} :
9781
9782				function( elem, _context, xml ) {
9783					var cache, outerCache, node, nodeIndex, start,
9784						dir = simple !== forward ? "nextSibling" : "previousSibling",
9785						parent = elem.parentNode,
9786						name = ofType && elem.nodeName.toLowerCase(),
9787						useCache = !xml && !ofType,
9788						diff = false;
9789
9790					if ( parent ) {
9791
9792						// :(first|last|only)-(child|of-type)
9793						if ( simple ) {
9794							while ( dir ) {
9795								node = elem;
9796								while ( ( node = node[ dir ] ) ) {
9797									if ( ofType ?
9798										nodeName( node, name ) :
9799										node.nodeType === 1 ) {
9800
9801										return false;
9802									}
9803								}
9804
9805								// Reverse direction for :only-* (if we haven't yet done so)
9806								start = dir = type === "only" && !start && "nextSibling";
9807							}
9808							return true;
9809						}
9810
9811						start = [ forward ? parent.firstChild : parent.lastChild ];
9812
9813						// non-xml :nth-child(...) stores cache data on `parent`
9814						if ( forward && useCache ) {
9815
9816							// Seek `elem` from a previously-cached index
9817							outerCache = parent[ expando ] || ( parent[ expando ] = {} );
9818							cache = outerCache[ type ] || [];
9819							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
9820							diff = nodeIndex && cache[ 2 ];
9821							node = nodeIndex && parent.childNodes[ nodeIndex ];
9822
9823							while ( ( node = ++nodeIndex && node && node[ dir ] ||
9824
9825								// Fallback to seeking `elem` from the start
9826								( diff = nodeIndex = 0 ) || start.pop() ) ) {
9827
9828								// When found, cache indexes on `parent` and break
9829								if ( node.nodeType === 1 && ++diff && node === elem ) {
9830									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
9831									break;
9832								}
9833							}
9834
9835						} else {
9836
9837							// Use previously-cached element index if available
9838							if ( useCache ) {
9839								outerCache = elem[ expando ] || ( elem[ expando ] = {} );
9840								cache = outerCache[ type ] || [];
9841								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
9842								diff = nodeIndex;
9843							}
9844
9845							// xml :nth-child(...)
9846							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
9847							if ( diff === false ) {
9848
9849								// Use the same loop as above to seek `elem` from the start
9850								while ( ( node = ++nodeIndex && node && node[ dir ] ||
9851									( diff = nodeIndex = 0 ) || start.pop() ) ) {
9852
9853									if ( ( ofType ?
9854										nodeName( node, name ) :
9855										node.nodeType === 1 ) &&
9856										++diff ) {
9857
9858										// Cache the index of each encountered element
9859										if ( useCache ) {
9860											outerCache = node[ expando ] ||
9861												( node[ expando ] = {} );
9862											outerCache[ type ] = [ dirruns, diff ];
9863										}
9864
9865										if ( node === elem ) {
9866											break;
9867										}
9868									}
9869								}
9870							}
9871						}
9872
9873						// Incorporate the offset, then check against cycle size
9874						diff -= last;
9875						return diff === first || ( diff % first === 0 && diff / first >= 0 );
9876					}
9877				};
9878		},
9879
9880		PSEUDO: function( pseudo, argument ) {
9881
9882			// pseudo-class names are case-insensitive
9883			// https://www.w3.org/TR/selectors/#pseudo-classes
9884			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
9885			// Remember that setFilters inherits from pseudos
9886			var args,
9887				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
9888					find.error( "unsupported pseudo: " + pseudo );
9889
9890			// The user may use createPseudo to indicate that
9891			// arguments are needed to create the filter function
9892			// just as jQuery does
9893			if ( fn[ expando ] ) {
9894				return fn( argument );
9895			}
9896
9897			// But maintain support for old signatures
9898			if ( fn.length > 1 ) {
9899				args = [ pseudo, pseudo, "", argument ];
9900				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
9901					markFunction( function( seed, matches ) {
9902						var idx,
9903							matched = fn( seed, argument ),
9904							i = matched.length;
9905						while ( i-- ) {
9906							idx = indexOf.call( seed, matched[ i ] );
9907							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
9908						}
9909					} ) :
9910					function( elem ) {
9911						return fn( elem, 0, args );
9912					};
9913			}
9914
9915			return fn;
9916		}
9917	},
9918
9919	pseudos: {
9920
9921		// Potentially complex pseudos
9922		not: markFunction( function( selector ) {
9923
9924			// Trim the selector passed to compile
9925			// to avoid treating leading and trailing
9926			// spaces as combinators
9927			var input = [],
9928				results = [],
9929				matcher = compile( selector.replace( rtrimCSS, "$1" ) );
9930
9931			return matcher[ expando ] ?
9932				markFunction( function( seed, matches, _context, xml ) {
9933					var elem,
9934						unmatched = matcher( seed, null, xml, [] ),
9935						i = seed.length;
9936
9937					// Match elements unmatched by `matcher`
9938					while ( i-- ) {
9939						if ( ( elem = unmatched[ i ] ) ) {
9940							seed[ i ] = !( matches[ i ] = elem );
9941						}
9942					}
9943				} ) :
9944				function( elem, _context, xml ) {
9945					input[ 0 ] = elem;
9946					matcher( input, null, xml, results );
9947
9948					// Don't keep the element
9949					// (see https://github.com/jquery/sizzle/issues/299)
9950					input[ 0 ] = null;
9951					return !results.pop();
9952				};
9953		} ),
9954
9955		has: markFunction( function( selector ) {
9956			return function( elem ) {
9957				return find( selector, elem ).length > 0;
9958			};
9959		} ),
9960
9961		contains: markFunction( function( text ) {
9962			text = text.replace( runescape, funescape );
9963			return function( elem ) {
9964				return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;
9965			};
9966		} ),
9967
9968		// "Whether an element is represented by a :lang() selector
9969		// is based solely on the element's language value
9970		// being equal to the identifier C,
9971		// or beginning with the identifier C immediately followed by "-".
9972		// The matching of C against the element's language value is performed case-insensitively.
9973		// The identifier C does not have to be a valid language name."
9974		// https://www.w3.org/TR/selectors/#lang-pseudo
9975		lang: markFunction( function( lang ) {
9976
9977			// lang value must be a valid identifier
9978			if ( !ridentifier.test( lang || "" ) ) {
9979				find.error( "unsupported lang: " + lang );
9980			}
9981			lang = lang.replace( runescape, funescape ).toLowerCase();
9982			return function( elem ) {
9983				var elemLang;
9984				do {
9985					if ( ( elemLang = documentIsHTML ?
9986						elem.lang :
9987						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
9988
9989						elemLang = elemLang.toLowerCase();
9990						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
9991					}
9992				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
9993				return false;
9994			};
9995		} ),
9996
9997		// Miscellaneous
9998		target: function( elem ) {
9999			var hash = window.location && window.location.hash;
10000			return hash && hash.slice( 1 ) === elem.id;
10001		},
10002
10003		root: function( elem ) {
10004			return elem === documentElement;
10005		},
10006
10007		focus: function( elem ) {
10008			return elem === safeActiveElement() &&
10009				document.hasFocus() &&
10010				!!( elem.type || elem.href || ~elem.tabIndex );
10011		},
10012
10013		// Boolean properties
10014		enabled: createDisabledPseudo( false ),
10015		disabled: createDisabledPseudo( true ),
10016
10017		checked: function( elem ) {
10018
10019			// In CSS3, :checked should return both checked and selected elements
10020			// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
10021			return ( nodeName( elem, "input" ) && !!elem.checked ) ||
10022				( nodeName( elem, "option" ) && !!elem.selected );
10023		},
10024
10025		selected: function( elem ) {
10026
10027			// Support: IE <=11+
10028			// Accessing the selectedIndex property
10029			// forces the browser to treat the default option as
10030			// selected when in an optgroup.
10031			if ( elem.parentNode ) {
10032				// eslint-disable-next-line no-unused-expressions
10033				elem.parentNode.selectedIndex;
10034			}
10035
10036			return elem.selected === true;
10037		},
10038
10039		// Contents
10040		empty: function( elem ) {
10041
10042			// https://www.w3.org/TR/selectors/#empty-pseudo
10043			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
10044			//   but not by others (comment: 8; processing instruction: 7; etc.)
10045			// nodeType < 6 works because attributes (2) do not appear as children
10046			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
10047				if ( elem.nodeType < 6 ) {
10048					return false;
10049				}
10050			}
10051			return true;
10052		},
10053
10054		parent: function( elem ) {
10055			return !Expr.pseudos.empty( elem );
10056		},
10057
10058		// Element/input types
10059		header: function( elem ) {
10060			return rheader.test( elem.nodeName );
10061		},
10062
10063		input: function( elem ) {
10064			return rinputs.test( elem.nodeName );
10065		},
10066
10067		button: function( elem ) {
10068			return nodeName( elem, "input" ) && elem.type === "button" ||
10069				nodeName( elem, "button" );
10070		},
10071
10072		text: function( elem ) {
10073			var attr;
10074			return nodeName( elem, "input" ) && elem.type === "text" &&
10075
10076				// Support: IE <10 only
10077				// New HTML5 attribute values (e.g., "search") appear
10078				// with elem.type === "text"
10079				( ( attr = elem.getAttribute( "type" ) ) == null ||
10080					attr.toLowerCase() === "text" );
10081		},
10082
10083		// Position-in-collection
10084		first: createPositionalPseudo( function() {
10085			return [ 0 ];
10086		} ),
10087
10088		last: createPositionalPseudo( function( _matchIndexes, length ) {
10089			return [ length - 1 ];
10090		} ),
10091
10092		eq: createPositionalPseudo( function( _matchIndexes, length, argument ) {
10093			return [ argument < 0 ? argument + length : argument ];
10094		} ),
10095
10096		even: createPositionalPseudo( function( matchIndexes, length ) {
10097			var i = 0;
10098			for ( ; i < length; i += 2 ) {
10099				matchIndexes.push( i );
10100			}
10101			return matchIndexes;
10102		} ),
10103
10104		odd: createPositionalPseudo( function( matchIndexes, length ) {
10105			var i = 1;
10106			for ( ; i < length; i += 2 ) {
10107				matchIndexes.push( i );
10108			}
10109			return matchIndexes;
10110		} ),
10111
10112		lt: createPositionalPseudo( function( matchIndexes, length, argument ) {
10113			var i;
10114
10115			if ( argument < 0 ) {
10116				i = argument + length;
10117			} else if ( argument > length ) {
10118				i = length;
10119			} else {
10120				i = argument;
10121			}
10122
10123			for ( ; --i >= 0; ) {
10124				matchIndexes.push( i );
10125			}
10126			return matchIndexes;
10127		} ),
10128
10129		gt: createPositionalPseudo( function( matchIndexes, length, argument ) {
10130			var i = argument < 0 ? argument + length : argument;
10131			for ( ; ++i < length; ) {
10132				matchIndexes.push( i );
10133			}
10134			return matchIndexes;
10135		} )
10136	}
10137};
10138
10139Expr.pseudos.nth = Expr.pseudos.eq;
10140
10141// Add button/input type pseudos
10142for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
10143	Expr.pseudos[ i ] = createInputPseudo( i );
10144}
10145for ( i in { submit: true, reset: true } ) {
10146	Expr.pseudos[ i ] = createButtonPseudo( i );
10147}
10148
10149// Easy API for creating new setFilters
10150function setFilters() {}
10151setFilters.prototype = Expr.filters = Expr.pseudos;
10152Expr.setFilters = new setFilters();
10153
10154function tokenize( selector, parseOnly ) {
10155	var matched, match, tokens, type,
10156		soFar, groups, preFilters,
10157		cached = tokenCache[ selector + " " ];
10158
10159	if ( cached ) {
10160		return parseOnly ? 0 : cached.slice( 0 );
10161	}
10162
10163	soFar = selector;
10164	groups = [];
10165	preFilters = Expr.preFilter;
10166
10167	while ( soFar ) {
10168
10169		// Comma and first run
10170		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
10171			if ( match ) {
10172
10173				// Don't consume trailing commas as valid
10174				soFar = soFar.slice( match[ 0 ].length ) || soFar;
10175			}
10176			groups.push( ( tokens = [] ) );
10177		}
10178
10179		matched = false;
10180
10181		// Combinators
10182		if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
10183			matched = match.shift();
10184			tokens.push( {
10185				value: matched,
10186
10187				// Cast descendant combinators to space
10188				type: match[ 0 ].replace( rtrimCSS, " " )
10189			} );
10190			soFar = soFar.slice( matched.length );
10191		}
10192
10193		// Filters
10194		for ( type in Expr.filter ) {
10195			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
10196				( match = preFilters[ type ]( match ) ) ) ) {
10197				matched = match.shift();
10198				tokens.push( {
10199					value: matched,
10200					type: type,
10201					matches: match
10202				} );
10203				soFar = soFar.slice( matched.length );
10204			}
10205		}
10206
10207		if ( !matched ) {
10208			break;
10209		}
10210	}
10211
10212	// Return the length of the invalid excess
10213	// if we're just parsing
10214	// Otherwise, throw an error or return tokens
10215	if ( parseOnly ) {
10216		return soFar.length;
10217	}
10218
10219	return soFar ?
10220		find.error( selector ) :
10221
10222		// Cache the tokens
10223		tokenCache( selector, groups ).slice( 0 );
10224}
10225
10226function toSelector( tokens ) {
10227	var i = 0,
10228		len = tokens.length,
10229		selector = "";
10230	for ( ; i < len; i++ ) {
10231		selector += tokens[ i ].value;
10232	}
10233	return selector;
10234}
10235
10236function addCombinator( matcher, combinator, base ) {
10237	var dir = combinator.dir,
10238		skip = combinator.next,
10239		key = skip || dir,
10240		checkNonElements = base && key === "parentNode",
10241		doneName = done++;
10242
10243	return combinator.first ?
10244
10245		// Check against closest ancestor/preceding element
10246		function( elem, context, xml ) {
10247			while ( ( elem = elem[ dir ] ) ) {
10248				if ( elem.nodeType === 1 || checkNonElements ) {
10249					return matcher( elem, context, xml );
10250				}
10251			}
10252			return false;
10253		} :
10254
10255		// Check against all ancestor/preceding elements
10256		function( elem, context, xml ) {
10257			var oldCache, outerCache,
10258				newCache = [ dirruns, doneName ];
10259
10260			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
10261			if ( xml ) {
10262				while ( ( elem = elem[ dir ] ) ) {
10263					if ( elem.nodeType === 1 || checkNonElements ) {
10264						if ( matcher( elem, context, xml ) ) {
10265							return true;
10266						}
10267					}
10268				}
10269			} else {
10270				while ( ( elem = elem[ dir ] ) ) {
10271					if ( elem.nodeType === 1 || checkNonElements ) {
10272						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
10273
10274						if ( skip && nodeName( elem, skip ) ) {
10275							elem = elem[ dir ] || elem;
10276						} else if ( ( oldCache = outerCache[ key ] ) &&
10277							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
10278
10279							// Assign to newCache so results back-propagate to previous elements
10280							return ( newCache[ 2 ] = oldCache[ 2 ] );
10281						} else {
10282
10283							// Reuse newcache so results back-propagate to previous elements
10284							outerCache[ key ] = newCache;
10285
10286							// A match means we're done; a fail means we have to keep checking
10287							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
10288								return true;
10289							}
10290						}
10291					}
10292				}
10293			}
10294			return false;
10295		};
10296}
10297
10298function elementMatcher( matchers ) {
10299	return matchers.length > 1 ?
10300		function( elem, context, xml ) {
10301			var i = matchers.length;
10302			while ( i-- ) {
10303				if ( !matchers[ i ]( elem, context, xml ) ) {
10304					return false;
10305				}
10306			}
10307			return true;
10308		} :
10309		matchers[ 0 ];
10310}
10311
10312function multipleContexts( selector, contexts, results ) {
10313	var i = 0,
10314		len = contexts.length;
10315	for ( ; i < len; i++ ) {
10316		find( selector, contexts[ i ], results );
10317	}
10318	return results;
10319}
10320
10321function condense( unmatched, map, filter, context, xml ) {
10322	var elem,
10323		newUnmatched = [],
10324		i = 0,
10325		len = unmatched.length,
10326		mapped = map != null;
10327
10328	for ( ; i < len; i++ ) {
10329		if ( ( elem = unmatched[ i ] ) ) {
10330			if ( !filter || filter( elem, context, xml ) ) {
10331				newUnmatched.push( elem );
10332				if ( mapped ) {
10333					map.push( i );
10334				}
10335			}
10336		}
10337	}
10338
10339	return newUnmatched;
10340}
10341
10342function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
10343	if ( postFilter && !postFilter[ expando ] ) {
10344		postFilter = setMatcher( postFilter );
10345	}
10346	if ( postFinder && !postFinder[ expando ] ) {
10347		postFinder = setMatcher( postFinder, postSelector );
10348	}
10349	return markFunction( function( seed, results, context, xml ) {
10350		var temp, i, elem, matcherOut,
10351			preMap = [],
10352			postMap = [],
10353			preexisting = results.length,
10354
10355			// Get initial elements from seed or context
10356			elems = seed ||
10357				multipleContexts( selector || "*",
10358					context.nodeType ? [ context ] : context, [] ),
10359
10360			// Prefilter to get matcher input, preserving a map for seed-results synchronization
10361			matcherIn = preFilter && ( seed || !selector ) ?
10362				condense( elems, preMap, preFilter, context, xml ) :
10363				elems;
10364
10365		if ( matcher ) {
10366
10367			// If we have a postFinder, or filtered seed, or non-seed postFilter
10368			// or preexisting results,
10369			matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
10370
10371				// ...intermediate processing is necessary
10372				[] :
10373
10374				// ...otherwise use results directly
10375				results;
10376
10377			// Find primary matches
10378			matcher( matcherIn, matcherOut, context, xml );
10379		} else {
10380			matcherOut = matcherIn;
10381		}
10382
10383		// Apply postFilter
10384		if ( postFilter ) {
10385			temp = condense( matcherOut, postMap );
10386			postFilter( temp, [], context, xml );
10387
10388			// Un-match failing elements by moving them back to matcherIn
10389			i = temp.length;
10390			while ( i-- ) {
10391				if ( ( elem = temp[ i ] ) ) {
10392					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
10393				}
10394			}
10395		}
10396
10397		if ( seed ) {
10398			if ( postFinder || preFilter ) {
10399				if ( postFinder ) {
10400
10401					// Get the final matcherOut by condensing this intermediate into postFinder contexts
10402					temp = [];
10403					i = matcherOut.length;
10404					while ( i-- ) {
10405						if ( ( elem = matcherOut[ i ] ) ) {
10406
10407							// Restore matcherIn since elem is not yet a final match
10408							temp.push( ( matcherIn[ i ] = elem ) );
10409						}
10410					}
10411					postFinder( null, ( matcherOut = [] ), temp, xml );
10412				}
10413
10414				// Move matched elements from seed to results to keep them synchronized
10415				i = matcherOut.length;
10416				while ( i-- ) {
10417					if ( ( elem = matcherOut[ i ] ) &&
10418						( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {
10419
10420						seed[ temp ] = !( results[ temp ] = elem );
10421					}
10422				}
10423			}
10424
10425		// Add elements to results, through postFinder if defined
10426		} else {
10427			matcherOut = condense(
10428				matcherOut === results ?
10429					matcherOut.splice( preexisting, matcherOut.length ) :
10430					matcherOut
10431			);
10432			if ( postFinder ) {
10433				postFinder( null, results, matcherOut, xml );
10434			} else {
10435				push.apply( results, matcherOut );
10436			}
10437		}
10438	} );
10439}
10440
10441function matcherFromTokens( tokens ) {
10442	var checkContext, matcher, j,
10443		len = tokens.length,
10444		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
10445		implicitRelative = leadingRelative || Expr.relative[ " " ],
10446		i = leadingRelative ? 1 : 0,
10447
10448		// The foundational matcher ensures that elements are reachable from top-level context(s)
10449		matchContext = addCombinator( function( elem ) {
10450			return elem === checkContext;
10451		}, implicitRelative, true ),
10452		matchAnyContext = addCombinator( function( elem ) {
10453			return indexOf.call( checkContext, elem ) > -1;
10454		}, implicitRelative, true ),
10455		matchers = [ function( elem, context, xml ) {
10456
10457			// Support: IE 11+, Edge 17 - 18+
10458			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10459			// two documents; shallow comparisons work.
10460			// eslint-disable-next-line eqeqeq
10461			var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (
10462				( checkContext = context ).nodeType ?
10463					matchContext( elem, context, xml ) :
10464					matchAnyContext( elem, context, xml ) );
10465
10466			// Avoid hanging onto element
10467			// (see https://github.com/jquery/sizzle/issues/299)
10468			checkContext = null;
10469			return ret;
10470		} ];
10471
10472	for ( ; i < len; i++ ) {
10473		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
10474			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
10475		} else {
10476			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
10477
10478			// Return special upon seeing a positional matcher
10479			if ( matcher[ expando ] ) {
10480
10481				// Find the next relative operator (if any) for proper handling
10482				j = ++i;
10483				for ( ; j < len; j++ ) {
10484					if ( Expr.relative[ tokens[ j ].type ] ) {
10485						break;
10486					}
10487				}
10488				return setMatcher(
10489					i > 1 && elementMatcher( matchers ),
10490					i > 1 && toSelector(
10491
10492						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
10493						tokens.slice( 0, i - 1 )
10494							.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
10495					).replace( rtrimCSS, "$1" ),
10496					matcher,
10497					i < j && matcherFromTokens( tokens.slice( i, j ) ),
10498					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
10499					j < len && toSelector( tokens )
10500				);
10501			}
10502			matchers.push( matcher );
10503		}
10504	}
10505
10506	return elementMatcher( matchers );
10507}
10508
10509function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
10510	var bySet = setMatchers.length > 0,
10511		byElement = elementMatchers.length > 0,
10512		superMatcher = function( seed, context, xml, results, outermost ) {
10513			var elem, j, matcher,
10514				matchedCount = 0,
10515				i = "0",
10516				unmatched = seed && [],
10517				setMatched = [],
10518				contextBackup = outermostContext,
10519
10520				// We must always have either seed elements or outermost context
10521				elems = seed || byElement && Expr.find.TAG( "*", outermost ),
10522
10523				// Use integer dirruns iff this is the outermost matcher
10524				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
10525				len = elems.length;
10526
10527			if ( outermost ) {
10528
10529				// Support: IE 11+, Edge 17 - 18+
10530				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10531				// two documents; shallow comparisons work.
10532				// eslint-disable-next-line eqeqeq
10533				outermostContext = context == document || context || outermost;
10534			}
10535
10536			// Add elements passing elementMatchers directly to results
10537			// Support: iOS <=7 - 9 only
10538			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching
10539			// elements by id. (see trac-14142)
10540			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
10541				if ( byElement && elem ) {
10542					j = 0;
10543
10544					// Support: IE 11+, Edge 17 - 18+
10545					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10546					// two documents; shallow comparisons work.
10547					// eslint-disable-next-line eqeqeq
10548					if ( !context && elem.ownerDocument != document ) {
10549						setDocument( elem );
10550						xml = !documentIsHTML;
10551					}
10552					while ( ( matcher = elementMatchers[ j++ ] ) ) {
10553						if ( matcher( elem, context || document, xml ) ) {
10554							push.call( results, elem );
10555							break;
10556						}
10557					}
10558					if ( outermost ) {
10559						dirruns = dirrunsUnique;
10560					}
10561				}
10562
10563				// Track unmatched elements for set filters
10564				if ( bySet ) {
10565
10566					// They will have gone through all possible matchers
10567					if ( ( elem = !matcher && elem ) ) {
10568						matchedCount--;
10569					}
10570
10571					// Lengthen the array for every element, matched or not
10572					if ( seed ) {
10573						unmatched.push( elem );
10574					}
10575				}
10576			}
10577
10578			// `i` is now the count of elements visited above, and adding it to `matchedCount`
10579			// makes the latter nonnegative.
10580			matchedCount += i;
10581
10582			// Apply set filters to unmatched elements
10583			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
10584			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
10585			// no element matchers and no seed.
10586			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
10587			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
10588			// numerically zero.
10589			if ( bySet && i !== matchedCount ) {
10590				j = 0;
10591				while ( ( matcher = setMatchers[ j++ ] ) ) {
10592					matcher( unmatched, setMatched, context, xml );
10593				}
10594
10595				if ( seed ) {
10596
10597					// Reintegrate element matches to eliminate the need for sorting
10598					if ( matchedCount > 0 ) {
10599						while ( i-- ) {
10600							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
10601								setMatched[ i ] = pop.call( results );
10602							}
10603						}
10604					}
10605
10606					// Discard index placeholder values to get only actual matches
10607					setMatched = condense( setMatched );
10608				}
10609
10610				// Add matches to results
10611				push.apply( results, setMatched );
10612
10613				// Seedless set matches succeeding multiple successful matchers stipulate sorting
10614				if ( outermost && !seed && setMatched.length > 0 &&
10615					( matchedCount + setMatchers.length ) > 1 ) {
10616
10617					jQuery.uniqueSort( results );
10618				}
10619			}
10620
10621			// Override manipulation of globals by nested matchers
10622			if ( outermost ) {
10623				dirruns = dirrunsUnique;
10624				outermostContext = contextBackup;
10625			}
10626
10627			return unmatched;
10628		};
10629
10630	return bySet ?
10631		markFunction( superMatcher ) :
10632		superMatcher;
10633}
10634
10635function compile( selector, match /* Internal Use Only */ ) {
10636	var i,
10637		setMatchers = [],
10638		elementMatchers = [],
10639		cached = compilerCache[ selector + " " ];
10640
10641	if ( !cached ) {
10642
10643		// Generate a function of recursive functions that can be used to check each element
10644		if ( !match ) {
10645			match = tokenize( selector );
10646		}
10647		i = match.length;
10648		while ( i-- ) {
10649			cached = matcherFromTokens( match[ i ] );
10650			if ( cached[ expando ] ) {
10651				setMatchers.push( cached );
10652			} else {
10653				elementMatchers.push( cached );
10654			}
10655		}
10656
10657		// Cache the compiled function
10658		cached = compilerCache( selector,
10659			matcherFromGroupMatchers( elementMatchers, setMatchers ) );
10660
10661		// Save selector and tokenization
10662		cached.selector = selector;
10663	}
10664	return cached;
10665}
10666
10667/**
10668 * A low-level selection function that works with jQuery's compiled
10669 *  selector functions
10670 * @param {String|Function} selector A selector or a pre-compiled
10671 *  selector function built with jQuery selector compile
10672 * @param {Element} context
10673 * @param {Array} [results]
10674 * @param {Array} [seed] A set of elements to match against
10675 */
10676function select( selector, context, results, seed ) {
10677	var i, tokens, token, type, find,
10678		compiled = typeof selector === "function" && selector,
10679		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
10680
10681	results = results || [];
10682
10683	// Try to minimize operations if there is only one selector in the list and no seed
10684	// (the latter of which guarantees us context)
10685	if ( match.length === 1 ) {
10686
10687		// Reduce context if the leading compound selector is an ID
10688		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
10689		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
10690				context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
10691
10692			context = ( Expr.find.ID(
10693				token.matches[ 0 ].replace( runescape, funescape ),
10694				context
10695			) || [] )[ 0 ];
10696			if ( !context ) {
10697				return results;
10698
10699			// Precompiled matchers will still verify ancestry, so step up a level
10700			} else if ( compiled ) {
10701				context = context.parentNode;
10702			}
10703
10704			selector = selector.slice( tokens.shift().value.length );
10705		}
10706
10707		// Fetch a seed set for right-to-left matching
10708		i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;
10709		while ( i-- ) {
10710			token = tokens[ i ];
10711
10712			// Abort if we hit a combinator
10713			if ( Expr.relative[ ( type = token.type ) ] ) {
10714				break;
10715			}
10716			if ( ( find = Expr.find[ type ] ) ) {
10717
10718				// Search, expanding context for leading sibling combinators
10719				if ( ( seed = find(
10720					token.matches[ 0 ].replace( runescape, funescape ),
10721					rsibling.test( tokens[ 0 ].type ) &&
10722						testContext( context.parentNode ) || context
10723				) ) ) {
10724
10725					// If seed is empty or no tokens remain, we can return early
10726					tokens.splice( i, 1 );
10727					selector = seed.length && toSelector( tokens );
10728					if ( !selector ) {
10729						push.apply( results, seed );
10730						return results;
10731					}
10732
10733					break;
10734				}
10735			}
10736		}
10737	}
10738
10739	// Compile and execute a filtering function if one is not provided
10740	// Provide `match` to avoid retokenization if we modified the selector above
10741	( compiled || compile( selector, match ) )(
10742		seed,
10743		context,
10744		!documentIsHTML,
10745		results,
10746		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
10747	);
10748	return results;
10749}
10750
10751// One-time assignments
10752
10753// Support: Android <=4.0 - 4.1+
10754// Sort stability
10755support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
10756
10757// Initialize against the default document
10758setDocument();
10759
10760// Support: Android <=4.0 - 4.1+
10761// Detached nodes confoundingly follow *each other*
10762support.sortDetached = assert( function( el ) {
10763
10764	// Should return 1, but returns 4 (following)
10765	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
10766} );
10767
10768jQuery.find = find;
10769
10770// Deprecated
10771jQuery.expr[ ":" ] = jQuery.expr.pseudos;
10772jQuery.unique = jQuery.uniqueSort;
10773
10774// These have always been private, but they used to be documented as part of
10775// Sizzle so let's maintain them for now for backwards compatibility purposes.
10776find.compile = compile;
10777find.select = select;
10778find.setDocument = setDocument;
10779find.tokenize = tokenize;
10780
10781find.escape = jQuery.escapeSelector;
10782find.getText = jQuery.text;
10783find.isXML = jQuery.isXMLDoc;
10784find.selectors = jQuery.expr;
10785find.support = jQuery.support;
10786find.uniqueSort = jQuery.uniqueSort;
10787
10788	/* eslint-enable */
10789
10790} )();
10791
10792
10793var dir = function( elem, dir, until ) {
10794	var matched = [],
10795		truncate = until !== undefined;
10796
10797	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
10798		if ( elem.nodeType === 1 ) {
10799			if ( truncate && jQuery( elem ).is( until ) ) {
10800				break;
10801			}
10802			matched.push( elem );
10803		}
10804	}
10805	return matched;
10806};
10807
10808
10809var siblings = function( n, elem ) {
10810	var matched = [];
10811
10812	for ( ; n; n = n.nextSibling ) {
10813		if ( n.nodeType === 1 && n !== elem ) {
10814			matched.push( n );
10815		}
10816	}
10817
10818	return matched;
10819};
10820
10821
10822var rneedsContext = jQuery.expr.match.needsContext;
10823
10824var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
10825
10826
10827
10828// Implement the identical functionality for filter and not
10829function winnow( elements, qualifier, not ) {
10830	if ( isFunction( qualifier ) ) {
10831		return jQuery.grep( elements, function( elem, i ) {
10832			return !!qualifier.call( elem, i, elem ) !== not;
10833		} );
10834	}
10835
10836	// Single element
10837	if ( qualifier.nodeType ) {
10838		return jQuery.grep( elements, function( elem ) {
10839			return ( elem === qualifier ) !== not;
10840		} );
10841	}
10842
10843	// Arraylike of elements (jQuery, arguments, Array)
10844	if ( typeof qualifier !== "string" ) {
10845		return jQuery.grep( elements, function( elem ) {
10846			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
10847		} );
10848	}
10849
10850	// Filtered directly for both simple and complex selectors
10851	return jQuery.filter( qualifier, elements, not );
10852}
10853
10854jQuery.filter = function( expr, elems, not ) {
10855	var elem = elems[ 0 ];
10856
10857	if ( not ) {
10858		expr = ":not(" + expr + ")";
10859	}
10860
10861	if ( elems.length === 1 && elem.nodeType === 1 ) {
10862		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
10863	}
10864
10865	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
10866		return elem.nodeType === 1;
10867	} ) );
10868};
10869
10870jQuery.fn.extend( {
10871	find: function( selector ) {
10872		var i, ret,
10873			len = this.length,
10874			self = this;
10875
10876		if ( typeof selector !== "string" ) {
10877			return this.pushStack( jQuery( selector ).filter( function() {
10878				for ( i = 0; i < len; i++ ) {
10879					if ( jQuery.contains( self[ i ], this ) ) {
10880						return true;
10881					}
10882				}
10883			} ) );
10884		}
10885
10886		ret = this.pushStack( [] );
10887
10888		for ( i = 0; i < len; i++ ) {
10889			jQuery.find( selector, self[ i ], ret );
10890		}
10891
10892		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
10893	},
10894	filter: function( selector ) {
10895		return this.pushStack( winnow( this, selector || [], false ) );
10896	},
10897	not: function( selector ) {
10898		return this.pushStack( winnow( this, selector || [], true ) );
10899	},
10900	is: function( selector ) {
10901		return !!winnow(
10902			this,
10903
10904			// If this is a positional/relative selector, check membership in the returned set
10905			// so $("p:first").is("p:last") won't return true for a doc with two "p".
10906			typeof selector === "string" && rneedsContext.test( selector ) ?
10907				jQuery( selector ) :
10908				selector || [],
10909			false
10910		).length;
10911	}
10912} );
10913
10914
10915// Initialize a jQuery object
10916
10917
10918// A central reference to the root jQuery(document)
10919var rootjQuery,
10920
10921	// A simple way to check for HTML strings
10922	// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)
10923	// Strict HTML recognition (trac-11290: must start with <)
10924	// Shortcut simple #id case for speed
10925	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
10926
10927	init = jQuery.fn.init = function( selector, context, root ) {
10928		var match, elem;
10929
10930		// HANDLE: $(""), $(null), $(undefined), $(false)
10931		if ( !selector ) {
10932			return this;
10933		}
10934
10935		// Method init() accepts an alternate rootjQuery
10936		// so migrate can support jQuery.sub (gh-2101)
10937		root = root || rootjQuery;
10938
10939		// Handle HTML strings
10940		if ( typeof selector === "string" ) {
10941			if ( selector[ 0 ] === "<" &&
10942				selector[ selector.length - 1 ] === ">" &&
10943				selector.length >= 3 ) {
10944
10945				// Assume that strings that start and end with <> are HTML and skip the regex check
10946				match = [ null, selector, null ];
10947
10948			} else {
10949				match = rquickExpr.exec( selector );
10950			}
10951
10952			// Match html or make sure no context is specified for #id
10953			if ( match && ( match[ 1 ] || !context ) ) {
10954
10955				// HANDLE: $(html) -> $(array)
10956				if ( match[ 1 ] ) {
10957					context = context instanceof jQuery ? context[ 0 ] : context;
10958
10959					// Option to run scripts is true for back-compat
10960					// Intentionally let the error be thrown if parseHTML is not present
10961					jQuery.merge( this, jQuery.parseHTML(
10962						match[ 1 ],
10963						context && context.nodeType ? context.ownerDocument || context : document,
10964						true
10965					) );
10966
10967					// HANDLE: $(html, props)
10968					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
10969						for ( match in context ) {
10970
10971							// Properties of context are called as methods if possible
10972							if ( isFunction( this[ match ] ) ) {
10973								this[ match ]( context[ match ] );
10974
10975							// ...and otherwise set as attributes
10976							} else {
10977								this.attr( match, context[ match ] );
10978							}
10979						}
10980					}
10981
10982					return this;
10983
10984				// HANDLE: $(#id)
10985				} else {
10986					elem = document.getElementById( match[ 2 ] );
10987
10988					if ( elem ) {
10989
10990						// Inject the element directly into the jQuery object
10991						this[ 0 ] = elem;
10992						this.length = 1;
10993					}
10994					return this;
10995				}
10996
10997			// HANDLE: $(expr, $(...))
10998			} else if ( !context || context.jquery ) {
10999				return ( context || root ).find( selector );
11000
11001			// HANDLE: $(expr, context)
11002			// (which is just equivalent to: $(context).find(expr)
11003			} else {
11004				return this.constructor( context ).find( selector );
11005			}
11006
11007		// HANDLE: $(DOMElement)
11008		} else if ( selector.nodeType ) {
11009			this[ 0 ] = selector;
11010			this.length = 1;
11011			return this;
11012
11013		// HANDLE: $(function)
11014		// Shortcut for document ready
11015		} else if ( isFunction( selector ) ) {
11016			return root.ready !== undefined ?
11017				root.ready( selector ) :
11018
11019				// Execute immediately if ready is not present
11020				selector( jQuery );
11021		}
11022
11023		return jQuery.makeArray( selector, this );
11024	};
11025
11026// Give the init function the jQuery prototype for later instantiation
11027init.prototype = jQuery.fn;
11028
11029// Initialize central reference
11030rootjQuery = jQuery( document );
11031
11032
11033var rparentsprev = /^(?:parents|prev(?:Until|All))/,
11034
11035	// Methods guaranteed to produce a unique set when starting from a unique set
11036	guaranteedUnique = {
11037		children: true,
11038		contents: true,
11039		next: true,
11040		prev: true
11041	};
11042
11043jQuery.fn.extend( {
11044	has: function( target ) {
11045		var targets = jQuery( target, this ),
11046			l = targets.length;
11047
11048		return this.filter( function() {
11049			var i = 0;
11050			for ( ; i < l; i++ ) {
11051				if ( jQuery.contains( this, targets[ i ] ) ) {
11052					return true;
11053				}
11054			}
11055		} );
11056	},
11057
11058	closest: function( selectors, context ) {
11059		var cur,
11060			i = 0,
11061			l = this.length,
11062			matched = [],
11063			targets = typeof selectors !== "string" && jQuery( selectors );
11064
11065		// Positional selectors never match, since there's no _selection_ context
11066		if ( !rneedsContext.test( selectors ) ) {
11067			for ( ; i < l; i++ ) {
11068				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
11069
11070					// Always skip document fragments
11071					if ( cur.nodeType < 11 && ( targets ?
11072						targets.index( cur ) > -1 :
11073
11074						// Don't pass non-elements to jQuery#find
11075						cur.nodeType === 1 &&
11076							jQuery.find.matchesSelector( cur, selectors ) ) ) {
11077
11078						matched.push( cur );
11079						break;
11080					}
11081				}
11082			}
11083		}
11084
11085		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
11086	},
11087
11088	// Determine the position of an element within the set
11089	index: function( elem ) {
11090
11091		// No argument, return index in parent
11092		if ( !elem ) {
11093			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
11094		}
11095
11096		// Index in selector
11097		if ( typeof elem === "string" ) {
11098			return indexOf.call( jQuery( elem ), this[ 0 ] );
11099		}
11100
11101		// Locate the position of the desired element
11102		return indexOf.call( this,
11103
11104			// If it receives a jQuery object, the first element is used
11105			elem.jquery ? elem[ 0 ] : elem
11106		);
11107	},
11108
11109	add: function( selector, context ) {
11110		return this.pushStack(
11111			jQuery.uniqueSort(
11112				jQuery.merge( this.get(), jQuery( selector, context ) )
11113			)
11114		);
11115	},
11116
11117	addBack: function( selector ) {
11118		return this.add( selector == null ?
11119			this.prevObject : this.prevObject.filter( selector )
11120		);
11121	}
11122} );
11123
11124function sibling( cur, dir ) {
11125	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
11126	return cur;
11127}
11128
11129jQuery.each( {
11130	parent: function( elem ) {
11131		var parent = elem.parentNode;
11132		return parent && parent.nodeType !== 11 ? parent : null;
11133	},
11134	parents: function( elem ) {
11135		return dir( elem, "parentNode" );
11136	},
11137	parentsUntil: function( elem, _i, until ) {
11138		return dir( elem, "parentNode", until );
11139	},
11140	next: function( elem ) {
11141		return sibling( elem, "nextSibling" );
11142	},
11143	prev: function( elem ) {
11144		return sibling( elem, "previousSibling" );
11145	},
11146	nextAll: function( elem ) {
11147		return dir( elem, "nextSibling" );
11148	},
11149	prevAll: function( elem ) {
11150		return dir( elem, "previousSibling" );
11151	},
11152	nextUntil: function( elem, _i, until ) {
11153		return dir( elem, "nextSibling", until );
11154	},
11155	prevUntil: function( elem, _i, until ) {
11156		return dir( elem, "previousSibling", until );
11157	},
11158	siblings: function( elem ) {
11159		return siblings( ( elem.parentNode || {} ).firstChild, elem );
11160	},
11161	children: function( elem ) {
11162		return siblings( elem.firstChild );
11163	},
11164	contents: function( elem ) {
11165		if ( elem.contentDocument != null &&
11166
11167			// Support: IE 11+
11168			// <object> elements with no `data` attribute has an object
11169			// `contentDocument` with a `null` prototype.
11170			getProto( elem.contentDocument ) ) {
11171
11172			return elem.contentDocument;
11173		}
11174
11175		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
11176		// Treat the template element as a regular one in browsers that
11177		// don't support it.
11178		if ( nodeName( elem, "template" ) ) {
11179			elem = elem.content || elem;
11180		}
11181
11182		return jQuery.merge( [], elem.childNodes );
11183	}
11184}, function( name, fn ) {
11185	jQuery.fn[ name ] = function( until, selector ) {
11186		var matched = jQuery.map( this, fn, until );
11187
11188		if ( name.slice( -5 ) !== "Until" ) {
11189			selector = until;
11190		}
11191
11192		if ( selector && typeof selector === "string" ) {
11193			matched = jQuery.filter( selector, matched );
11194		}
11195
11196		if ( this.length > 1 ) {
11197
11198			// Remove duplicates
11199			if ( !guaranteedUnique[ name ] ) {
11200				jQuery.uniqueSort( matched );
11201			}
11202
11203			// Reverse order for parents* and prev-derivatives
11204			if ( rparentsprev.test( name ) ) {
11205				matched.reverse();
11206			}
11207		}
11208
11209		return this.pushStack( matched );
11210	};
11211} );
11212var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
11213
11214
11215
11216// Convert String-formatted options into Object-formatted ones
11217function createOptions( options ) {
11218	var object = {};
11219	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
11220		object[ flag ] = true;
11221	} );
11222	return object;
11223}
11224
11225/*
11226 * Create a callback list using the following parameters:
11227 *
11228 *	options: an optional list of space-separated options that will change how
11229 *			the callback list behaves or a more traditional option object
11230 *
11231 * By default a callback list will act like an event callback list and can be
11232 * "fired" multiple times.
11233 *
11234 * Possible options:
11235 *
11236 *	once:			will ensure the callback list can only be fired once (like a Deferred)
11237 *
11238 *	memory:			will keep track of previous values and will call any callback added
11239 *					after the list has been fired right away with the latest "memorized"
11240 *					values (like a Deferred)
11241 *
11242 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
11243 *
11244 *	stopOnFalse:	interrupt callings when a callback returns false
11245 *
11246 */
11247jQuery.Callbacks = function( options ) {
11248
11249	// Convert options from String-formatted to Object-formatted if needed
11250	// (we check in cache first)
11251	options = typeof options === "string" ?
11252		createOptions( options ) :
11253		jQuery.extend( {}, options );
11254
11255	var // Flag to know if list is currently firing
11256		firing,
11257
11258		// Last fire value for non-forgettable lists
11259		memory,
11260
11261		// Flag to know if list was already fired
11262		fired,
11263
11264		// Flag to prevent firing
11265		locked,
11266
11267		// Actual callback list
11268		list = [],
11269
11270		// Queue of execution data for repeatable lists
11271		queue = [],
11272
11273		// Index of currently firing callback (modified by add/remove as needed)
11274		firingIndex = -1,
11275
11276		// Fire callbacks
11277		fire = function() {
11278
11279			// Enforce single-firing
11280			locked = locked || options.once;
11281
11282			// Execute callbacks for all pending executions,
11283			// respecting firingIndex overrides and runtime changes
11284			fired = firing = true;
11285			for ( ; queue.length; firingIndex = -1 ) {
11286				memory = queue.shift();
11287				while ( ++firingIndex < list.length ) {
11288
11289					// Run callback and check for early termination
11290					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
11291						options.stopOnFalse ) {
11292
11293						// Jump to end and forget the data so .add doesn't re-fire
11294						firingIndex = list.length;
11295						memory = false;
11296					}
11297				}
11298			}
11299
11300			// Forget the data if we're done with it
11301			if ( !options.memory ) {
11302				memory = false;
11303			}
11304
11305			firing = false;
11306
11307			// Clean up if we're done firing for good
11308			if ( locked ) {
11309
11310				// Keep an empty list if we have data for future add calls
11311				if ( memory ) {
11312					list = [];
11313
11314				// Otherwise, this object is spent
11315				} else {
11316					list = "";
11317				}
11318			}
11319		},
11320
11321		// Actual Callbacks object
11322		self = {
11323
11324			// Add a callback or a collection of callbacks to the list
11325			add: function() {
11326				if ( list ) {
11327
11328					// If we have memory from a past run, we should fire after adding
11329					if ( memory && !firing ) {
11330						firingIndex = list.length - 1;
11331						queue.push( memory );
11332					}
11333
11334					( function add( args ) {
11335						jQuery.each( args, function( _, arg ) {
11336							if ( isFunction( arg ) ) {
11337								if ( !options.unique || !self.has( arg ) ) {
11338									list.push( arg );
11339								}
11340							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
11341
11342								// Inspect recursively
11343								add( arg );
11344							}
11345						} );
11346					} )( arguments );
11347
11348					if ( memory && !firing ) {
11349						fire();
11350					}
11351				}
11352				return this;
11353			},
11354
11355			// Remove a callback from the list
11356			remove: function() {
11357				jQuery.each( arguments, function( _, arg ) {
11358					var index;
11359					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
11360						list.splice( index, 1 );
11361
11362						// Handle firing indexes
11363						if ( index <= firingIndex ) {
11364							firingIndex--;
11365						}
11366					}
11367				} );
11368				return this;
11369			},
11370
11371			// Check if a given callback is in the list.
11372			// If no argument is given, return whether or not list has callbacks attached.
11373			has: function( fn ) {
11374				return fn ?
11375					jQuery.inArray( fn, list ) > -1 :
11376					list.length > 0;
11377			},
11378
11379			// Remove all callbacks from the list
11380			empty: function() {
11381				if ( list ) {
11382					list = [];
11383				}
11384				return this;
11385			},
11386
11387			// Disable .fire and .add
11388			// Abort any current/pending executions
11389			// Clear all callbacks and values
11390			disable: function() {
11391				locked = queue = [];
11392				list = memory = "";
11393				return this;
11394			},
11395			disabled: function() {
11396				return !list;
11397			},
11398
11399			// Disable .fire
11400			// Also disable .add unless we have memory (since it would have no effect)
11401			// Abort any pending executions
11402			lock: function() {
11403				locked = queue = [];
11404				if ( !memory && !firing ) {
11405					list = memory = "";
11406				}
11407				return this;
11408			},
11409			locked: function() {
11410				return !!locked;
11411			},
11412
11413			// Call all callbacks with the given context and arguments
11414			fireWith: function( context, args ) {
11415				if ( !locked ) {
11416					args = args || [];
11417					args = [ context, args.slice ? args.slice() : args ];
11418					queue.push( args );
11419					if ( !firing ) {
11420						fire();
11421					}
11422				}
11423				return this;
11424			},
11425
11426			// Call all the callbacks with the given arguments
11427			fire: function() {
11428				self.fireWith( this, arguments );
11429				return this;
11430			},
11431
11432			// To know if the callbacks have already been called at least once
11433			fired: function() {
11434				return !!fired;
11435			}
11436		};
11437
11438	return self;
11439};
11440
11441
11442function Identity( v ) {
11443	return v;
11444}
11445function Thrower( ex ) {
11446	throw ex;
11447}
11448
11449function adoptValue( value, resolve, reject, noValue ) {
11450	var method;
11451
11452	try {
11453
11454		// Check for promise aspect first to privilege synchronous behavior
11455		if ( value && isFunction( ( method = value.promise ) ) ) {
11456			method.call( value ).done( resolve ).fail( reject );
11457
11458		// Other thenables
11459		} else if ( value && isFunction( ( method = value.then ) ) ) {
11460			method.call( value, resolve, reject );
11461
11462		// Other non-thenables
11463		} else {
11464
11465			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
11466			// * false: [ value ].slice( 0 ) => resolve( value )
11467			// * true: [ value ].slice( 1 ) => resolve()
11468			resolve.apply( undefined, [ value ].slice( noValue ) );
11469		}
11470
11471	// For Promises/A+, convert exceptions into rejections
11472	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
11473	// Deferred#then to conditionally suppress rejection.
11474	} catch ( value ) {
11475
11476		// Support: Android 4.0 only
11477		// Strict mode functions invoked without .call/.apply get global-object context
11478		reject.apply( undefined, [ value ] );
11479	}
11480}
11481
11482jQuery.extend( {
11483
11484	Deferred: function( func ) {
11485		var tuples = [
11486
11487				// action, add listener, callbacks,
11488				// ... .then handlers, argument index, [final state]
11489				[ "notify", "progress", jQuery.Callbacks( "memory" ),
11490					jQuery.Callbacks( "memory" ), 2 ],
11491				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
11492					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
11493				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
11494					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
11495			],
11496			state = "pending",
11497			promise = {
11498				state: function() {
11499					return state;
11500				},
11501				always: function() {
11502					deferred.done( arguments ).fail( arguments );
11503					return this;
11504				},
11505				"catch": function( fn ) {
11506					return promise.then( null, fn );
11507				},
11508
11509				// Keep pipe for back-compat
11510				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
11511					var fns = arguments;
11512
11513					return jQuery.Deferred( function( newDefer ) {
11514						jQuery.each( tuples, function( _i, tuple ) {
11515
11516							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
11517							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
11518
11519							// deferred.progress(function() { bind to newDefer or newDefer.notify })
11520							// deferred.done(function() { bind to newDefer or newDefer.resolve })
11521							// deferred.fail(function() { bind to newDefer or newDefer.reject })
11522							deferred[ tuple[ 1 ] ]( function() {
11523								var returned = fn && fn.apply( this, arguments );
11524								if ( returned && isFunction( returned.promise ) ) {
11525									returned.promise()
11526										.progress( newDefer.notify )
11527										.done( newDefer.resolve )
11528										.fail( newDefer.reject );
11529								} else {
11530									newDefer[ tuple[ 0 ] + "With" ](
11531										this,
11532										fn ? [ returned ] : arguments
11533									);
11534								}
11535							} );
11536						} );
11537						fns = null;
11538					} ).promise();
11539				},
11540				then: function( onFulfilled, onRejected, onProgress ) {
11541					var maxDepth = 0;
11542					function resolve( depth, deferred, handler, special ) {
11543						return function() {
11544							var that = this,
11545								args = arguments,
11546								mightThrow = function() {
11547									var returned, then;
11548
11549									// Support: Promises/A+ section 2.3.3.3.3
11550									// https://promisesaplus.com/#point-59
11551									// Ignore double-resolution attempts
11552									if ( depth < maxDepth ) {
11553										return;
11554									}
11555
11556									returned = handler.apply( that, args );
11557
11558									// Support: Promises/A+ section 2.3.1
11559									// https://promisesaplus.com/#point-48
11560									if ( returned === deferred.promise() ) {
11561										throw new TypeError( "Thenable self-resolution" );
11562									}
11563
11564									// Support: Promises/A+ sections 2.3.3.1, 3.5
11565									// https://promisesaplus.com/#point-54
11566									// https://promisesaplus.com/#point-75
11567									// Retrieve `then` only once
11568									then = returned &&
11569
11570										// Support: Promises/A+ section 2.3.4
11571										// https://promisesaplus.com/#point-64
11572										// Only check objects and functions for thenability
11573										( typeof returned === "object" ||
11574											typeof returned === "function" ) &&
11575										returned.then;
11576
11577									// Handle a returned thenable
11578									if ( isFunction( then ) ) {
11579
11580										// Special processors (notify) just wait for resolution
11581										if ( special ) {
11582											then.call(
11583												returned,
11584												resolve( maxDepth, deferred, Identity, special ),
11585												resolve( maxDepth, deferred, Thrower, special )
11586											);
11587
11588										// Normal processors (resolve) also hook into progress
11589										} else {
11590
11591											// ...and disregard older resolution values
11592											maxDepth++;
11593
11594											then.call(
11595												returned,
11596												resolve( maxDepth, deferred, Identity, special ),
11597												resolve( maxDepth, deferred, Thrower, special ),
11598												resolve( maxDepth, deferred, Identity,
11599													deferred.notifyWith )
11600											);
11601										}
11602
11603									// Handle all other returned values
11604									} else {
11605
11606										// Only substitute handlers pass on context
11607										// and multiple values (non-spec behavior)
11608										if ( handler !== Identity ) {
11609											that = undefined;
11610											args = [ returned ];
11611										}
11612
11613										// Process the value(s)
11614										// Default process is resolve
11615										( special || deferred.resolveWith )( that, args );
11616									}
11617								},
11618
11619								// Only normal processors (resolve) catch and reject exceptions
11620								process = special ?
11621									mightThrow :
11622									function() {
11623										try {
11624											mightThrow();
11625										} catch ( e ) {
11626
11627											if ( jQuery.Deferred.exceptionHook ) {
11628												jQuery.Deferred.exceptionHook( e,
11629													process.error );
11630											}
11631
11632											// Support: Promises/A+ section 2.3.3.3.4.1
11633											// https://promisesaplus.com/#point-61
11634											// Ignore post-resolution exceptions
11635											if ( depth + 1 >= maxDepth ) {
11636
11637												// Only substitute handlers pass on context
11638												// and multiple values (non-spec behavior)
11639												if ( handler !== Thrower ) {
11640													that = undefined;
11641													args = [ e ];
11642												}
11643
11644												deferred.rejectWith( that, args );
11645											}
11646										}
11647									};
11648
11649							// Support: Promises/A+ section 2.3.3.3.1
11650							// https://promisesaplus.com/#point-57
11651							// Re-resolve promises immediately to dodge false rejection from
11652							// subsequent errors
11653							if ( depth ) {
11654								process();
11655							} else {
11656
11657								// Call an optional hook to record the error, in case of exception
11658								// since it's otherwise lost when execution goes async
11659								if ( jQuery.Deferred.getErrorHook ) {
11660									process.error = jQuery.Deferred.getErrorHook();
11661
11662								// The deprecated alias of the above. While the name suggests
11663								// returning the stack, not an error instance, jQuery just passes
11664								// it directly to `console.warn` so both will work; an instance
11665								// just better cooperates with source maps.
11666								} else if ( jQuery.Deferred.getStackHook ) {
11667									process.error = jQuery.Deferred.getStackHook();
11668								}
11669								window.setTimeout( process );
11670							}
11671						};
11672					}
11673
11674					return jQuery.Deferred( function( newDefer ) {
11675
11676						// progress_handlers.add( ... )
11677						tuples[ 0 ][ 3 ].add(
11678							resolve(
11679								0,
11680								newDefer,
11681								isFunction( onProgress ) ?
11682									onProgress :
11683									Identity,
11684								newDefer.notifyWith
11685							)
11686						);
11687
11688						// fulfilled_handlers.add( ... )
11689						tuples[ 1 ][ 3 ].add(
11690							resolve(
11691								0,
11692								newDefer,
11693								isFunction( onFulfilled ) ?
11694									onFulfilled :
11695									Identity
11696							)
11697						);
11698
11699						// rejected_handlers.add( ... )
11700						tuples[ 2 ][ 3 ].add(
11701							resolve(
11702								0,
11703								newDefer,
11704								isFunction( onRejected ) ?
11705									onRejected :
11706									Thrower
11707							)
11708						);
11709					} ).promise();
11710				},
11711
11712				// Get a promise for this deferred
11713				// If obj is provided, the promise aspect is added to the object
11714				promise: function( obj ) {
11715					return obj != null ? jQuery.extend( obj, promise ) : promise;
11716				}
11717			},
11718			deferred = {};
11719
11720		// Add list-specific methods
11721		jQuery.each( tuples, function( i, tuple ) {
11722			var list = tuple[ 2 ],
11723				stateString = tuple[ 5 ];
11724
11725			// promise.progress = list.add
11726			// promise.done = list.add
11727			// promise.fail = list.add
11728			promise[ tuple[ 1 ] ] = list.add;
11729
11730			// Handle state
11731			if ( stateString ) {
11732				list.add(
11733					function() {
11734
11735						// state = "resolved" (i.e., fulfilled)
11736						// state = "rejected"
11737						state = stateString;
11738					},
11739
11740					// rejected_callbacks.disable
11741					// fulfilled_callbacks.disable
11742					tuples[ 3 - i ][ 2 ].disable,
11743
11744					// rejected_handlers.disable
11745					// fulfilled_handlers.disable
11746					tuples[ 3 - i ][ 3 ].disable,
11747
11748					// progress_callbacks.lock
11749					tuples[ 0 ][ 2 ].lock,
11750
11751					// progress_handlers.lock
11752					tuples[ 0 ][ 3 ].lock
11753				);
11754			}
11755
11756			// progress_handlers.fire
11757			// fulfilled_handlers.fire
11758			// rejected_handlers.fire
11759			list.add( tuple[ 3 ].fire );
11760
11761			// deferred.notify = function() { deferred.notifyWith(...) }
11762			// deferred.resolve = function() { deferred.resolveWith(...) }
11763			// deferred.reject = function() { deferred.rejectWith(...) }
11764			deferred[ tuple[ 0 ] ] = function() {
11765				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
11766				return this;
11767			};
11768
11769			// deferred.notifyWith = list.fireWith
11770			// deferred.resolveWith = list.fireWith
11771			// deferred.rejectWith = list.fireWith
11772			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
11773		} );
11774
11775		// Make the deferred a promise
11776		promise.promise( deferred );
11777
11778		// Call given func if any
11779		if ( func ) {
11780			func.call( deferred, deferred );
11781		}
11782
11783		// All done!
11784		return deferred;
11785	},
11786
11787	// Deferred helper
11788	when: function( singleValue ) {
11789		var
11790
11791			// count of uncompleted subordinates
11792			remaining = arguments.length,
11793
11794			// count of unprocessed arguments
11795			i = remaining,
11796
11797			// subordinate fulfillment data
11798			resolveContexts = Array( i ),
11799			resolveValues = slice.call( arguments ),
11800
11801			// the primary Deferred
11802			primary = jQuery.Deferred(),
11803
11804			// subordinate callback factory
11805			updateFunc = function( i ) {
11806				return function( value ) {
11807					resolveContexts[ i ] = this;
11808					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
11809					if ( !( --remaining ) ) {
11810						primary.resolveWith( resolveContexts, resolveValues );
11811					}
11812				};
11813			};
11814
11815		// Single- and empty arguments are adopted like Promise.resolve
11816		if ( remaining <= 1 ) {
11817			adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
11818				!remaining );
11819
11820			// Use .then() to unwrap secondary thenables (cf. gh-3000)
11821			if ( primary.state() === "pending" ||
11822				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
11823
11824				return primary.then();
11825			}
11826		}
11827
11828		// Multiple arguments are aggregated like Promise.all array elements
11829		while ( i-- ) {
11830			adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
11831		}
11832
11833		return primary.promise();
11834	}
11835} );
11836
11837
11838// These usually indicate a programmer mistake during development,
11839// warn about them ASAP rather than swallowing them by default.
11840var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
11841
11842// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error
11843// captured before the async barrier to get the original error cause
11844// which may otherwise be hidden.
11845jQuery.Deferred.exceptionHook = function( error, asyncError ) {
11846
11847	// Support: IE 8 - 9 only
11848	// Console exists when dev tools are open, which can happen at any time
11849	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
11850		window.console.warn( "jQuery.Deferred exception: " + error.message,
11851			error.stack, asyncError );
11852	}
11853};
11854
11855
11856
11857
11858jQuery.readyException = function( error ) {
11859	window.setTimeout( function() {
11860		throw error;
11861	} );
11862};
11863
11864
11865
11866
11867// The deferred used on DOM ready
11868var readyList = jQuery.Deferred();
11869
11870jQuery.fn.ready = function( fn ) {
11871
11872	readyList
11873		.then( fn )
11874
11875		// Wrap jQuery.readyException in a function so that the lookup
11876		// happens at the time of error handling instead of callback
11877		// registration.
11878		.catch( function( error ) {
11879			jQuery.readyException( error );
11880		} );
11881
11882	return this;
11883};
11884
11885jQuery.extend( {
11886
11887	// Is the DOM ready to be used? Set to true once it occurs.
11888	isReady: false,
11889
11890	// A counter to track how many items to wait for before
11891	// the ready event fires. See trac-6781
11892	readyWait: 1,
11893
11894	// Handle when the DOM is ready
11895	ready: function( wait ) {
11896
11897		// Abort if there are pending holds or we're already ready
11898		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
11899			return;
11900		}
11901
11902		// Remember that the DOM is ready
11903		jQuery.isReady = true;
11904
11905		// If a normal DOM Ready event fired, decrement, and wait if need be
11906		if ( wait !== true && --jQuery.readyWait > 0 ) {
11907			return;
11908		}
11909
11910		// If there are functions bound, to execute
11911		readyList.resolveWith( document, [ jQuery ] );
11912	}
11913} );
11914
11915jQuery.ready.then = readyList.then;
11916
11917// The ready event handler and self cleanup method
11918function completed() {
11919	document.removeEventListener( "DOMContentLoaded", completed );
11920	window.removeEventListener( "load", completed );
11921	jQuery.ready();
11922}
11923
11924// Catch cases where $(document).ready() is called
11925// after the browser event has already occurred.
11926// Support: IE <=9 - 10 only
11927// Older IE sometimes signals "interactive" too soon
11928if ( document.readyState === "complete" ||
11929	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
11930
11931	// Handle it asynchronously to allow scripts the opportunity to delay ready
11932	window.setTimeout( jQuery.ready );
11933
11934} else {
11935
11936	// Use the handy event callback
11937	document.addEventListener( "DOMContentLoaded", completed );
11938
11939	// A fallback to window.onload, that will always work
11940	window.addEventListener( "load", completed );
11941}
11942
11943
11944
11945
11946// Multifunctional method to get and set values of a collection
11947// The value/s can optionally be executed if it's a function
11948var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
11949	var i = 0,
11950		len = elems.length,
11951		bulk = key == null;
11952
11953	// Sets many values
11954	if ( toType( key ) === "object" ) {
11955		chainable = true;
11956		for ( i in key ) {
11957			access( elems, fn, i, key[ i ], true, emptyGet, raw );
11958		}
11959
11960	// Sets one value
11961	} else if ( value !== undefined ) {
11962		chainable = true;
11963
11964		if ( !isFunction( value ) ) {
11965			raw = true;
11966		}
11967
11968		if ( bulk ) {
11969
11970			// Bulk operations run against the entire set
11971			if ( raw ) {
11972				fn.call( elems, value );
11973				fn = null;
11974
11975			// ...except when executing function values
11976			} else {
11977				bulk = fn;
11978				fn = function( elem, _key, value ) {
11979					return bulk.call( jQuery( elem ), value );
11980				};
11981			}
11982		}
11983
11984		if ( fn ) {
11985			for ( ; i < len; i++ ) {
11986				fn(
11987					elems[ i ], key, raw ?
11988						value :
11989						value.call( elems[ i ], i, fn( elems[ i ], key ) )
11990				);
11991			}
11992		}
11993	}
11994
11995	if ( chainable ) {
11996		return elems;
11997	}
11998
11999	// Gets
12000	if ( bulk ) {
12001		return fn.call( elems );
12002	}
12003
12004	return len ? fn( elems[ 0 ], key ) : emptyGet;
12005};
12006
12007
12008// Matches dashed string for camelizing
12009var rmsPrefix = /^-ms-/,
12010	rdashAlpha = /-([a-z])/g;
12011
12012// Used by camelCase as callback to replace()
12013function fcamelCase( _all, letter ) {
12014	return letter.toUpperCase();
12015}
12016
12017// Convert dashed to camelCase; used by the css and data modules
12018// Support: IE <=9 - 11, Edge 12 - 15
12019// Microsoft forgot to hump their vendor prefix (trac-9572)
12020function camelCase( string ) {
12021	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
12022}
12023var acceptData = function( owner ) {
12024
12025	// Accepts only:
12026	//  - Node
12027	//    - Node.ELEMENT_NODE
12028	//    - Node.DOCUMENT_NODE
12029	//  - Object
12030	//    - Any
12031	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
12032};
12033
12034
12035
12036
12037function Data() {
12038	this.expando = jQuery.expando + Data.uid++;
12039}
12040
12041Data.uid = 1;
12042
12043Data.prototype = {
12044
12045	cache: function( owner ) {
12046
12047		// Check if the owner object already has a cache
12048		var value = owner[ this.expando ];
12049
12050		// If not, create one
12051		if ( !value ) {
12052			value = {};
12053
12054			// We can accept data for non-element nodes in modern browsers,
12055			// but we should not, see trac-8335.
12056			// Always return an empty object.
12057			if ( acceptData( owner ) ) {
12058
12059				// If it is a node unlikely to be stringify-ed or looped over
12060				// use plain assignment
12061				if ( owner.nodeType ) {
12062					owner[ this.expando ] = value;
12063
12064				// Otherwise secure it in a non-enumerable property
12065				// configurable must be true to allow the property to be
12066				// deleted when data is removed
12067				} else {
12068					Object.defineProperty( owner, this.expando, {
12069						value: value,
12070						configurable: true
12071					} );
12072				}
12073			}
12074		}
12075
12076		return value;
12077	},
12078	set: function( owner, data, value ) {
12079		var prop,
12080			cache = this.cache( owner );
12081
12082		// Handle: [ owner, key, value ] args
12083		// Always use camelCase key (gh-2257)
12084		if ( typeof data === "string" ) {
12085			cache[ camelCase( data ) ] = value;
12086
12087		// Handle: [ owner, { properties } ] args
12088		} else {
12089
12090			// Copy the properties one-by-one to the cache object
12091			for ( prop in data ) {
12092				cache[ camelCase( prop ) ] = data[ prop ];
12093			}
12094		}
12095		return cache;
12096	},
12097	get: function( owner, key ) {
12098		return key === undefined ?
12099			this.cache( owner ) :
12100
12101			// Always use camelCase key (gh-2257)
12102			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
12103	},
12104	access: function( owner, key, value ) {
12105
12106		// In cases where either:
12107		//
12108		//   1. No key was specified
12109		//   2. A string key was specified, but no value provided
12110		//
12111		// Take the "read" path and allow the get method to determine
12112		// which value to return, respectively either:
12113		//
12114		//   1. The entire cache object
12115		//   2. The data stored at the key
12116		//
12117		if ( key === undefined ||
12118				( ( key && typeof key === "string" ) && value === undefined ) ) {
12119
12120			return this.get( owner, key );
12121		}
12122
12123		// When the key is not a string, or both a key and value
12124		// are specified, set or extend (existing objects) with either:
12125		//
12126		//   1. An object of properties
12127		//   2. A key and value
12128		//
12129		this.set( owner, key, value );
12130
12131		// Since the "set" path can have two possible entry points
12132		// return the expected data based on which path was taken[*]
12133		return value !== undefined ? value : key;
12134	},
12135	remove: function( owner, key ) {
12136		var i,
12137			cache = owner[ this.expando ];
12138
12139		if ( cache === undefined ) {
12140			return;
12141		}
12142
12143		if ( key !== undefined ) {
12144
12145			// Support array or space separated string of keys
12146			if ( Array.isArray( key ) ) {
12147
12148				// If key is an array of keys...
12149				// We always set camelCase keys, so remove that.
12150				key = key.map( camelCase );
12151			} else {
12152				key = camelCase( key );
12153
12154				// If a key with the spaces exists, use it.
12155				// Otherwise, create an array by matching non-whitespace
12156				key = key in cache ?
12157					[ key ] :
12158					( key.match( rnothtmlwhite ) || [] );
12159			}
12160
12161			i = key.length;
12162
12163			while ( i-- ) {
12164				delete cache[ key[ i ] ];
12165			}
12166		}
12167
12168		// Remove the expando if there's no more data
12169		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
12170
12171			// Support: Chrome <=35 - 45
12172			// Webkit & Blink performance suffers when deleting properties
12173			// from DOM nodes, so set to undefined instead
12174			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
12175			if ( owner.nodeType ) {
12176				owner[ this.expando ] = undefined;
12177			} else {
12178				delete owner[ this.expando ];
12179			}
12180		}
12181	},
12182	hasData: function( owner ) {
12183		var cache = owner[ this.expando ];
12184		return cache !== undefined && !jQuery.isEmptyObject( cache );
12185	}
12186};
12187var dataPriv = new Data();
12188
12189var dataUser = new Data();
12190
12191
12192
12193//	Implementation Summary
12194//
12195//	1. Enforce API surface and semantic compatibility with 1.9.x branch
12196//	2. Improve the module's maintainability by reducing the storage
12197//		paths to a single mechanism.
12198//	3. Use the same single mechanism to support "private" and "user" data.
12199//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
12200//	5. Avoid exposing implementation details on user objects (eg. expando properties)
12201//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
12202
12203var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
12204	rmultiDash = /[A-Z]/g;
12205
12206function getData( data ) {
12207	if ( data === "true" ) {
12208		return true;
12209	}
12210
12211	if ( data === "false" ) {
12212		return false;
12213	}
12214
12215	if ( data === "null" ) {
12216		return null;
12217	}
12218
12219	// Only convert to a number if it doesn't change the string
12220	if ( data === +data + "" ) {
12221		return +data;
12222	}
12223
12224	if ( rbrace.test( data ) ) {
12225		return JSON.parse( data );
12226	}
12227
12228	return data;
12229}
12230
12231function dataAttr( elem, key, data ) {
12232	var name;
12233
12234	// If nothing was found internally, try to fetch any
12235	// data from the HTML5 data-* attribute
12236	if ( data === undefined && elem.nodeType === 1 ) {
12237		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
12238		data = elem.getAttribute( name );
12239
12240		if ( typeof data === "string" ) {
12241			try {
12242				data = getData( data );
12243			} catch ( e ) {}
12244
12245			// Make sure we set the data so it isn't changed later
12246			dataUser.set( elem, key, data );
12247		} else {
12248			data = undefined;
12249		}
12250	}
12251	return data;
12252}
12253
12254jQuery.extend( {
12255	hasData: function( elem ) {
12256		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
12257	},
12258
12259	data: function( elem, name, data ) {
12260		return dataUser.access( elem, name, data );
12261	},
12262
12263	removeData: function( elem, name ) {
12264		dataUser.remove( elem, name );
12265	},
12266
12267	// TODO: Now that all calls to _data and _removeData have been replaced
12268	// with direct calls to dataPriv methods, these can be deprecated.
12269	_data: function( elem, name, data ) {
12270		return dataPriv.access( elem, name, data );
12271	},
12272
12273	_removeData: function( elem, name ) {
12274		dataPriv.remove( elem, name );
12275	}
12276} );
12277
12278jQuery.fn.extend( {
12279	data: function( key, value ) {
12280		var i, name, data,
12281			elem = this[ 0 ],
12282			attrs = elem && elem.attributes;
12283
12284		// Gets all values
12285		if ( key === undefined ) {
12286			if ( this.length ) {
12287				data = dataUser.get( elem );
12288
12289				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
12290					i = attrs.length;
12291					while ( i-- ) {
12292
12293						// Support: IE 11 only
12294						// The attrs elements can be null (trac-14894)
12295						if ( attrs[ i ] ) {
12296							name = attrs[ i ].name;
12297							if ( name.indexOf( "data-" ) === 0 ) {
12298								name = camelCase( name.slice( 5 ) );
12299								dataAttr( elem, name, data[ name ] );
12300							}
12301						}
12302					}
12303					dataPriv.set( elem, "hasDataAttrs", true );
12304				}
12305			}
12306
12307			return data;
12308		}
12309
12310		// Sets multiple values
12311		if ( typeof key === "object" ) {
12312			return this.each( function() {
12313				dataUser.set( this, key );
12314			} );
12315		}
12316
12317		return access( this, function( value ) {
12318			var data;
12319
12320			// The calling jQuery object (element matches) is not empty
12321			// (and therefore has an element appears at this[ 0 ]) and the
12322			// `value` parameter was not undefined. An empty jQuery object
12323			// will result in `undefined` for elem = this[ 0 ] which will
12324			// throw an exception if an attempt to read a data cache is made.
12325			if ( elem && value === undefined ) {
12326
12327				// Attempt to get data from the cache
12328				// The key will always be camelCased in Data
12329				data = dataUser.get( elem, key );
12330				if ( data !== undefined ) {
12331					return data;
12332				}
12333
12334				// Attempt to "discover" the data in
12335				// HTML5 custom data-* attrs
12336				data = dataAttr( elem, key );
12337				if ( data !== undefined ) {
12338					return data;
12339				}
12340
12341				// We tried really hard, but the data doesn't exist.
12342				return;
12343			}
12344
12345			// Set the data...
12346			this.each( function() {
12347
12348				// We always store the camelCased key
12349				dataUser.set( this, key, value );
12350			} );
12351		}, null, value, arguments.length > 1, null, true );
12352	},
12353
12354	removeData: function( key ) {
12355		return this.each( function() {
12356			dataUser.remove( this, key );
12357		} );
12358	}
12359} );
12360
12361
12362jQuery.extend( {
12363	queue: function( elem, type, data ) {
12364		var queue;
12365
12366		if ( elem ) {
12367			type = ( type || "fx" ) + "queue";
12368			queue = dataPriv.get( elem, type );
12369
12370			// Speed up dequeue by getting out quickly if this is just a lookup
12371			if ( data ) {
12372				if ( !queue || Array.isArray( data ) ) {
12373					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
12374				} else {
12375					queue.push( data );
12376				}
12377			}
12378			return queue || [];
12379		}
12380	},
12381
12382	dequeue: function( elem, type ) {
12383		type = type || "fx";
12384
12385		var queue = jQuery.queue( elem, type ),
12386			startLength = queue.length,
12387			fn = queue.shift(),
12388			hooks = jQuery._queueHooks( elem, type ),
12389			next = function() {
12390				jQuery.dequeue( elem, type );
12391			};
12392
12393		// If the fx queue is dequeued, always remove the progress sentinel
12394		if ( fn === "inprogress" ) {
12395			fn = queue.shift();
12396			startLength--;
12397		}
12398
12399		if ( fn ) {
12400
12401			// Add a progress sentinel to prevent the fx queue from being
12402			// automatically dequeued
12403			if ( type === "fx" ) {
12404				queue.unshift( "inprogress" );
12405			}
12406
12407			// Clear up the last queue stop function
12408			delete hooks.stop;
12409			fn.call( elem, next, hooks );
12410		}
12411
12412		if ( !startLength && hooks ) {
12413			hooks.empty.fire();
12414		}
12415	},
12416
12417	// Not public - generate a queueHooks object, or return the current one
12418	_queueHooks: function( elem, type ) {
12419		var key = type + "queueHooks";
12420		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
12421			empty: jQuery.Callbacks( "once memory" ).add( function() {
12422				dataPriv.remove( elem, [ type + "queue", key ] );
12423			} )
12424		} );
12425	}
12426} );
12427
12428jQuery.fn.extend( {
12429	queue: function( type, data ) {
12430		var setter = 2;
12431
12432		if ( typeof type !== "string" ) {
12433			data = type;
12434			type = "fx";
12435			setter--;
12436		}
12437
12438		if ( arguments.length < setter ) {
12439			return jQuery.queue( this[ 0 ], type );
12440		}
12441
12442		return data === undefined ?
12443			this :
12444			this.each( function() {
12445				var queue = jQuery.queue( this, type, data );
12446
12447				// Ensure a hooks for this queue
12448				jQuery._queueHooks( this, type );
12449
12450				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
12451					jQuery.dequeue( this, type );
12452				}
12453			} );
12454	},
12455	dequeue: function( type ) {
12456		return this.each( function() {
12457			jQuery.dequeue( this, type );
12458		} );
12459	},
12460	clearQueue: function( type ) {
12461		return this.queue( type || "fx", [] );
12462	},
12463
12464	// Get a promise resolved when queues of a certain type
12465	// are emptied (fx is the type by default)
12466	promise: function( type, obj ) {
12467		var tmp,
12468			count = 1,
12469			defer = jQuery.Deferred(),
12470			elements = this,
12471			i = this.length,
12472			resolve = function() {
12473				if ( !( --count ) ) {
12474					defer.resolveWith( elements, [ elements ] );
12475				}
12476			};
12477
12478		if ( typeof type !== "string" ) {
12479			obj = type;
12480			type = undefined;
12481		}
12482		type = type || "fx";
12483
12484		while ( i-- ) {
12485			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
12486			if ( tmp && tmp.empty ) {
12487				count++;
12488				tmp.empty.add( resolve );
12489			}
12490		}
12491		resolve();
12492		return defer.promise( obj );
12493	}
12494} );
12495var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
12496
12497var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
12498
12499
12500var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
12501
12502var documentElement = document.documentElement;
12503
12504
12505
12506	var isAttached = function( elem ) {
12507			return jQuery.contains( elem.ownerDocument, elem );
12508		},
12509		composed = { composed: true };
12510
12511	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
12512	// Check attachment across shadow DOM boundaries when possible (gh-3504)
12513	// Support: iOS 10.0-10.2 only
12514	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
12515	// leading to errors. We need to check for `getRootNode`.
12516	if ( documentElement.getRootNode ) {
12517		isAttached = function( elem ) {
12518			return jQuery.contains( elem.ownerDocument, elem ) ||
12519				elem.getRootNode( composed ) === elem.ownerDocument;
12520		};
12521	}
12522var isHiddenWithinTree = function( elem, el ) {
12523
12524		// isHiddenWithinTree might be called from jQuery#filter function;
12525		// in that case, element will be second argument
12526		elem = el || elem;
12527
12528		// Inline style trumps all
12529		return elem.style.display === "none" ||
12530			elem.style.display === "" &&
12531
12532			// Otherwise, check computed style
12533			// Support: Firefox <=43 - 45
12534			// Disconnected elements can have computed display: none, so first confirm that elem is
12535			// in the document.
12536			isAttached( elem ) &&
12537
12538			jQuery.css( elem, "display" ) === "none";
12539	};
12540
12541
12542
12543function adjustCSS( elem, prop, valueParts, tween ) {
12544	var adjusted, scale,
12545		maxIterations = 20,
12546		currentValue = tween ?
12547			function() {
12548				return tween.cur();
12549			} :
12550			function() {
12551				return jQuery.css( elem, prop, "" );
12552			},
12553		initial = currentValue(),
12554		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
12555
12556		// Starting value computation is required for potential unit mismatches
12557		initialInUnit = elem.nodeType &&
12558			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
12559			rcssNum.exec( jQuery.css( elem, prop ) );
12560
12561	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
12562
12563		// Support: Firefox <=54
12564		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
12565		initial = initial / 2;
12566
12567		// Trust units reported by jQuery.css
12568		unit = unit || initialInUnit[ 3 ];
12569
12570		// Iteratively approximate from a nonzero starting point
12571		initialInUnit = +initial || 1;
12572
12573		while ( maxIterations-- ) {
12574
12575			// Evaluate and update our best guess (doubling guesses that zero out).
12576			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
12577			jQuery.style( elem, prop, initialInUnit + unit );
12578			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
12579				maxIterations = 0;
12580			}
12581			initialInUnit = initialInUnit / scale;
12582
12583		}
12584
12585		initialInUnit = initialInUnit * 2;
12586		jQuery.style( elem, prop, initialInUnit + unit );
12587
12588		// Make sure we update the tween properties later on
12589		valueParts = valueParts || [];
12590	}
12591
12592	if ( valueParts ) {
12593		initialInUnit = +initialInUnit || +initial || 0;
12594
12595		// Apply relative offset (+=/-=) if specified
12596		adjusted = valueParts[ 1 ] ?
12597			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
12598			+valueParts[ 2 ];
12599		if ( tween ) {
12600			tween.unit = unit;
12601			tween.start = initialInUnit;
12602			tween.end = adjusted;
12603		}
12604	}
12605	return adjusted;
12606}
12607
12608
12609var defaultDisplayMap = {};
12610
12611function getDefaultDisplay( elem ) {
12612	var temp,
12613		doc = elem.ownerDocument,
12614		nodeName = elem.nodeName,
12615		display = defaultDisplayMap[ nodeName ];
12616
12617	if ( display ) {
12618		return display;
12619	}
12620
12621	temp = doc.body.appendChild( doc.createElement( nodeName ) );
12622	display = jQuery.css( temp, "display" );
12623
12624	temp.parentNode.removeChild( temp );
12625
12626	if ( display === "none" ) {
12627		display = "block";
12628	}
12629	defaultDisplayMap[ nodeName ] = display;
12630
12631	return display;
12632}
12633
12634function showHide( elements, show ) {
12635	var display, elem,
12636		values = [],
12637		index = 0,
12638		length = elements.length;
12639
12640	// Determine new display value for elements that need to change
12641	for ( ; index < length; index++ ) {
12642		elem = elements[ index ];
12643		if ( !elem.style ) {
12644			continue;
12645		}
12646
12647		display = elem.style.display;
12648		if ( show ) {
12649
12650			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
12651			// check is required in this first loop unless we have a nonempty display value (either
12652			// inline or about-to-be-restored)
12653			if ( display === "none" ) {
12654				values[ index ] = dataPriv.get( elem, "display" ) || null;
12655				if ( !values[ index ] ) {
12656					elem.style.display = "";
12657				}
12658			}
12659			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
12660				values[ index ] = getDefaultDisplay( elem );
12661			}
12662		} else {
12663			if ( display !== "none" ) {
12664				values[ index ] = "none";
12665
12666				// Remember what we're overwriting
12667				dataPriv.set( elem, "display", display );
12668			}
12669		}
12670	}
12671
12672	// Set the display of the elements in a second loop to avoid constant reflow
12673	for ( index = 0; index < length; index++ ) {
12674		if ( values[ index ] != null ) {
12675			elements[ index ].style.display = values[ index ];
12676		}
12677	}
12678
12679	return elements;
12680}
12681
12682jQuery.fn.extend( {
12683	show: function() {
12684		return showHide( this, true );
12685	},
12686	hide: function() {
12687		return showHide( this );
12688	},
12689	toggle: function( state ) {
12690		if ( typeof state === "boolean" ) {
12691			return state ? this.show() : this.hide();
12692		}
12693
12694		return this.each( function() {
12695			if ( isHiddenWithinTree( this ) ) {
12696				jQuery( this ).show();
12697			} else {
12698				jQuery( this ).hide();
12699			}
12700		} );
12701	}
12702} );
12703var rcheckableType = ( /^(?:checkbox|radio)$/i );
12704
12705var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
12706
12707var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
12708
12709
12710
12711( function() {
12712	var fragment = document.createDocumentFragment(),
12713		div = fragment.appendChild( document.createElement( "div" ) ),
12714		input = document.createElement( "input" );
12715
12716	// Support: Android 4.0 - 4.3 only
12717	// Check state lost if the name is set (trac-11217)
12718	// Support: Windows Web Apps (WWA)
12719	// `name` and `type` must use .setAttribute for WWA (trac-14901)
12720	input.setAttribute( "type", "radio" );
12721	input.setAttribute( "checked", "checked" );
12722	input.setAttribute( "name", "t" );
12723
12724	div.appendChild( input );
12725
12726	// Support: Android <=4.1 only
12727	// Older WebKit doesn't clone checked state correctly in fragments
12728	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
12729
12730	// Support: IE <=11 only
12731	// Make sure textarea (and checkbox) defaultValue is properly cloned
12732	div.innerHTML = "<textarea>x</textarea>";
12733	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
12734
12735	// Support: IE <=9 only
12736	// IE <=9 replaces <option> tags with their contents when inserted outside of
12737	// the select element.
12738	div.innerHTML = "<option></option>";
12739	support.option = !!div.lastChild;
12740} )();
12741
12742
12743// We have to close these tags to support XHTML (trac-13200)
12744var wrapMap = {
12745
12746	// XHTML parsers do not magically insert elements in the
12747	// same way that tag soup parsers do. So we cannot shorten
12748	// this by omitting <tbody> or other required elements.
12749	thead: [ 1, "<table>", "</table>" ],
12750	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
12751	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
12752	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
12753
12754	_default: [ 0, "", "" ]
12755};
12756
12757wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
12758wrapMap.th = wrapMap.td;
12759
12760// Support: IE <=9 only
12761if ( !support.option ) {
12762	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
12763}
12764
12765
12766function getAll( context, tag ) {
12767
12768	// Support: IE <=9 - 11 only
12769	// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
12770	var ret;
12771
12772	if ( typeof context.getElementsByTagName !== "undefined" ) {
12773		ret = context.getElementsByTagName( tag || "*" );
12774
12775	} else if ( typeof context.querySelectorAll !== "undefined" ) {
12776		ret = context.querySelectorAll( tag || "*" );
12777
12778	} else {
12779		ret = [];
12780	}
12781
12782	if ( tag === undefined || tag && nodeName( context, tag ) ) {
12783		return jQuery.merge( [ context ], ret );
12784	}
12785
12786	return ret;
12787}
12788
12789
12790// Mark scripts as having already been evaluated
12791function setGlobalEval( elems, refElements ) {
12792	var i = 0,
12793		l = elems.length;
12794
12795	for ( ; i < l; i++ ) {
12796		dataPriv.set(
12797			elems[ i ],
12798			"globalEval",
12799			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
12800		);
12801	}
12802}
12803
12804
12805var rhtml = /<|&#?\w+;/;
12806
12807function buildFragment( elems, context, scripts, selection, ignored ) {
12808	var elem, tmp, tag, wrap, attached, j,
12809		fragment = context.createDocumentFragment(),
12810		nodes = [],
12811		i = 0,
12812		l = elems.length;
12813
12814	for ( ; i < l; i++ ) {
12815		elem = elems[ i ];
12816
12817		if ( elem || elem === 0 ) {
12818
12819			// Add nodes directly
12820			if ( toType( elem ) === "object" ) {
12821
12822				// Support: Android <=4.0 only, PhantomJS 1 only
12823				// push.apply(_, arraylike) throws on ancient WebKit
12824				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
12825
12826			// Convert non-html into a text node
12827			} else if ( !rhtml.test( elem ) ) {
12828				nodes.push( context.createTextNode( elem ) );
12829
12830			// Convert html into DOM nodes
12831			} else {
12832				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
12833
12834				// Deserialize a standard representation
12835				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
12836				wrap = wrapMap[ tag ] || wrapMap._default;
12837				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
12838
12839				// Descend through wrappers to the right content
12840				j = wrap[ 0 ];
12841				while ( j-- ) {
12842					tmp = tmp.lastChild;
12843				}
12844
12845				// Support: Android <=4.0 only, PhantomJS 1 only
12846				// push.apply(_, arraylike) throws on ancient WebKit
12847				jQuery.merge( nodes, tmp.childNodes );
12848
12849				// Remember the top-level container
12850				tmp = fragment.firstChild;
12851
12852				// Ensure the created nodes are orphaned (trac-12392)
12853				tmp.textContent = "";
12854			}
12855		}
12856	}
12857
12858	// Remove wrapper from fragment
12859	fragment.textContent = "";
12860
12861	i = 0;
12862	while ( ( elem = nodes[ i++ ] ) ) {
12863
12864		// Skip elements already in the context collection (trac-4087)
12865		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
12866			if ( ignored ) {
12867				ignored.push( elem );
12868			}
12869			continue;
12870		}
12871
12872		attached = isAttached( elem );
12873
12874		// Append to fragment
12875		tmp = getAll( fragment.appendChild( elem ), "script" );
12876
12877		// Preserve script evaluation history
12878		if ( attached ) {
12879			setGlobalEval( tmp );
12880		}
12881
12882		// Capture executables
12883		if ( scripts ) {
12884			j = 0;
12885			while ( ( elem = tmp[ j++ ] ) ) {
12886				if ( rscriptType.test( elem.type || "" ) ) {
12887					scripts.push( elem );
12888				}
12889			}
12890		}
12891	}
12892
12893	return fragment;
12894}
12895
12896
12897var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
12898
12899function returnTrue() {
12900	return true;
12901}
12902
12903function returnFalse() {
12904	return false;
12905}
12906
12907function on( elem, types, selector, data, fn, one ) {
12908	var origFn, type;
12909
12910	// Types can be a map of types/handlers
12911	if ( typeof types === "object" ) {
12912
12913		// ( types-Object, selector, data )
12914		if ( typeof selector !== "string" ) {
12915
12916			// ( types-Object, data )
12917			data = data || selector;
12918			selector = undefined;
12919		}
12920		for ( type in types ) {
12921			on( elem, type, selector, data, types[ type ], one );
12922		}
12923		return elem;
12924	}
12925
12926	if ( data == null && fn == null ) {
12927
12928		// ( types, fn )
12929		fn = selector;
12930		data = selector = undefined;
12931	} else if ( fn == null ) {
12932		if ( typeof selector === "string" ) {
12933
12934			// ( types, selector, fn )
12935			fn = data;
12936			data = undefined;
12937		} else {
12938
12939			// ( types, data, fn )
12940			fn = data;
12941			data = selector;
12942			selector = undefined;
12943		}
12944	}
12945	if ( fn === false ) {
12946		fn = returnFalse;
12947	} else if ( !fn ) {
12948		return elem;
12949	}
12950
12951	if ( one === 1 ) {
12952		origFn = fn;
12953		fn = function( event ) {
12954
12955			// Can use an empty set, since event contains the info
12956			jQuery().off( event );
12957			return origFn.apply( this, arguments );
12958		};
12959
12960		// Use same guid so caller can remove using origFn
12961		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
12962	}
12963	return elem.each( function() {
12964		jQuery.event.add( this, types, fn, data, selector );
12965	} );
12966}
12967
12968/*
12969 * Helper functions for managing events -- not part of the public interface.
12970 * Props to Dean Edwards' addEvent library for many of the ideas.
12971 */
12972jQuery.event = {
12973
12974	global: {},
12975
12976	add: function( elem, types, handler, data, selector ) {
12977
12978		var handleObjIn, eventHandle, tmp,
12979			events, t, handleObj,
12980			special, handlers, type, namespaces, origType,
12981			elemData = dataPriv.get( elem );
12982
12983		// Only attach events to objects that accept data
12984		if ( !acceptData( elem ) ) {
12985			return;
12986		}
12987
12988		// Caller can pass in an object of custom data in lieu of the handler
12989		if ( handler.handler ) {
12990			handleObjIn = handler;
12991			handler = handleObjIn.handler;
12992			selector = handleObjIn.selector;
12993		}
12994
12995		// Ensure that invalid selectors throw exceptions at attach time
12996		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
12997		if ( selector ) {
12998			jQuery.find.matchesSelector( documentElement, selector );
12999		}
13000
13001		// Make sure that the handler has a unique ID, used to find/remove it later
13002		if ( !handler.guid ) {
13003			handler.guid = jQuery.guid++;
13004		}
13005
13006		// Init the element's event structure and main handler, if this is the first
13007		if ( !( events = elemData.events ) ) {
13008			events = elemData.events = Object.create( null );
13009		}
13010		if ( !( eventHandle = elemData.handle ) ) {
13011			eventHandle = elemData.handle = function( e ) {
13012
13013				// Discard the second event of a jQuery.event.trigger() and
13014				// when an event is called after a page has unloaded
13015				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
13016					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
13017			};
13018		}
13019
13020		// Handle multiple events separated by a space
13021		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
13022		t = types.length;
13023		while ( t-- ) {
13024			tmp = rtypenamespace.exec( types[ t ] ) || [];
13025			type = origType = tmp[ 1 ];
13026			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
13027
13028			// There *must* be a type, no attaching namespace-only handlers
13029			if ( !type ) {
13030				continue;
13031			}
13032
13033			// If event changes its type, use the special event handlers for the changed type
13034			special = jQuery.event.special[ type ] || {};
13035
13036			// If selector defined, determine special event api type, otherwise given type
13037			type = ( selector ? special.delegateType : special.bindType ) || type;
13038
13039			// Update special based on newly reset type
13040			special = jQuery.event.special[ type ] || {};
13041
13042			// handleObj is passed to all event handlers
13043			handleObj = jQuery.extend( {
13044				type: type,
13045				origType: origType,
13046				data: data,
13047				handler: handler,
13048				guid: handler.guid,
13049				selector: selector,
13050				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
13051				namespace: namespaces.join( "." )
13052			}, handleObjIn );
13053
13054			// Init the event handler queue if we're the first
13055			if ( !( handlers = events[ type ] ) ) {
13056				handlers = events[ type ] = [];
13057				handlers.delegateCount = 0;
13058
13059				// Only use addEventListener if the special events handler returns false
13060				if ( !special.setup ||
13061					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
13062
13063					if ( elem.addEventListener ) {
13064						elem.addEventListener( type, eventHandle );
13065					}
13066				}
13067			}
13068
13069			if ( special.add ) {
13070				special.add.call( elem, handleObj );
13071
13072				if ( !handleObj.handler.guid ) {
13073					handleObj.handler.guid = handler.guid;
13074				}
13075			}
13076
13077			// Add to the element's handler list, delegates in front
13078			if ( selector ) {
13079				handlers.splice( handlers.delegateCount++, 0, handleObj );
13080			} else {
13081				handlers.push( handleObj );
13082			}
13083
13084			// Keep track of which events have ever been used, for event optimization
13085			jQuery.event.global[ type ] = true;
13086		}
13087
13088	},
13089
13090	// Detach an event or set of events from an element
13091	remove: function( elem, types, handler, selector, mappedTypes ) {
13092
13093		var j, origCount, tmp,
13094			events, t, handleObj,
13095			special, handlers, type, namespaces, origType,
13096			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
13097
13098		if ( !elemData || !( events = elemData.events ) ) {
13099			return;
13100		}
13101
13102		// Once for each type.namespace in types; type may be omitted
13103		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
13104		t = types.length;
13105		while ( t-- ) {
13106			tmp = rtypenamespace.exec( types[ t ] ) || [];
13107			type = origType = tmp[ 1 ];
13108			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
13109
13110			// Unbind all events (on this namespace, if provided) for the element
13111			if ( !type ) {
13112				for ( type in events ) {
13113					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
13114				}
13115				continue;
13116			}
13117
13118			special = jQuery.event.special[ type ] || {};
13119			type = ( selector ? special.delegateType : special.bindType ) || type;
13120			handlers = events[ type ] || [];
13121			tmp = tmp[ 2 ] &&
13122				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
13123
13124			// Remove matching events
13125			origCount = j = handlers.length;
13126			while ( j-- ) {
13127				handleObj = handlers[ j ];
13128
13129				if ( ( mappedTypes || origType === handleObj.origType ) &&
13130					( !handler || handler.guid === handleObj.guid ) &&
13131					( !tmp || tmp.test( handleObj.namespace ) ) &&
13132					( !selector || selector === handleObj.selector ||
13133						selector === "**" && handleObj.selector ) ) {
13134					handlers.splice( j, 1 );
13135
13136					if ( handleObj.selector ) {
13137						handlers.delegateCount--;
13138					}
13139					if ( special.remove ) {
13140						special.remove.call( elem, handleObj );
13141					}
13142				}
13143			}
13144
13145			// Remove generic event handler if we removed something and no more handlers exist
13146			// (avoids potential for endless recursion during removal of special event handlers)
13147			if ( origCount && !handlers.length ) {
13148				if ( !special.teardown ||
13149					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
13150
13151					jQuery.removeEvent( elem, type, elemData.handle );
13152				}
13153
13154				delete events[ type ];
13155			}
13156		}
13157
13158		// Remove data and the expando if it's no longer used
13159		if ( jQuery.isEmptyObject( events ) ) {
13160			dataPriv.remove( elem, "handle events" );
13161		}
13162	},
13163
13164	dispatch: function( nativeEvent ) {
13165
13166		var i, j, ret, matched, handleObj, handlerQueue,
13167			args = new Array( arguments.length ),
13168
13169			// Make a writable jQuery.Event from the native event object
13170			event = jQuery.event.fix( nativeEvent ),
13171
13172			handlers = (
13173				dataPriv.get( this, "events" ) || Object.create( null )
13174			)[ event.type ] || [],
13175			special = jQuery.event.special[ event.type ] || {};
13176
13177		// Use the fix-ed jQuery.Event rather than the (read-only) native event
13178		args[ 0 ] = event;
13179
13180		for ( i = 1; i < arguments.length; i++ ) {
13181			args[ i ] = arguments[ i ];
13182		}
13183
13184		event.delegateTarget = this;
13185
13186		// Call the preDispatch hook for the mapped type, and let it bail if desired
13187		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
13188			return;
13189		}
13190
13191		// Determine handlers
13192		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
13193
13194		// Run delegates first; they may want to stop propagation beneath us
13195		i = 0;
13196		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
13197			event.currentTarget = matched.elem;
13198
13199			j = 0;
13200			while ( ( handleObj = matched.handlers[ j++ ] ) &&
13201				!event.isImmediatePropagationStopped() ) {
13202
13203				// If the event is namespaced, then each handler is only invoked if it is
13204				// specially universal or its namespaces are a superset of the event's.
13205				if ( !event.rnamespace || handleObj.namespace === false ||
13206					event.rnamespace.test( handleObj.namespace ) ) {
13207
13208					event.handleObj = handleObj;
13209					event.data = handleObj.data;
13210
13211					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
13212						handleObj.handler ).apply( matched.elem, args );
13213
13214					if ( ret !== undefined ) {
13215						if ( ( event.result = ret ) === false ) {
13216							event.preventDefault();
13217							event.stopPropagation();
13218						}
13219					}
13220				}
13221			}
13222		}
13223
13224		// Call the postDispatch hook for the mapped type
13225		if ( special.postDispatch ) {
13226			special.postDispatch.call( this, event );
13227		}
13228
13229		return event.result;
13230	},
13231
13232	handlers: function( event, handlers ) {
13233		var i, handleObj, sel, matchedHandlers, matchedSelectors,
13234			handlerQueue = [],
13235			delegateCount = handlers.delegateCount,
13236			cur = event.target;
13237
13238		// Find delegate handlers
13239		if ( delegateCount &&
13240
13241			// Support: IE <=9
13242			// Black-hole SVG <use> instance trees (trac-13180)
13243			cur.nodeType &&
13244
13245			// Support: Firefox <=42
13246			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
13247			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
13248			// Support: IE 11 only
13249			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
13250			!( event.type === "click" && event.button >= 1 ) ) {
13251
13252			for ( ; cur !== this; cur = cur.parentNode || this ) {
13253
13254				// Don't check non-elements (trac-13208)
13255				// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
13256				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
13257					matchedHandlers = [];
13258					matchedSelectors = {};
13259					for ( i = 0; i < delegateCount; i++ ) {
13260						handleObj = handlers[ i ];
13261
13262						// Don't conflict with Object.prototype properties (trac-13203)
13263						sel = handleObj.selector + " ";
13264
13265						if ( matchedSelectors[ sel ] === undefined ) {
13266							matchedSelectors[ sel ] = handleObj.needsContext ?
13267								jQuery( sel, this ).index( cur ) > -1 :
13268								jQuery.find( sel, this, null, [ cur ] ).length;
13269						}
13270						if ( matchedSelectors[ sel ] ) {
13271							matchedHandlers.push( handleObj );
13272						}
13273					}
13274					if ( matchedHandlers.length ) {
13275						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
13276					}
13277				}
13278			}
13279		}
13280
13281		// Add the remaining (directly-bound) handlers
13282		cur = this;
13283		if ( delegateCount < handlers.length ) {
13284			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
13285		}
13286
13287		return handlerQueue;
13288	},
13289
13290	addProp: function( name, hook ) {
13291		Object.defineProperty( jQuery.Event.prototype, name, {
13292			enumerable: true,
13293			configurable: true,
13294
13295			get: isFunction( hook ) ?
13296				function() {
13297					if ( this.originalEvent ) {
13298						return hook( this.originalEvent );
13299					}
13300				} :
13301				function() {
13302					if ( this.originalEvent ) {
13303						return this.originalEvent[ name ];
13304					}
13305				},
13306
13307			set: function( value ) {
13308				Object.defineProperty( this, name, {
13309					enumerable: true,
13310					configurable: true,
13311					writable: true,
13312					value: value
13313				} );
13314			}
13315		} );
13316	},
13317
13318	fix: function( originalEvent ) {
13319		return originalEvent[ jQuery.expando ] ?
13320			originalEvent :
13321			new jQuery.Event( originalEvent );
13322	},
13323
13324	special: {
13325		load: {
13326
13327			// Prevent triggered image.load events from bubbling to window.load
13328			noBubble: true
13329		},
13330		click: {
13331
13332			// Utilize native event to ensure correct state for checkable inputs
13333			setup: function( data ) {
13334
13335				// For mutual compressibility with _default, replace `this` access with a local var.
13336				// `|| data` is dead code meant only to preserve the variable through minification.
13337				var el = this || data;
13338
13339				// Claim the first handler
13340				if ( rcheckableType.test( el.type ) &&
13341					el.click && nodeName( el, "input" ) ) {
13342
13343					// dataPriv.set( el, "click", ... )
13344					leverageNative( el, "click", true );
13345				}
13346
13347				// Return false to allow normal processing in the caller
13348				return false;
13349			},
13350			trigger: function( data ) {
13351
13352				// For mutual compressibility with _default, replace `this` access with a local var.
13353				// `|| data` is dead code meant only to preserve the variable through minification.
13354				var el = this || data;
13355
13356				// Force setup before triggering a click
13357				if ( rcheckableType.test( el.type ) &&
13358					el.click && nodeName( el, "input" ) ) {
13359
13360					leverageNative( el, "click" );
13361				}
13362
13363				// Return non-false to allow normal event-path propagation
13364				return true;
13365			},
13366
13367			// For cross-browser consistency, suppress native .click() on links
13368			// Also prevent it if we're currently inside a leveraged native-event stack
13369			_default: function( event ) {
13370				var target = event.target;
13371				return rcheckableType.test( target.type ) &&
13372					target.click && nodeName( target, "input" ) &&
13373					dataPriv.get( target, "click" ) ||
13374					nodeName( target, "a" );
13375			}
13376		},
13377
13378		beforeunload: {
13379			postDispatch: function( event ) {
13380
13381				// Support: Firefox 20+
13382				// Firefox doesn't alert if the returnValue field is not set.
13383				if ( event.result !== undefined && event.originalEvent ) {
13384					event.originalEvent.returnValue = event.result;
13385				}
13386			}
13387		}
13388	}
13389};
13390
13391// Ensure the presence of an event listener that handles manually-triggered
13392// synthetic events by interrupting progress until reinvoked in response to
13393// *native* events that it fires directly, ensuring that state changes have
13394// already occurred before other listeners are invoked.
13395function leverageNative( el, type, isSetup ) {
13396
13397	// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add
13398	if ( !isSetup ) {
13399		if ( dataPriv.get( el, type ) === undefined ) {
13400			jQuery.event.add( el, type, returnTrue );
13401		}
13402		return;
13403	}
13404
13405	// Register the controller as a special universal handler for all event namespaces
13406	dataPriv.set( el, type, false );
13407	jQuery.event.add( el, type, {
13408		namespace: false,
13409		handler: function( event ) {
13410			var result,
13411				saved = dataPriv.get( this, type );
13412
13413			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
13414
13415				// Interrupt processing of the outer synthetic .trigger()ed event
13416				if ( !saved ) {
13417
13418					// Store arguments for use when handling the inner native event
13419					// There will always be at least one argument (an event object), so this array
13420					// will not be confused with a leftover capture object.
13421					saved = slice.call( arguments );
13422					dataPriv.set( this, type, saved );
13423
13424					// Trigger the native event and capture its result
13425					this[ type ]();
13426					result = dataPriv.get( this, type );
13427					dataPriv.set( this, type, false );
13428
13429					if ( saved !== result ) {
13430
13431						// Cancel the outer synthetic event
13432						event.stopImmediatePropagation();
13433						event.preventDefault();
13434
13435						return result;
13436					}
13437
13438				// If this is an inner synthetic event for an event with a bubbling surrogate
13439				// (focus or blur), assume that the surrogate already propagated from triggering
13440				// the native event and prevent that from happening again here.
13441				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
13442				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
13443				// less bad than duplication.
13444				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
13445					event.stopPropagation();
13446				}
13447
13448			// If this is a native event triggered above, everything is now in order
13449			// Fire an inner synthetic event with the original arguments
13450			} else if ( saved ) {
13451
13452				// ...and capture the result
13453				dataPriv.set( this, type, jQuery.event.trigger(
13454					saved[ 0 ],
13455					saved.slice( 1 ),
13456					this
13457				) );
13458
13459				// Abort handling of the native event by all jQuery handlers while allowing
13460				// native handlers on the same element to run. On target, this is achieved
13461				// by stopping immediate propagation just on the jQuery event. However,
13462				// the native event is re-wrapped by a jQuery one on each level of the
13463				// propagation so the only way to stop it for jQuery is to stop it for
13464				// everyone via native `stopPropagation()`. This is not a problem for
13465				// focus/blur which don't bubble, but it does also stop click on checkboxes
13466				// and radios. We accept this limitation.
13467				event.stopPropagation();
13468				event.isImmediatePropagationStopped = returnTrue;
13469			}
13470		}
13471	} );
13472}
13473
13474jQuery.removeEvent = function( elem, type, handle ) {
13475
13476	// This "if" is needed for plain objects
13477	if ( elem.removeEventListener ) {
13478		elem.removeEventListener( type, handle );
13479	}
13480};
13481
13482jQuery.Event = function( src, props ) {
13483
13484	// Allow instantiation without the 'new' keyword
13485	if ( !( this instanceof jQuery.Event ) ) {
13486		return new jQuery.Event( src, props );
13487	}
13488
13489	// Event object
13490	if ( src && src.type ) {
13491		this.originalEvent = src;
13492		this.type = src.type;
13493
13494		// Events bubbling up the document may have been marked as prevented
13495		// by a handler lower down the tree; reflect the correct value.
13496		this.isDefaultPrevented = src.defaultPrevented ||
13497				src.defaultPrevented === undefined &&
13498
13499				// Support: Android <=2.3 only
13500				src.returnValue === false ?
13501			returnTrue :
13502			returnFalse;
13503
13504		// Create target properties
13505		// Support: Safari <=6 - 7 only
13506		// Target should not be a text node (trac-504, trac-13143)
13507		this.target = ( src.target && src.target.nodeType === 3 ) ?
13508			src.target.parentNode :
13509			src.target;
13510
13511		this.currentTarget = src.currentTarget;
13512		this.relatedTarget = src.relatedTarget;
13513
13514	// Event type
13515	} else {
13516		this.type = src;
13517	}
13518
13519	// Put explicitly provided properties onto the event object
13520	if ( props ) {
13521		jQuery.extend( this, props );
13522	}
13523
13524	// Create a timestamp if incoming event doesn't have one
13525	this.timeStamp = src && src.timeStamp || Date.now();
13526
13527	// Mark it as fixed
13528	this[ jQuery.expando ] = true;
13529};
13530
13531// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
13532// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
13533jQuery.Event.prototype = {
13534	constructor: jQuery.Event,
13535	isDefaultPrevented: returnFalse,
13536	isPropagationStopped: returnFalse,
13537	isImmediatePropagationStopped: returnFalse,
13538	isSimulated: false,
13539
13540	preventDefault: function() {
13541		var e = this.originalEvent;
13542
13543		this.isDefaultPrevented = returnTrue;
13544
13545		if ( e && !this.isSimulated ) {
13546			e.preventDefault();
13547		}
13548	},
13549	stopPropagation: function() {
13550		var e = this.originalEvent;
13551
13552		this.isPropagationStopped = returnTrue;
13553
13554		if ( e && !this.isSimulated ) {
13555			e.stopPropagation();
13556		}
13557	},
13558	stopImmediatePropagation: function() {
13559		var e = this.originalEvent;
13560
13561		this.isImmediatePropagationStopped = returnTrue;
13562
13563		if ( e && !this.isSimulated ) {
13564			e.stopImmediatePropagation();
13565		}
13566
13567		this.stopPropagation();
13568	}
13569};
13570
13571// Includes all common event props including KeyEvent and MouseEvent specific props
13572jQuery.each( {
13573	altKey: true,
13574	bubbles: true,
13575	cancelable: true,
13576	changedTouches: true,
13577	ctrlKey: true,
13578	detail: true,
13579	eventPhase: true,
13580	metaKey: true,
13581	pageX: true,
13582	pageY: true,
13583	shiftKey: true,
13584	view: true,
13585	"char": true,
13586	code: true,
13587	charCode: true,
13588	key: true,
13589	keyCode: true,
13590	button: true,
13591	buttons: true,
13592	clientX: true,
13593	clientY: true,
13594	offsetX: true,
13595	offsetY: true,
13596	pointerId: true,
13597	pointerType: true,
13598	screenX: true,
13599	screenY: true,
13600	targetTouches: true,
13601	toElement: true,
13602	touches: true,
13603	which: true
13604}, jQuery.event.addProp );
13605
13606jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
13607
13608	function focusMappedHandler( nativeEvent ) {
13609		if ( document.documentMode ) {
13610
13611			// Support: IE 11+
13612			// Attach a single focusin/focusout handler on the document while someone wants
13613			// focus/blur. This is because the former are synchronous in IE while the latter
13614			// are async. In other browsers, all those handlers are invoked synchronously.
13615
13616			// `handle` from private data would already wrap the event, but we need
13617			// to change the `type` here.
13618			var handle = dataPriv.get( this, "handle" ),
13619				event = jQuery.event.fix( nativeEvent );
13620			event.type = nativeEvent.type === "focusin" ? "focus" : "blur";
13621			event.isSimulated = true;
13622
13623			// First, handle focusin/focusout
13624			handle( nativeEvent );
13625
13626			// ...then, handle focus/blur
13627			//
13628			// focus/blur don't bubble while focusin/focusout do; simulate the former by only
13629			// invoking the handler at the lower level.
13630			if ( event.target === event.currentTarget ) {
13631
13632				// The setup part calls `leverageNative`, which, in turn, calls
13633				// `jQuery.event.add`, so event handle will already have been set
13634				// by this point.
13635				handle( event );
13636			}
13637		} else {
13638
13639			// For non-IE browsers, attach a single capturing handler on the document
13640			// while someone wants focusin/focusout.
13641			jQuery.event.simulate( delegateType, nativeEvent.target,
13642				jQuery.event.fix( nativeEvent ) );
13643		}
13644	}
13645
13646	jQuery.event.special[ type ] = {
13647
13648		// Utilize native event if possible so blur/focus sequence is correct
13649		setup: function() {
13650
13651			var attaches;
13652
13653			// Claim the first handler
13654			// dataPriv.set( this, "focus", ... )
13655			// dataPriv.set( this, "blur", ... )
13656			leverageNative( this, type, true );
13657
13658			if ( document.documentMode ) {
13659
13660				// Support: IE 9 - 11+
13661				// We use the same native handler for focusin & focus (and focusout & blur)
13662				// so we need to coordinate setup & teardown parts between those events.
13663				// Use `delegateType` as the key as `type` is already used by `leverageNative`.
13664				attaches = dataPriv.get( this, delegateType );
13665				if ( !attaches ) {
13666					this.addEventListener( delegateType, focusMappedHandler );
13667				}
13668				dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );
13669			} else {
13670
13671				// Return false to allow normal processing in the caller
13672				return false;
13673			}
13674		},
13675		trigger: function() {
13676
13677			// Force setup before trigger
13678			leverageNative( this, type );
13679
13680			// Return non-false to allow normal event-path propagation
13681			return true;
13682		},
13683
13684		teardown: function() {
13685			var attaches;
13686
13687			if ( document.documentMode ) {
13688				attaches = dataPriv.get( this, delegateType ) - 1;
13689				if ( !attaches ) {
13690					this.removeEventListener( delegateType, focusMappedHandler );
13691					dataPriv.remove( this, delegateType );
13692				} else {
13693					dataPriv.set( this, delegateType, attaches );
13694				}
13695			} else {
13696
13697				// Return false to indicate standard teardown should be applied
13698				return false;
13699			}
13700		},
13701
13702		// Suppress native focus or blur if we're currently inside
13703		// a leveraged native-event stack
13704		_default: function( event ) {
13705			return dataPriv.get( event.target, type );
13706		},
13707
13708		delegateType: delegateType
13709	};
13710
13711	// Support: Firefox <=44
13712	// Firefox doesn't have focus(in | out) events
13713	// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
13714	//
13715	// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
13716	// focus(in | out) events fire after focus & blur events,
13717	// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
13718	// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
13719	//
13720	// Support: IE 9 - 11+
13721	// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,
13722	// attach a single handler for both events in IE.
13723	jQuery.event.special[ delegateType ] = {
13724		setup: function() {
13725
13726			// Handle: regular nodes (via `this.ownerDocument`), window
13727			// (via `this.document`) & document (via `this`).
13728			var doc = this.ownerDocument || this.document || this,
13729				dataHolder = document.documentMode ? this : doc,
13730				attaches = dataPriv.get( dataHolder, delegateType );
13731
13732			// Support: IE 9 - 11+
13733			// We use the same native handler for focusin & focus (and focusout & blur)
13734			// so we need to coordinate setup & teardown parts between those events.
13735			// Use `delegateType` as the key as `type` is already used by `leverageNative`.
13736			if ( !attaches ) {
13737				if ( document.documentMode ) {
13738					this.addEventListener( delegateType, focusMappedHandler );
13739				} else {
13740					doc.addEventListener( type, focusMappedHandler, true );
13741				}
13742			}
13743			dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );
13744		},
13745		teardown: function() {
13746			var doc = this.ownerDocument || this.document || this,
13747				dataHolder = document.documentMode ? this : doc,
13748				attaches = dataPriv.get( dataHolder, delegateType ) - 1;
13749
13750			if ( !attaches ) {
13751				if ( document.documentMode ) {
13752					this.removeEventListener( delegateType, focusMappedHandler );
13753				} else {
13754					doc.removeEventListener( type, focusMappedHandler, true );
13755				}
13756				dataPriv.remove( dataHolder, delegateType );
13757			} else {
13758				dataPriv.set( dataHolder, delegateType, attaches );
13759			}
13760		}
13761	};
13762} );
13763
13764// Create mouseenter/leave events using mouseover/out and event-time checks
13765// so that event delegation works in jQuery.
13766// Do the same for pointerenter/pointerleave and pointerover/pointerout
13767//
13768// Support: Safari 7 only
13769// Safari sends mouseenter too often; see:
13770// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
13771// for the description of the bug (it existed in older Chrome versions as well).
13772jQuery.each( {
13773	mouseenter: "mouseover",
13774	mouseleave: "mouseout",
13775	pointerenter: "pointerover",
13776	pointerleave: "pointerout"
13777}, function( orig, fix ) {
13778	jQuery.event.special[ orig ] = {
13779		delegateType: fix,
13780		bindType: fix,
13781
13782		handle: function( event ) {
13783			var ret,
13784				target = this,
13785				related = event.relatedTarget,
13786				handleObj = event.handleObj;
13787
13788			// For mouseenter/leave call the handler if related is outside the target.
13789			// NB: No relatedTarget if the mouse left/entered the browser window
13790			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
13791				event.type = handleObj.origType;
13792				ret = handleObj.handler.apply( this, arguments );
13793				event.type = fix;
13794			}
13795			return ret;
13796		}
13797	};
13798} );
13799
13800jQuery.fn.extend( {
13801
13802	on: function( types, selector, data, fn ) {
13803		return on( this, types, selector, data, fn );
13804	},
13805	one: function( types, selector, data, fn ) {
13806		return on( this, types, selector, data, fn, 1 );
13807	},
13808	off: function( types, selector, fn ) {
13809		var handleObj, type;
13810		if ( types && types.preventDefault && types.handleObj ) {
13811
13812			// ( event )  dispatched jQuery.Event
13813			handleObj = types.handleObj;
13814			jQuery( types.delegateTarget ).off(
13815				handleObj.namespace ?
13816					handleObj.origType + "." + handleObj.namespace :
13817					handleObj.origType,
13818				handleObj.selector,
13819				handleObj.handler
13820			);
13821			return this;
13822		}
13823		if ( typeof types === "object" ) {
13824
13825			// ( types-object [, selector] )
13826			for ( type in types ) {
13827				this.off( type, selector, types[ type ] );
13828			}
13829			return this;
13830		}
13831		if ( selector === false || typeof selector === "function" ) {
13832
13833			// ( types [, fn] )
13834			fn = selector;
13835			selector = undefined;
13836		}
13837		if ( fn === false ) {
13838			fn = returnFalse;
13839		}
13840		return this.each( function() {
13841			jQuery.event.remove( this, types, fn, selector );
13842		} );
13843	}
13844} );
13845
13846
13847var
13848
13849	// Support: IE <=10 - 11, Edge 12 - 13 only
13850	// In IE/Edge using regex groups here causes severe slowdowns.
13851	// See https://connect.microsoft.com/IE/feedback/details/1736512/
13852	rnoInnerhtml = /<script|<style|<link/i,
13853
13854	// checked="checked" or checked
13855	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
13856
13857	rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
13858
13859// Prefer a tbody over its parent table for containing new rows
13860function manipulationTarget( elem, content ) {
13861	if ( nodeName( elem, "table" ) &&
13862		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
13863
13864		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
13865	}
13866
13867	return elem;
13868}
13869
13870// Replace/restore the type attribute of script elements for safe DOM manipulation
13871function disableScript( elem ) {
13872	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
13873	return elem;
13874}
13875function restoreScript( elem ) {
13876	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
13877		elem.type = elem.type.slice( 5 );
13878	} else {
13879		elem.removeAttribute( "type" );
13880	}
13881
13882	return elem;
13883}
13884
13885function cloneCopyEvent( src, dest ) {
13886	var i, l, type, pdataOld, udataOld, udataCur, events;
13887
13888	if ( dest.nodeType !== 1 ) {
13889		return;
13890	}
13891
13892	// 1. Copy private data: events, handlers, etc.
13893	if ( dataPriv.hasData( src ) ) {
13894		pdataOld = dataPriv.get( src );
13895		events = pdataOld.events;
13896
13897		if ( events ) {
13898			dataPriv.remove( dest, "handle events" );
13899
13900			for ( type in events ) {
13901				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
13902					jQuery.event.add( dest, type, events[ type ][ i ] );
13903				}
13904			}
13905		}
13906	}
13907
13908	// 2. Copy user data
13909	if ( dataUser.hasData( src ) ) {
13910		udataOld = dataUser.access( src );
13911		udataCur = jQuery.extend( {}, udataOld );
13912
13913		dataUser.set( dest, udataCur );
13914	}
13915}
13916
13917// Fix IE bugs, see support tests
13918function fixInput( src, dest ) {
13919	var nodeName = dest.nodeName.toLowerCase();
13920
13921	// Fails to persist the checked state of a cloned checkbox or radio button.
13922	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
13923		dest.checked = src.checked;
13924
13925	// Fails to return the selected option to the default selected state when cloning options
13926	} else if ( nodeName === "input" || nodeName === "textarea" ) {
13927		dest.defaultValue = src.defaultValue;
13928	}
13929}
13930
13931function domManip( collection, args, callback, ignored ) {
13932
13933	// Flatten any nested arrays
13934	args = flat( args );
13935
13936	var fragment, first, scripts, hasScripts, node, doc,
13937		i = 0,
13938		l = collection.length,
13939		iNoClone = l - 1,
13940		value = args[ 0 ],
13941		valueIsFunction = isFunction( value );
13942
13943	// We can't cloneNode fragments that contain checked, in WebKit
13944	if ( valueIsFunction ||
13945			( l > 1 && typeof value === "string" &&
13946				!support.checkClone && rchecked.test( value ) ) ) {
13947		return collection.each( function( index ) {
13948			var self = collection.eq( index );
13949			if ( valueIsFunction ) {
13950				args[ 0 ] = value.call( this, index, self.html() );
13951			}
13952			domManip( self, args, callback, ignored );
13953		} );
13954	}
13955
13956	if ( l ) {
13957		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
13958		first = fragment.firstChild;
13959
13960		if ( fragment.childNodes.length === 1 ) {
13961			fragment = first;
13962		}
13963
13964		// Require either new content or an interest in ignored elements to invoke the callback
13965		if ( first || ignored ) {
13966			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
13967			hasScripts = scripts.length;
13968
13969			// Use the original fragment for the last item
13970			// instead of the first because it can end up
13971			// being emptied incorrectly in certain situations (trac-8070).
13972			for ( ; i < l; i++ ) {
13973				node = fragment;
13974
13975				if ( i !== iNoClone ) {
13976					node = jQuery.clone( node, true, true );
13977
13978					// Keep references to cloned scripts for later restoration
13979					if ( hasScripts ) {
13980
13981						// Support: Android <=4.0 only, PhantomJS 1 only
13982						// push.apply(_, arraylike) throws on ancient WebKit
13983						jQuery.merge( scripts, getAll( node, "script" ) );
13984					}
13985				}
13986
13987				callback.call( collection[ i ], node, i );
13988			}
13989
13990			if ( hasScripts ) {
13991				doc = scripts[ scripts.length - 1 ].ownerDocument;
13992
13993				// Re-enable scripts
13994				jQuery.map( scripts, restoreScript );
13995
13996				// Evaluate executable scripts on first document insertion
13997				for ( i = 0; i < hasScripts; i++ ) {
13998					node = scripts[ i ];
13999					if ( rscriptType.test( node.type || "" ) &&
14000						!dataPriv.access( node, "globalEval" ) &&
14001						jQuery.contains( doc, node ) ) {
14002
14003						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
14004
14005							// Optional AJAX dependency, but won't run scripts if not present
14006							if ( jQuery._evalUrl && !node.noModule ) {
14007								jQuery._evalUrl( node.src, {
14008									nonce: node.nonce || node.getAttribute( "nonce" )
14009								}, doc );
14010							}
14011						} else {
14012
14013							// Unwrap a CDATA section containing script contents. This shouldn't be
14014							// needed as in XML documents they're already not visible when
14015							// inspecting element contents and in HTML documents they have no
14016							// meaning but we're preserving that logic for backwards compatibility.
14017							// This will be removed completely in 4.0. See gh-4904.
14018							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
14019						}
14020					}
14021				}
14022			}
14023		}
14024	}
14025
14026	return collection;
14027}
14028
14029function remove( elem, selector, keepData ) {
14030	var node,
14031		nodes = selector ? jQuery.filter( selector, elem ) : elem,
14032		i = 0;
14033
14034	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
14035		if ( !keepData && node.nodeType === 1 ) {
14036			jQuery.cleanData( getAll( node ) );
14037		}
14038
14039		if ( node.parentNode ) {
14040			if ( keepData && isAttached( node ) ) {
14041				setGlobalEval( getAll( node, "script" ) );
14042			}
14043			node.parentNode.removeChild( node );
14044		}
14045	}
14046
14047	return elem;
14048}
14049
14050jQuery.extend( {
14051	htmlPrefilter: function( html ) {
14052		return html;
14053	},
14054
14055	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
14056		var i, l, srcElements, destElements,
14057			clone = elem.cloneNode( true ),
14058			inPage = isAttached( elem );
14059
14060		// Fix IE cloning issues
14061		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
14062				!jQuery.isXMLDoc( elem ) ) {
14063
14064			// We eschew jQuery#find here for performance reasons:
14065			// https://jsperf.com/getall-vs-sizzle/2
14066			destElements = getAll( clone );
14067			srcElements = getAll( elem );
14068
14069			for ( i = 0, l = srcElements.length; i < l; i++ ) {
14070				fixInput( srcElements[ i ], destElements[ i ] );
14071			}
14072		}
14073
14074		// Copy the events from the original to the clone
14075		if ( dataAndEvents ) {
14076			if ( deepDataAndEvents ) {
14077				srcElements = srcElements || getAll( elem );
14078				destElements = destElements || getAll( clone );
14079
14080				for ( i = 0, l = srcElements.length; i < l; i++ ) {
14081					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
14082				}
14083			} else {
14084				cloneCopyEvent( elem, clone );
14085			}
14086		}
14087
14088		// Preserve script evaluation history
14089		destElements = getAll( clone, "script" );
14090		if ( destElements.length > 0 ) {
14091			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
14092		}
14093
14094		// Return the cloned set
14095		return clone;
14096	},
14097
14098	cleanData: function( elems ) {
14099		var data, elem, type,
14100			special = jQuery.event.special,
14101			i = 0;
14102
14103		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
14104			if ( acceptData( elem ) ) {
14105				if ( ( data = elem[ dataPriv.expando ] ) ) {
14106					if ( data.events ) {
14107						for ( type in data.events ) {
14108							if ( special[ type ] ) {
14109								jQuery.event.remove( elem, type );
14110
14111							// This is a shortcut to avoid jQuery.event.remove's overhead
14112							} else {
14113								jQuery.removeEvent( elem, type, data.handle );
14114							}
14115						}
14116					}
14117
14118					// Support: Chrome <=35 - 45+
14119					// Assign undefined instead of using delete, see Data#remove
14120					elem[ dataPriv.expando ] = undefined;
14121				}
14122				if ( elem[ dataUser.expando ] ) {
14123
14124					// Support: Chrome <=35 - 45+
14125					// Assign undefined instead of using delete, see Data#remove
14126					elem[ dataUser.expando ] = undefined;
14127				}
14128			}
14129		}
14130	}
14131} );
14132
14133jQuery.fn.extend( {
14134	detach: function( selector ) {
14135		return remove( this, selector, true );
14136	},
14137
14138	remove: function( selector ) {
14139		return remove( this, selector );
14140	},
14141
14142	text: function( value ) {
14143		return access( this, function( value ) {
14144			return value === undefined ?
14145				jQuery.text( this ) :
14146				this.empty().each( function() {
14147					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
14148						this.textContent = value;
14149					}
14150				} );
14151		}, null, value, arguments.length );
14152	},
14153
14154	append: function() {
14155		return domManip( this, arguments, function( elem ) {
14156			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
14157				var target = manipulationTarget( this, elem );
14158				target.appendChild( elem );
14159			}
14160		} );
14161	},
14162
14163	prepend: function() {
14164		return domManip( this, arguments, function( elem ) {
14165			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
14166				var target = manipulationTarget( this, elem );
14167				target.insertBefore( elem, target.firstChild );
14168			}
14169		} );
14170	},
14171
14172	before: function() {
14173		return domManip( this, arguments, function( elem ) {
14174			if ( this.parentNode ) {
14175				this.parentNode.insertBefore( elem, this );
14176			}
14177		} );
14178	},
14179
14180	after: function() {
14181		return domManip( this, arguments, function( elem ) {
14182			if ( this.parentNode ) {
14183				this.parentNode.insertBefore( elem, this.nextSibling );
14184			}
14185		} );
14186	},
14187
14188	empty: function() {
14189		var elem,
14190			i = 0;
14191
14192		for ( ; ( elem = this[ i ] ) != null; i++ ) {
14193			if ( elem.nodeType === 1 ) {
14194
14195				// Prevent memory leaks
14196				jQuery.cleanData( getAll( elem, false ) );
14197
14198				// Remove any remaining nodes
14199				elem.textContent = "";
14200			}
14201		}
14202
14203		return this;
14204	},
14205
14206	clone: function( dataAndEvents, deepDataAndEvents ) {
14207		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
14208		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
14209
14210		return this.map( function() {
14211			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
14212		} );
14213	},
14214
14215	html: function( value ) {
14216		return access( this, function( value ) {
14217			var elem = this[ 0 ] || {},
14218				i = 0,
14219				l = this.length;
14220
14221			if ( value === undefined && elem.nodeType === 1 ) {
14222				return elem.innerHTML;
14223			}
14224
14225			// See if we can take a shortcut and just use innerHTML
14226			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
14227				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
14228
14229				value = jQuery.htmlPrefilter( value );
14230
14231				try {
14232					for ( ; i < l; i++ ) {
14233						elem = this[ i ] || {};
14234
14235						// Remove element nodes and prevent memory leaks
14236						if ( elem.nodeType === 1 ) {
14237							jQuery.cleanData( getAll( elem, false ) );
14238							elem.innerHTML = value;
14239						}
14240					}
14241
14242					elem = 0;
14243
14244				// If using innerHTML throws an exception, use the fallback method
14245				} catch ( e ) {}
14246			}
14247
14248			if ( elem ) {
14249				this.empty().append( value );
14250			}
14251		}, null, value, arguments.length );
14252	},
14253
14254	replaceWith: function() {
14255		var ignored = [];
14256
14257		// Make the changes, replacing each non-ignored context element with the new content
14258		return domManip( this, arguments, function( elem ) {
14259			var parent = this.parentNode;
14260
14261			if ( jQuery.inArray( this, ignored ) < 0 ) {
14262				jQuery.cleanData( getAll( this ) );
14263				if ( parent ) {
14264					parent.replaceChild( elem, this );
14265				}
14266			}
14267
14268		// Force callback invocation
14269		}, ignored );
14270	}
14271} );
14272
14273jQuery.each( {
14274	appendTo: "append",
14275	prependTo: "prepend",
14276	insertBefore: "before",
14277	insertAfter: "after",
14278	replaceAll: "replaceWith"
14279}, function( name, original ) {
14280	jQuery.fn[ name ] = function( selector ) {
14281		var elems,
14282			ret = [],
14283			insert = jQuery( selector ),
14284			last = insert.length - 1,
14285			i = 0;
14286
14287		for ( ; i <= last; i++ ) {
14288			elems = i === last ? this : this.clone( true );
14289			jQuery( insert[ i ] )[ original ]( elems );
14290
14291			// Support: Android <=4.0 only, PhantomJS 1 only
14292			// .get() because push.apply(_, arraylike) throws on ancient WebKit
14293			push.apply( ret, elems.get() );
14294		}
14295
14296		return this.pushStack( ret );
14297	};
14298} );
14299var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
14300
14301var rcustomProp = /^--/;
14302
14303
14304var getStyles = function( elem ) {
14305
14306		// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)
14307		// IE throws on elements created in popups
14308		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
14309		var view = elem.ownerDocument.defaultView;
14310
14311		if ( !view || !view.opener ) {
14312			view = window;
14313		}
14314
14315		return view.getComputedStyle( elem );
14316	};
14317
14318var swap = function( elem, options, callback ) {
14319	var ret, name,
14320		old = {};
14321
14322	// Remember the old values, and insert the new ones
14323	for ( name in options ) {
14324		old[ name ] = elem.style[ name ];
14325		elem.style[ name ] = options[ name ];
14326	}
14327
14328	ret = callback.call( elem );
14329
14330	// Revert the old values
14331	for ( name in options ) {
14332		elem.style[ name ] = old[ name ];
14333	}
14334
14335	return ret;
14336};
14337
14338
14339var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
14340
14341
14342
14343( function() {
14344
14345	// Executing both pixelPosition & boxSizingReliable tests require only one layout
14346	// so they're executed at the same time to save the second computation.
14347	function computeStyleTests() {
14348
14349		// This is a singleton, we need to execute it only once
14350		if ( !div ) {
14351			return;
14352		}
14353
14354		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
14355			"margin-top:1px;padding:0;border:0";
14356		div.style.cssText =
14357			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
14358			"margin:auto;border:1px;padding:1px;" +
14359			"width:60%;top:1%";
14360		documentElement.appendChild( container ).appendChild( div );
14361
14362		var divStyle = window.getComputedStyle( div );
14363		pixelPositionVal = divStyle.top !== "1%";
14364
14365		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
14366		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
14367
14368		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
14369		// Some styles come back with percentage values, even though they shouldn't
14370		div.style.right = "60%";
14371		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
14372
14373		// Support: IE 9 - 11 only
14374		// Detect misreporting of content dimensions for box-sizing:border-box elements
14375		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
14376
14377		// Support: IE 9 only
14378		// Detect overflow:scroll screwiness (gh-3699)
14379		// Support: Chrome <=64
14380		// Don't get tricked when zoom affects offsetWidth (gh-4029)
14381		div.style.position = "absolute";
14382		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
14383
14384		documentElement.removeChild( container );
14385
14386		// Nullify the div so it wouldn't be stored in the memory and
14387		// it will also be a sign that checks already performed
14388		div = null;
14389	}
14390
14391	function roundPixelMeasures( measure ) {
14392		return Math.round( parseFloat( measure ) );
14393	}
14394
14395	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
14396		reliableTrDimensionsVal, reliableMarginLeftVal,
14397		container = document.createElement( "div" ),
14398		div = document.createElement( "div" );
14399
14400	// Finish early in limited (non-browser) environments
14401	if ( !div.style ) {
14402		return;
14403	}
14404
14405	// Support: IE <=9 - 11 only
14406	// Style of cloned element affects source element cloned (trac-8908)
14407	div.style.backgroundClip = "content-box";
14408	div.cloneNode( true ).style.backgroundClip = "";
14409	support.clearCloneStyle = div.style.backgroundClip === "content-box";
14410
14411	jQuery.extend( support, {
14412		boxSizingReliable: function() {
14413			computeStyleTests();
14414			return boxSizingReliableVal;
14415		},
14416		pixelBoxStyles: function() {
14417			computeStyleTests();
14418			return pixelBoxStylesVal;
14419		},
14420		pixelPosition: function() {
14421			computeStyleTests();
14422			return pixelPositionVal;
14423		},
14424		reliableMarginLeft: function() {
14425			computeStyleTests();
14426			return reliableMarginLeftVal;
14427		},
14428		scrollboxSize: function() {
14429			computeStyleTests();
14430			return scrollboxSizeVal;
14431		},
14432
14433		// Support: IE 9 - 11+, Edge 15 - 18+
14434		// IE/Edge misreport `getComputedStyle` of table rows with width/height
14435		// set in CSS while `offset*` properties report correct values.
14436		// Behavior in IE 9 is more subtle than in newer versions & it passes
14437		// some versions of this test; make sure not to make it pass there!
14438		//
14439		// Support: Firefox 70+
14440		// Only Firefox includes border widths
14441		// in computed dimensions. (gh-4529)
14442		reliableTrDimensions: function() {
14443			var table, tr, trChild, trStyle;
14444			if ( reliableTrDimensionsVal == null ) {
14445				table = document.createElement( "table" );
14446				tr = document.createElement( "tr" );
14447				trChild = document.createElement( "div" );
14448
14449				table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
14450				tr.style.cssText = "box-sizing:content-box;border:1px solid";
14451
14452				// Support: Chrome 86+
14453				// Height set through cssText does not get applied.
14454				// Computed height then comes back as 0.
14455				tr.style.height = "1px";
14456				trChild.style.height = "9px";
14457
14458				// Support: Android 8 Chrome 86+
14459				// In our bodyBackground.html iframe,
14460				// display for all div elements is set to "inline",
14461				// which causes a problem only in Android 8 Chrome 86.
14462				// Ensuring the div is `display: block`
14463				// gets around this issue.
14464				trChild.style.display = "block";
14465
14466				documentElement
14467					.appendChild( table )
14468					.appendChild( tr )
14469					.appendChild( trChild );
14470
14471				trStyle = window.getComputedStyle( tr );
14472				reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
14473					parseInt( trStyle.borderTopWidth, 10 ) +
14474					parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
14475
14476				documentElement.removeChild( table );
14477			}
14478			return reliableTrDimensionsVal;
14479		}
14480	} );
14481} )();
14482
14483
14484function curCSS( elem, name, computed ) {
14485	var width, minWidth, maxWidth, ret,
14486		isCustomProp = rcustomProp.test( name ),
14487
14488		// Support: Firefox 51+
14489		// Retrieving style before computed somehow
14490		// fixes an issue with getting wrong values
14491		// on detached elements
14492		style = elem.style;
14493
14494	computed = computed || getStyles( elem );
14495
14496	// getPropertyValue is needed for:
14497	//   .css('filter') (IE 9 only, trac-12537)
14498	//   .css('--customProperty) (gh-3144)
14499	if ( computed ) {
14500
14501		// Support: IE <=9 - 11+
14502		// IE only supports `"float"` in `getPropertyValue`; in computed styles
14503		// it's only available as `"cssFloat"`. We no longer modify properties
14504		// sent to `.css()` apart from camelCasing, so we need to check both.
14505		// Normally, this would create difference in behavior: if
14506		// `getPropertyValue` returns an empty string, the value returned
14507		// by `.css()` would be `undefined`. This is usually the case for
14508		// disconnected elements. However, in IE even disconnected elements
14509		// with no styles return `"none"` for `getPropertyValue( "float" )`
14510		ret = computed.getPropertyValue( name ) || computed[ name ];
14511
14512		if ( isCustomProp && ret ) {
14513
14514			// Support: Firefox 105+, Chrome <=105+
14515			// Spec requires trimming whitespace for custom properties (gh-4926).
14516			// Firefox only trims leading whitespace. Chrome just collapses
14517			// both leading & trailing whitespace to a single space.
14518			//
14519			// Fall back to `undefined` if empty string returned.
14520			// This collapses a missing definition with property defined
14521			// and set to an empty string but there's no standard API
14522			// allowing us to differentiate them without a performance penalty
14523			// and returning `undefined` aligns with older jQuery.
14524			//
14525			// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
14526			// as whitespace while CSS does not, but this is not a problem
14527			// because CSS preprocessing replaces them with U+000A LINE FEED
14528			// (which *is* CSS whitespace)
14529			// https://www.w3.org/TR/css-syntax-3/#input-preprocessing
14530			ret = ret.replace( rtrimCSS, "$1" ) || undefined;
14531		}
14532
14533		if ( ret === "" && !isAttached( elem ) ) {
14534			ret = jQuery.style( elem, name );
14535		}
14536
14537		// A tribute to the "awesome hack by Dean Edwards"
14538		// Android Browser returns percentage for some values,
14539		// but width seems to be reliably pixels.
14540		// This is against the CSSOM draft spec:
14541		// https://drafts.csswg.org/cssom/#resolved-values
14542		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
14543
14544			// Remember the original values
14545			width = style.width;
14546			minWidth = style.minWidth;
14547			maxWidth = style.maxWidth;
14548
14549			// Put in the new values to get a computed value out
14550			style.minWidth = style.maxWidth = style.width = ret;
14551			ret = computed.width;
14552
14553			// Revert the changed values
14554			style.width = width;
14555			style.minWidth = minWidth;
14556			style.maxWidth = maxWidth;
14557		}
14558	}
14559
14560	return ret !== undefined ?
14561
14562		// Support: IE <=9 - 11 only
14563		// IE returns zIndex value as an integer.
14564		ret + "" :
14565		ret;
14566}
14567
14568
14569function addGetHookIf( conditionFn, hookFn ) {
14570
14571	// Define the hook, we'll check on the first run if it's really needed.
14572	return {
14573		get: function() {
14574			if ( conditionFn() ) {
14575
14576				// Hook not needed (or it's not possible to use it due
14577				// to missing dependency), remove it.
14578				delete this.get;
14579				return;
14580			}
14581
14582			// Hook needed; redefine it so that the support test is not executed again.
14583			return ( this.get = hookFn ).apply( this, arguments );
14584		}
14585	};
14586}
14587
14588
14589var cssPrefixes = [ "Webkit", "Moz", "ms" ],
14590	emptyStyle = document.createElement( "div" ).style,
14591	vendorProps = {};
14592
14593// Return a vendor-prefixed property or undefined
14594function vendorPropName( name ) {
14595
14596	// Check for vendor prefixed names
14597	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
14598		i = cssPrefixes.length;
14599
14600	while ( i-- ) {
14601		name = cssPrefixes[ i ] + capName;
14602		if ( name in emptyStyle ) {
14603			return name;
14604		}
14605	}
14606}
14607
14608// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
14609function finalPropName( name ) {
14610	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
14611
14612	if ( final ) {
14613		return final;
14614	}
14615	if ( name in emptyStyle ) {
14616		return name;
14617	}
14618	return vendorProps[ name ] = vendorPropName( name ) || name;
14619}
14620
14621
14622var
14623
14624	// Swappable if display is none or starts with table
14625	// except "table", "table-cell", or "table-caption"
14626	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
14627	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
14628	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
14629	cssNormalTransform = {
14630		letterSpacing: "0",
14631		fontWeight: "400"
14632	};
14633
14634function setPositiveNumber( _elem, value, subtract ) {
14635
14636	// Any relative (+/-) values have already been
14637	// normalized at this point
14638	var matches = rcssNum.exec( value );
14639	return matches ?
14640
14641		// Guard against undefined "subtract", e.g., when used as in cssHooks
14642		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
14643		value;
14644}
14645
14646function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
14647	var i = dimension === "width" ? 1 : 0,
14648		extra = 0,
14649		delta = 0,
14650		marginDelta = 0;
14651
14652	// Adjustment may not be necessary
14653	if ( box === ( isBorderBox ? "border" : "content" ) ) {
14654		return 0;
14655	}
14656
14657	for ( ; i < 4; i += 2 ) {
14658
14659		// Both box models exclude margin
14660		// Count margin delta separately to only add it after scroll gutter adjustment.
14661		// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).
14662		if ( box === "margin" ) {
14663			marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
14664		}
14665
14666		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
14667		if ( !isBorderBox ) {
14668
14669			// Add padding
14670			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
14671
14672			// For "border" or "margin", add border
14673			if ( box !== "padding" ) {
14674				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
14675
14676			// But still keep track of it otherwise
14677			} else {
14678				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
14679			}
14680
14681		// If we get here with a border-box (content + padding + border), we're seeking "content" or
14682		// "padding" or "margin"
14683		} else {
14684
14685			// For "content", subtract padding
14686			if ( box === "content" ) {
14687				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
14688			}
14689
14690			// For "content" or "padding", subtract border
14691			if ( box !== "margin" ) {
14692				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
14693			}
14694		}
14695	}
14696
14697	// Account for positive content-box scroll gutter when requested by providing computedVal
14698	if ( !isBorderBox && computedVal >= 0 ) {
14699
14700		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
14701		// Assuming integer scroll gutter, subtract the rest and round down
14702		delta += Math.max( 0, Math.ceil(
14703			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
14704			computedVal -
14705			delta -
14706			extra -
14707			0.5
14708
14709		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
14710		// Use an explicit zero to avoid NaN (gh-3964)
14711		) ) || 0;
14712	}
14713
14714	return delta + marginDelta;
14715}
14716
14717function getWidthOrHeight( elem, dimension, extra ) {
14718
14719	// Start with computed style
14720	var styles = getStyles( elem ),
14721
14722		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
14723		// Fake content-box until we know it's needed to know the true value.
14724		boxSizingNeeded = !support.boxSizingReliable() || extra,
14725		isBorderBox = boxSizingNeeded &&
14726			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
14727		valueIsBorderBox = isBorderBox,
14728
14729		val = curCSS( elem, dimension, styles ),
14730		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
14731
14732	// Support: Firefox <=54
14733	// Return a confounding non-pixel value or feign ignorance, as appropriate.
14734	if ( rnumnonpx.test( val ) ) {
14735		if ( !extra ) {
14736			return val;
14737		}
14738		val = "auto";
14739	}
14740
14741
14742	// Support: IE 9 - 11 only
14743	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
14744	// In those cases, the computed value can be trusted to be border-box.
14745	if ( ( !support.boxSizingReliable() && isBorderBox ||
14746
14747		// Support: IE 10 - 11+, Edge 15 - 18+
14748		// IE/Edge misreport `getComputedStyle` of table rows with width/height
14749		// set in CSS while `offset*` properties report correct values.
14750		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
14751		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
14752
14753		// Fall back to offsetWidth/offsetHeight when value is "auto"
14754		// This happens for inline elements with no explicit setting (gh-3571)
14755		val === "auto" ||
14756
14757		// Support: Android <=4.1 - 4.3 only
14758		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
14759		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
14760
14761		// Make sure the element is visible & connected
14762		elem.getClientRects().length ) {
14763
14764		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
14765
14766		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
14767		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
14768		// retrieved value as a content box dimension.
14769		valueIsBorderBox = offsetProp in elem;
14770		if ( valueIsBorderBox ) {
14771			val = elem[ offsetProp ];
14772		}
14773	}
14774
14775	// Normalize "" and auto
14776	val = parseFloat( val ) || 0;
14777
14778	// Adjust for the element's box model
14779	return ( val +
14780		boxModelAdjustment(
14781			elem,
14782			dimension,
14783			extra || ( isBorderBox ? "border" : "content" ),
14784			valueIsBorderBox,
14785			styles,
14786
14787			// Provide the current computed size to request scroll gutter calculation (gh-3589)
14788			val
14789		)
14790	) + "px";
14791}
14792
14793jQuery.extend( {
14794
14795	// Add in style property hooks for overriding the default
14796	// behavior of getting and setting a style property
14797	cssHooks: {
14798		opacity: {
14799			get: function( elem, computed ) {
14800				if ( computed ) {
14801
14802					// We should always get a number back from opacity
14803					var ret = curCSS( elem, "opacity" );
14804					return ret === "" ? "1" : ret;
14805				}
14806			}
14807		}
14808	},
14809
14810	// Don't automatically add "px" to these possibly-unitless properties
14811	cssNumber: {
14812		animationIterationCount: true,
14813		aspectRatio: true,
14814		borderImageSlice: true,
14815		columnCount: true,
14816		flexGrow: true,
14817		flexShrink: true,
14818		fontWeight: true,
14819		gridArea: true,
14820		gridColumn: true,
14821		gridColumnEnd: true,
14822		gridColumnStart: true,
14823		gridRow: true,
14824		gridRowEnd: true,
14825		gridRowStart: true,
14826		lineHeight: true,
14827		opacity: true,
14828		order: true,
14829		orphans: true,
14830		scale: true,
14831		widows: true,
14832		zIndex: true,
14833		zoom: true,
14834
14835		// SVG-related
14836		fillOpacity: true,
14837		floodOpacity: true,
14838		stopOpacity: true,
14839		strokeMiterlimit: true,
14840		strokeOpacity: true
14841	},
14842
14843	// Add in properties whose names you wish to fix before
14844	// setting or getting the value
14845	cssProps: {},
14846
14847	// Get and set the style property on a DOM Node
14848	style: function( elem, name, value, extra ) {
14849
14850		// Don't set styles on text and comment nodes
14851		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
14852			return;
14853		}
14854
14855		// Make sure that we're working with the right name
14856		var ret, type, hooks,
14857			origName = camelCase( name ),
14858			isCustomProp = rcustomProp.test( name ),
14859			style = elem.style;
14860
14861		// Make sure that we're working with the right name. We don't
14862		// want to query the value if it is a CSS custom property
14863		// since they are user-defined.
14864		if ( !isCustomProp ) {
14865			name = finalPropName( origName );
14866		}
14867
14868		// Gets hook for the prefixed version, then unprefixed version
14869		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
14870
14871		// Check if we're setting a value
14872		if ( value !== undefined ) {
14873			type = typeof value;
14874
14875			// Convert "+=" or "-=" to relative numbers (trac-7345)
14876			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
14877				value = adjustCSS( elem, name, ret );
14878
14879				// Fixes bug trac-9237
14880				type = "number";
14881			}
14882
14883			// Make sure that null and NaN values aren't set (trac-7116)
14884			if ( value == null || value !== value ) {
14885				return;
14886			}
14887
14888			// If a number was passed in, add the unit (except for certain CSS properties)
14889			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
14890			// "px" to a few hardcoded values.
14891			if ( type === "number" && !isCustomProp ) {
14892				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
14893			}
14894
14895			// background-* props affect original clone's values
14896			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
14897				style[ name ] = "inherit";
14898			}
14899
14900			// If a hook was provided, use that value, otherwise just set the specified value
14901			if ( !hooks || !( "set" in hooks ) ||
14902				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
14903
14904				if ( isCustomProp ) {
14905					style.setProperty( name, value );
14906				} else {
14907					style[ name ] = value;
14908				}
14909			}
14910
14911		} else {
14912
14913			// If a hook was provided get the non-computed value from there
14914			if ( hooks && "get" in hooks &&
14915				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
14916
14917				return ret;
14918			}
14919
14920			// Otherwise just get the value from the style object
14921			return style[ name ];
14922		}
14923	},
14924
14925	css: function( elem, name, extra, styles ) {
14926		var val, num, hooks,
14927			origName = camelCase( name ),
14928			isCustomProp = rcustomProp.test( name );
14929
14930		// Make sure that we're working with the right name. We don't
14931		// want to modify the value if it is a CSS custom property
14932		// since they are user-defined.
14933		if ( !isCustomProp ) {
14934			name = finalPropName( origName );
14935		}
14936
14937		// Try prefixed name followed by the unprefixed name
14938		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
14939
14940		// If a hook was provided get the computed value from there
14941		if ( hooks && "get" in hooks ) {
14942			val = hooks.get( elem, true, extra );
14943		}
14944
14945		// Otherwise, if a way to get the computed value exists, use that
14946		if ( val === undefined ) {
14947			val = curCSS( elem, name, styles );
14948		}
14949
14950		// Convert "normal" to computed value
14951		if ( val === "normal" && name in cssNormalTransform ) {
14952			val = cssNormalTransform[ name ];
14953		}
14954
14955		// Make numeric if forced or a qualifier was provided and val looks numeric
14956		if ( extra === "" || extra ) {
14957			num = parseFloat( val );
14958			return extra === true || isFinite( num ) ? num || 0 : val;
14959		}
14960
14961		return val;
14962	}
14963} );
14964
14965jQuery.each( [ "height", "width" ], function( _i, dimension ) {
14966	jQuery.cssHooks[ dimension ] = {
14967		get: function( elem, computed, extra ) {
14968			if ( computed ) {
14969
14970				// Certain elements can have dimension info if we invisibly show them
14971				// but it must have a current display style that would benefit
14972				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
14973
14974					// Support: Safari 8+
14975					// Table columns in Safari have non-zero offsetWidth & zero
14976					// getBoundingClientRect().width unless display is changed.
14977					// Support: IE <=11 only
14978					// Running getBoundingClientRect on a disconnected node
14979					// in IE throws an error.
14980					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
14981					swap( elem, cssShow, function() {
14982						return getWidthOrHeight( elem, dimension, extra );
14983					} ) :
14984					getWidthOrHeight( elem, dimension, extra );
14985			}
14986		},
14987
14988		set: function( elem, value, extra ) {
14989			var matches,
14990				styles = getStyles( elem ),
14991
14992				// Only read styles.position if the test has a chance to fail
14993				// to avoid forcing a reflow.
14994				scrollboxSizeBuggy = !support.scrollboxSize() &&
14995					styles.position === "absolute",
14996
14997				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
14998				boxSizingNeeded = scrollboxSizeBuggy || extra,
14999				isBorderBox = boxSizingNeeded &&
15000					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
15001				subtract = extra ?
15002					boxModelAdjustment(
15003						elem,
15004						dimension,
15005						extra,
15006						isBorderBox,
15007						styles
15008					) :
15009					0;
15010
15011			// Account for unreliable border-box dimensions by comparing offset* to computed and
15012			// faking a content-box to get border and padding (gh-3699)
15013			if ( isBorderBox && scrollboxSizeBuggy ) {
15014				subtract -= Math.ceil(
15015					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
15016					parseFloat( styles[ dimension ] ) -
15017					boxModelAdjustment( elem, dimension, "border", false, styles ) -
15018					0.5
15019				);
15020			}
15021
15022			// Convert to pixels if value adjustment is needed
15023			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
15024				( matches[ 3 ] || "px" ) !== "px" ) {
15025
15026				elem.style[ dimension ] = value;
15027				value = jQuery.css( elem, dimension );
15028			}
15029
15030			return setPositiveNumber( elem, value, subtract );
15031		}
15032	};
15033} );
15034
15035jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
15036	function( elem, computed ) {
15037		if ( computed ) {
15038			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
15039				elem.getBoundingClientRect().left -
15040					swap( elem, { marginLeft: 0 }, function() {
15041						return elem.getBoundingClientRect().left;
15042					} )
15043			) + "px";
15044		}
15045	}
15046);
15047
15048// These hooks are used by animate to expand properties
15049jQuery.each( {
15050	margin: "",
15051	padding: "",
15052	border: "Width"
15053}, function( prefix, suffix ) {
15054	jQuery.cssHooks[ prefix + suffix ] = {
15055		expand: function( value ) {
15056			var i = 0,
15057				expanded = {},
15058
15059				// Assumes a single number if not a string
15060				parts = typeof value === "string" ? value.split( " " ) : [ value ];
15061
15062			for ( ; i < 4; i++ ) {
15063				expanded[ prefix + cssExpand[ i ] + suffix ] =
15064					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
15065			}
15066
15067			return expanded;
15068		}
15069	};
15070
15071	if ( prefix !== "margin" ) {
15072		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
15073	}
15074} );
15075
15076jQuery.fn.extend( {
15077	css: function( name, value ) {
15078		return access( this, function( elem, name, value ) {
15079			var styles, len,
15080				map = {},
15081				i = 0;
15082
15083			if ( Array.isArray( name ) ) {
15084				styles = getStyles( elem );
15085				len = name.length;
15086
15087				for ( ; i < len; i++ ) {
15088					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
15089				}
15090
15091				return map;
15092			}
15093
15094			return value !== undefined ?
15095				jQuery.style( elem, name, value ) :
15096				jQuery.css( elem, name );
15097		}, name, value, arguments.length > 1 );
15098	}
15099} );
15100
15101
15102function Tween( elem, options, prop, end, easing ) {
15103	return new Tween.prototype.init( elem, options, prop, end, easing );
15104}
15105jQuery.Tween = Tween;
15106
15107Tween.prototype = {
15108	constructor: Tween,
15109	init: function( elem, options, prop, end, easing, unit ) {
15110		this.elem = elem;
15111		this.prop = prop;
15112		this.easing = easing || jQuery.easing._default;
15113		this.options = options;
15114		this.start = this.now = this.cur();
15115		this.end = end;
15116		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
15117	},
15118	cur: function() {
15119		var hooks = Tween.propHooks[ this.prop ];
15120
15121		return hooks && hooks.get ?
15122			hooks.get( this ) :
15123			Tween.propHooks._default.get( this );
15124	},
15125	run: function( percent ) {
15126		var eased,
15127			hooks = Tween.propHooks[ this.prop ];
15128
15129		if ( this.options.duration ) {
15130			this.pos = eased = jQuery.easing[ this.easing ](
15131				percent, this.options.duration * percent, 0, 1, this.options.duration
15132			);
15133		} else {
15134			this.pos = eased = percent;
15135		}
15136		this.now = ( this.end - this.start ) * eased + this.start;
15137
15138		if ( this.options.step ) {
15139			this.options.step.call( this.elem, this.now, this );
15140		}
15141
15142		if ( hooks && hooks.set ) {
15143			hooks.set( this );
15144		} else {
15145			Tween.propHooks._default.set( this );
15146		}
15147		return this;
15148	}
15149};
15150
15151Tween.prototype.init.prototype = Tween.prototype;
15152
15153Tween.propHooks = {
15154	_default: {
15155		get: function( tween ) {
15156			var result;
15157
15158			// Use a property on the element directly when it is not a DOM element,
15159			// or when there is no matching style property that exists.
15160			if ( tween.elem.nodeType !== 1 ||
15161				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
15162				return tween.elem[ tween.prop ];
15163			}
15164
15165			// Passing an empty string as a 3rd parameter to .css will automatically
15166			// attempt a parseFloat and fallback to a string if the parse fails.
15167			// Simple values such as "10px" are parsed to Float;
15168			// complex values such as "rotate(1rad)" are returned as-is.
15169			result = jQuery.css( tween.elem, tween.prop, "" );
15170
15171			// Empty strings, null, undefined and "auto" are converted to 0.
15172			return !result || result === "auto" ? 0 : result;
15173		},
15174		set: function( tween ) {
15175
15176			// Use step hook for back compat.
15177			// Use cssHook if its there.
15178			// Use .style if available and use plain properties where available.
15179			if ( jQuery.fx.step[ tween.prop ] ) {
15180				jQuery.fx.step[ tween.prop ]( tween );
15181			} else if ( tween.elem.nodeType === 1 && (
15182				jQuery.cssHooks[ tween.prop ] ||
15183					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
15184				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
15185			} else {
15186				tween.elem[ tween.prop ] = tween.now;
15187			}
15188		}
15189	}
15190};
15191
15192// Support: IE <=9 only
15193// Panic based approach to setting things on disconnected nodes
15194Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
15195	set: function( tween ) {
15196		if ( tween.elem.nodeType && tween.elem.parentNode ) {
15197			tween.elem[ tween.prop ] = tween.now;
15198		}
15199	}
15200};
15201
15202jQuery.easing = {
15203	linear: function( p ) {
15204		return p;
15205	},
15206	swing: function( p ) {
15207		return 0.5 - Math.cos( p * Math.PI ) / 2;
15208	},
15209	_default: "swing"
15210};
15211
15212jQuery.fx = Tween.prototype.init;
15213
15214// Back compat <1.8 extension point
15215jQuery.fx.step = {};
15216
15217
15218
15219
15220var
15221	fxNow, inProgress,
15222	rfxtypes = /^(?:toggle|show|hide)$/,
15223	rrun = /queueHooks$/;
15224
15225function schedule() {
15226	if ( inProgress ) {
15227		if ( document.hidden === false && window.requestAnimationFrame ) {
15228			window.requestAnimationFrame( schedule );
15229		} else {
15230			window.setTimeout( schedule, jQuery.fx.interval );
15231		}
15232
15233		jQuery.fx.tick();
15234	}
15235}
15236
15237// Animations created synchronously will run synchronously
15238function createFxNow() {
15239	window.setTimeout( function() {
15240		fxNow = undefined;
15241	} );
15242	return ( fxNow = Date.now() );
15243}
15244
15245// Generate parameters to create a standard animation
15246function genFx( type, includeWidth ) {
15247	var which,
15248		i = 0,
15249		attrs = { height: type };
15250
15251	// If we include width, step value is 1 to do all cssExpand values,
15252	// otherwise step value is 2 to skip over Left and Right
15253	includeWidth = includeWidth ? 1 : 0;
15254	for ( ; i < 4; i += 2 - includeWidth ) {
15255		which = cssExpand[ i ];
15256		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
15257	}
15258
15259	if ( includeWidth ) {
15260		attrs.opacity = attrs.width = type;
15261	}
15262
15263	return attrs;
15264}
15265
15266function createTween( value, prop, animation ) {
15267	var tween,
15268		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
15269		index = 0,
15270		length = collection.length;
15271	for ( ; index < length; index++ ) {
15272		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
15273
15274			// We're done with this property
15275			return tween;
15276		}
15277	}
15278}
15279
15280function defaultPrefilter( elem, props, opts ) {
15281	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
15282		isBox = "width" in props || "height" in props,
15283		anim = this,
15284		orig = {},
15285		style = elem.style,
15286		hidden = elem.nodeType && isHiddenWithinTree( elem ),
15287		dataShow = dataPriv.get( elem, "fxshow" );
15288
15289	// Queue-skipping animations hijack the fx hooks
15290	if ( !opts.queue ) {
15291		hooks = jQuery._queueHooks( elem, "fx" );
15292		if ( hooks.unqueued == null ) {
15293			hooks.unqueued = 0;
15294			oldfire = hooks.empty.fire;
15295			hooks.empty.fire = function() {
15296				if ( !hooks.unqueued ) {
15297					oldfire();
15298				}
15299			};
15300		}
15301		hooks.unqueued++;
15302
15303		anim.always( function() {
15304
15305			// Ensure the complete handler is called before this completes
15306			anim.always( function() {
15307				hooks.unqueued--;
15308				if ( !jQuery.queue( elem, "fx" ).length ) {
15309					hooks.empty.fire();
15310				}
15311			} );
15312		} );
15313	}
15314
15315	// Detect show/hide animations
15316	for ( prop in props ) {
15317		value = props[ prop ];
15318		if ( rfxtypes.test( value ) ) {
15319			delete props[ prop ];
15320			toggle = toggle || value === "toggle";
15321			if ( value === ( hidden ? "hide" : "show" ) ) {
15322
15323				// Pretend to be hidden if this is a "show" and
15324				// there is still data from a stopped show/hide
15325				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
15326					hidden = true;
15327
15328				// Ignore all other no-op show/hide data
15329				} else {
15330					continue;
15331				}
15332			}
15333			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
15334		}
15335	}
15336
15337	// Bail out if this is a no-op like .hide().hide()
15338	propTween = !jQuery.isEmptyObject( props );
15339	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
15340		return;
15341	}
15342
15343	// Restrict "overflow" and "display" styles during box animations
15344	if ( isBox && elem.nodeType === 1 ) {
15345
15346		// Support: IE <=9 - 11, Edge 12 - 15
15347		// Record all 3 overflow attributes because IE does not infer the shorthand
15348		// from identically-valued overflowX and overflowY and Edge just mirrors
15349		// the overflowX value there.
15350		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
15351
15352		// Identify a display type, preferring old show/hide data over the CSS cascade
15353		restoreDisplay = dataShow && dataShow.display;
15354		if ( restoreDisplay == null ) {
15355			restoreDisplay = dataPriv.get( elem, "display" );
15356		}
15357		display = jQuery.css( elem, "display" );
15358		if ( display === "none" ) {
15359			if ( restoreDisplay ) {
15360				display = restoreDisplay;
15361			} else {
15362
15363				// Get nonempty value(s) by temporarily forcing visibility
15364				showHide( [ elem ], true );
15365				restoreDisplay = elem.style.display || restoreDisplay;
15366				display = jQuery.css( elem, "display" );
15367				showHide( [ elem ] );
15368			}
15369		}
15370
15371		// Animate inline elements as inline-block
15372		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
15373			if ( jQuery.css( elem, "float" ) === "none" ) {
15374
15375				// Restore the original display value at the end of pure show/hide animations
15376				if ( !propTween ) {
15377					anim.done( function() {
15378						style.display = restoreDisplay;
15379					} );
15380					if ( restoreDisplay == null ) {
15381						display = style.display;
15382						restoreDisplay = display === "none" ? "" : display;
15383					}
15384				}
15385				style.display = "inline-block";
15386			}
15387		}
15388	}
15389
15390	if ( opts.overflow ) {
15391		style.overflow = "hidden";
15392		anim.always( function() {
15393			style.overflow = opts.overflow[ 0 ];
15394			style.overflowX = opts.overflow[ 1 ];
15395			style.overflowY = opts.overflow[ 2 ];
15396		} );
15397	}
15398
15399	// Implement show/hide animations
15400	propTween = false;
15401	for ( prop in orig ) {
15402
15403		// General show/hide setup for this element animation
15404		if ( !propTween ) {
15405			if ( dataShow ) {
15406				if ( "hidden" in dataShow ) {
15407					hidden = dataShow.hidden;
15408				}
15409			} else {
15410				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
15411			}
15412
15413			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
15414			if ( toggle ) {
15415				dataShow.hidden = !hidden;
15416			}
15417
15418			// Show elements before animating them
15419			if ( hidden ) {
15420				showHide( [ elem ], true );
15421			}
15422
15423			/* eslint-disable no-loop-func */
15424
15425			anim.done( function() {
15426
15427				/* eslint-enable no-loop-func */
15428
15429				// The final step of a "hide" animation is actually hiding the element
15430				if ( !hidden ) {
15431					showHide( [ elem ] );
15432				}
15433				dataPriv.remove( elem, "fxshow" );
15434				for ( prop in orig ) {
15435					jQuery.style( elem, prop, orig[ prop ] );
15436				}
15437			} );
15438		}
15439
15440		// Per-property setup
15441		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
15442		if ( !( prop in dataShow ) ) {
15443			dataShow[ prop ] = propTween.start;
15444			if ( hidden ) {
15445				propTween.end = propTween.start;
15446				propTween.start = 0;
15447			}
15448		}
15449	}
15450}
15451
15452function propFilter( props, specialEasing ) {
15453	var index, name, easing, value, hooks;
15454
15455	// camelCase, specialEasing and expand cssHook pass
15456	for ( index in props ) {
15457		name = camelCase( index );
15458		easing = specialEasing[ name ];
15459		value = props[ index ];
15460		if ( Array.isArray( value ) ) {
15461			easing = value[ 1 ];
15462			value = props[ index ] = value[ 0 ];
15463		}
15464
15465		if ( index !== name ) {
15466			props[ name ] = value;
15467			delete props[ index ];
15468		}
15469
15470		hooks = jQuery.cssHooks[ name ];
15471		if ( hooks && "expand" in hooks ) {
15472			value = hooks.expand( value );
15473			delete props[ name ];
15474
15475			// Not quite $.extend, this won't overwrite existing keys.
15476			// Reusing 'index' because we have the correct "name"
15477			for ( index in value ) {
15478				if ( !( index in props ) ) {
15479					props[ index ] = value[ index ];
15480					specialEasing[ index ] = easing;
15481				}
15482			}
15483		} else {
15484			specialEasing[ name ] = easing;
15485		}
15486	}
15487}
15488
15489function Animation( elem, properties, options ) {
15490	var result,
15491		stopped,
15492		index = 0,
15493		length = Animation.prefilters.length,
15494		deferred = jQuery.Deferred().always( function() {
15495
15496			// Don't match elem in the :animated selector
15497			delete tick.elem;
15498		} ),
15499		tick = function() {
15500			if ( stopped ) {
15501				return false;
15502			}
15503			var currentTime = fxNow || createFxNow(),
15504				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
15505
15506				// Support: Android 2.3 only
15507				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)
15508				temp = remaining / animation.duration || 0,
15509				percent = 1 - temp,
15510				index = 0,
15511				length = animation.tweens.length;
15512
15513			for ( ; index < length; index++ ) {
15514				animation.tweens[ index ].run( percent );
15515			}
15516
15517			deferred.notifyWith( elem, [ animation, percent, remaining ] );
15518
15519			// If there's more to do, yield
15520			if ( percent < 1 && length ) {
15521				return remaining;
15522			}
15523
15524			// If this was an empty animation, synthesize a final progress notification
15525			if ( !length ) {
15526				deferred.notifyWith( elem, [ animation, 1, 0 ] );
15527			}
15528
15529			// Resolve the animation and report its conclusion
15530			deferred.resolveWith( elem, [ animation ] );
15531			return false;
15532		},
15533		animation = deferred.promise( {
15534			elem: elem,
15535			props: jQuery.extend( {}, properties ),
15536			opts: jQuery.extend( true, {
15537				specialEasing: {},
15538				easing: jQuery.easing._default
15539			}, options ),
15540			originalProperties: properties,
15541			originalOptions: options,
15542			startTime: fxNow || createFxNow(),
15543			duration: options.duration,
15544			tweens: [],
15545			createTween: function( prop, end ) {
15546				var tween = jQuery.Tween( elem, animation.opts, prop, end,
15547					animation.opts.specialEasing[ prop ] || animation.opts.easing );
15548				animation.tweens.push( tween );
15549				return tween;
15550			},
15551			stop: function( gotoEnd ) {
15552				var index = 0,
15553
15554					// If we are going to the end, we want to run all the tweens
15555					// otherwise we skip this part
15556					length = gotoEnd ? animation.tweens.length : 0;
15557				if ( stopped ) {
15558					return this;
15559				}
15560				stopped = true;
15561				for ( ; index < length; index++ ) {
15562					animation.tweens[ index ].run( 1 );
15563				}
15564
15565				// Resolve when we played the last frame; otherwise, reject
15566				if ( gotoEnd ) {
15567					deferred.notifyWith( elem, [ animation, 1, 0 ] );
15568					deferred.resolveWith( elem, [ animation, gotoEnd ] );
15569				} else {
15570					deferred.rejectWith( elem, [ animation, gotoEnd ] );
15571				}
15572				return this;
15573			}
15574		} ),
15575		props = animation.props;
15576
15577	propFilter( props, animation.opts.specialEasing );
15578
15579	for ( ; index < length; index++ ) {
15580		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
15581		if ( result ) {
15582			if ( isFunction( result.stop ) ) {
15583				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
15584					result.stop.bind( result );
15585			}
15586			return result;
15587		}
15588	}
15589
15590	jQuery.map( props, createTween, animation );
15591
15592	if ( isFunction( animation.opts.start ) ) {
15593		animation.opts.start.call( elem, animation );
15594	}
15595
15596	// Attach callbacks from options
15597	animation
15598		.progress( animation.opts.progress )
15599		.done( animation.opts.done, animation.opts.complete )
15600		.fail( animation.opts.fail )
15601		.always( animation.opts.always );
15602
15603	jQuery.fx.timer(
15604		jQuery.extend( tick, {
15605			elem: elem,
15606			anim: animation,
15607			queue: animation.opts.queue
15608		} )
15609	);
15610
15611	return animation;
15612}
15613
15614jQuery.Animation = jQuery.extend( Animation, {
15615
15616	tweeners: {
15617		"*": [ function( prop, value ) {
15618			var tween = this.createTween( prop, value );
15619			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
15620			return tween;
15621		} ]
15622	},
15623
15624	tweener: function( props, callback ) {
15625		if ( isFunction( props ) ) {
15626			callback = props;
15627			props = [ "*" ];
15628		} else {
15629			props = props.match( rnothtmlwhite );
15630		}
15631
15632		var prop,
15633			index = 0,
15634			length = props.length;
15635
15636		for ( ; index < length; index++ ) {
15637			prop = props[ index ];
15638			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
15639			Animation.tweeners[ prop ].unshift( callback );
15640		}
15641	},
15642
15643	prefilters: [ defaultPrefilter ],
15644
15645	prefilter: function( callback, prepend ) {
15646		if ( prepend ) {
15647			Animation.prefilters.unshift( callback );
15648		} else {
15649			Animation.prefilters.push( callback );
15650		}
15651	}
15652} );
15653
15654jQuery.speed = function( speed, easing, fn ) {
15655	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
15656		complete: fn || !fn && easing ||
15657			isFunction( speed ) && speed,
15658		duration: speed,
15659		easing: fn && easing || easing && !isFunction( easing ) && easing
15660	};
15661
15662	// Go to the end state if fx are off
15663	if ( jQuery.fx.off ) {
15664		opt.duration = 0;
15665
15666	} else {
15667		if ( typeof opt.duration !== "number" ) {
15668			if ( opt.duration in jQuery.fx.speeds ) {
15669				opt.duration = jQuery.fx.speeds[ opt.duration ];
15670
15671			} else {
15672				opt.duration = jQuery.fx.speeds._default;
15673			}
15674		}
15675	}
15676
15677	// Normalize opt.queue - true/undefined/null -> "fx"
15678	if ( opt.queue == null || opt.queue === true ) {
15679		opt.queue = "fx";
15680	}
15681
15682	// Queueing
15683	opt.old = opt.complete;
15684
15685	opt.complete = function() {
15686		if ( isFunction( opt.old ) ) {
15687			opt.old.call( this );
15688		}
15689
15690		if ( opt.queue ) {
15691			jQuery.dequeue( this, opt.queue );
15692		}
15693	};
15694
15695	return opt;
15696};
15697
15698jQuery.fn.extend( {
15699	fadeTo: function( speed, to, easing, callback ) {
15700
15701		// Show any hidden elements after setting opacity to 0
15702		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
15703
15704			// Animate to the value specified
15705			.end().animate( { opacity: to }, speed, easing, callback );
15706	},
15707	animate: function( prop, speed, easing, callback ) {
15708		var empty = jQuery.isEmptyObject( prop ),
15709			optall = jQuery.speed( speed, easing, callback ),
15710			doAnimation = function() {
15711
15712				// Operate on a copy of prop so per-property easing won't be lost
15713				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
15714
15715				// Empty animations, or finishing resolves immediately
15716				if ( empty || dataPriv.get( this, "finish" ) ) {
15717					anim.stop( true );
15718				}
15719			};
15720
15721		doAnimation.finish = doAnimation;
15722
15723		return empty || optall.queue === false ?
15724			this.each( doAnimation ) :
15725			this.queue( optall.queue, doAnimation );
15726	},
15727	stop: function( type, clearQueue, gotoEnd ) {
15728		var stopQueue = function( hooks ) {
15729			var stop = hooks.stop;
15730			delete hooks.stop;
15731			stop( gotoEnd );
15732		};
15733
15734		if ( typeof type !== "string" ) {
15735			gotoEnd = clearQueue;
15736			clearQueue = type;
15737			type = undefined;
15738		}
15739		if ( clearQueue ) {
15740			this.queue( type || "fx", [] );
15741		}
15742
15743		return this.each( function() {
15744			var dequeue = true,
15745				index = type != null && type + "queueHooks",
15746				timers = jQuery.timers,
15747				data = dataPriv.get( this );
15748
15749			if ( index ) {
15750				if ( data[ index ] && data[ index ].stop ) {
15751					stopQueue( data[ index ] );
15752				}
15753			} else {
15754				for ( index in data ) {
15755					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
15756						stopQueue( data[ index ] );
15757					}
15758				}
15759			}
15760
15761			for ( index = timers.length; index--; ) {
15762				if ( timers[ index ].elem === this &&
15763					( type == null || timers[ index ].queue === type ) ) {
15764
15765					timers[ index ].anim.stop( gotoEnd );
15766					dequeue = false;
15767					timers.splice( index, 1 );
15768				}
15769			}
15770
15771			// Start the next in the queue if the last step wasn't forced.
15772			// Timers currently will call their complete callbacks, which
15773			// will dequeue but only if they were gotoEnd.
15774			if ( dequeue || !gotoEnd ) {
15775				jQuery.dequeue( this, type );
15776			}
15777		} );
15778	},
15779	finish: function( type ) {
15780		if ( type !== false ) {
15781			type = type || "fx";
15782		}
15783		return this.each( function() {
15784			var index,
15785				data = dataPriv.get( this ),
15786				queue = data[ type + "queue" ],
15787				hooks = data[ type + "queueHooks" ],
15788				timers = jQuery.timers,
15789				length = queue ? queue.length : 0;
15790
15791			// Enable finishing flag on private data
15792			data.finish = true;
15793
15794			// Empty the queue first
15795			jQuery.queue( this, type, [] );
15796
15797			if ( hooks && hooks.stop ) {
15798				hooks.stop.call( this, true );
15799			}
15800
15801			// Look for any active animations, and finish them
15802			for ( index = timers.length; index--; ) {
15803				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
15804					timers[ index ].anim.stop( true );
15805					timers.splice( index, 1 );
15806				}
15807			}
15808
15809			// Look for any animations in the old queue and finish them
15810			for ( index = 0; index < length; index++ ) {
15811				if ( queue[ index ] && queue[ index ].finish ) {
15812					queue[ index ].finish.call( this );
15813				}
15814			}
15815
15816			// Turn off finishing flag
15817			delete data.finish;
15818		} );
15819	}
15820} );
15821
15822jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
15823	var cssFn = jQuery.fn[ name ];
15824	jQuery.fn[ name ] = function( speed, easing, callback ) {
15825		return speed == null || typeof speed === "boolean" ?
15826			cssFn.apply( this, arguments ) :
15827			this.animate( genFx( name, true ), speed, easing, callback );
15828	};
15829} );
15830
15831// Generate shortcuts for custom animations
15832jQuery.each( {
15833	slideDown: genFx( "show" ),
15834	slideUp: genFx( "hide" ),
15835	slideToggle: genFx( "toggle" ),
15836	fadeIn: { opacity: "show" },
15837	fadeOut: { opacity: "hide" },
15838	fadeToggle: { opacity: "toggle" }
15839}, function( name, props ) {
15840	jQuery.fn[ name ] = function( speed, easing, callback ) {
15841		return this.animate( props, speed, easing, callback );
15842	};
15843} );
15844
15845jQuery.timers = [];
15846jQuery.fx.tick = function() {
15847	var timer,
15848		i = 0,
15849		timers = jQuery.timers;
15850
15851	fxNow = Date.now();
15852
15853	for ( ; i < timers.length; i++ ) {
15854		timer = timers[ i ];
15855
15856		// Run the timer and safely remove it when done (allowing for external removal)
15857		if ( !timer() && timers[ i ] === timer ) {
15858			timers.splice( i--, 1 );
15859		}
15860	}
15861
15862	if ( !timers.length ) {
15863		jQuery.fx.stop();
15864	}
15865	fxNow = undefined;
15866};
15867
15868jQuery.fx.timer = function( timer ) {
15869	jQuery.timers.push( timer );
15870	jQuery.fx.start();
15871};
15872
15873jQuery.fx.interval = 13;
15874jQuery.fx.start = function() {
15875	if ( inProgress ) {
15876		return;
15877	}
15878
15879	inProgress = true;
15880	schedule();
15881};
15882
15883jQuery.fx.stop = function() {
15884	inProgress = null;
15885};
15886
15887jQuery.fx.speeds = {
15888	slow: 600,
15889	fast: 200,
15890
15891	// Default speed
15892	_default: 400
15893};
15894
15895
15896// Based off of the plugin by Clint Helfers, with permission.
15897jQuery.fn.delay = function( time, type ) {
15898	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
15899	type = type || "fx";
15900
15901	return this.queue( type, function( next, hooks ) {
15902		var timeout = window.setTimeout( next, time );
15903		hooks.stop = function() {
15904			window.clearTimeout( timeout );
15905		};
15906	} );
15907};
15908
15909
15910( function() {
15911	var input = document.createElement( "input" ),
15912		select = document.createElement( "select" ),
15913		opt = select.appendChild( document.createElement( "option" ) );
15914
15915	input.type = "checkbox";
15916
15917	// Support: Android <=4.3 only
15918	// Default value for a checkbox should be "on"
15919	support.checkOn = input.value !== "";
15920
15921	// Support: IE <=11 only
15922	// Must access selectedIndex to make default options select
15923	support.optSelected = opt.selected;
15924
15925	// Support: IE <=11 only
15926	// An input loses its value after becoming a radio
15927	input = document.createElement( "input" );
15928	input.value = "t";
15929	input.type = "radio";
15930	support.radioValue = input.value === "t";
15931} )();
15932
15933
15934var boolHook,
15935	attrHandle = jQuery.expr.attrHandle;
15936
15937jQuery.fn.extend( {
15938	attr: function( name, value ) {
15939		return access( this, jQuery.attr, name, value, arguments.length > 1 );
15940	},
15941
15942	removeAttr: function( name ) {
15943		return this.each( function() {
15944			jQuery.removeAttr( this, name );
15945		} );
15946	}
15947} );
15948
15949jQuery.extend( {
15950	attr: function( elem, name, value ) {
15951		var ret, hooks,
15952			nType = elem.nodeType;
15953
15954		// Don't get/set attributes on text, comment and attribute nodes
15955		if ( nType === 3 || nType === 8 || nType === 2 ) {
15956			return;
15957		}
15958
15959		// Fallback to prop when attributes are not supported
15960		if ( typeof elem.getAttribute === "undefined" ) {
15961			return jQuery.prop( elem, name, value );
15962		}
15963
15964		// Attribute hooks are determined by the lowercase version
15965		// Grab necessary hook if one is defined
15966		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
15967			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
15968				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
15969		}
15970
15971		if ( value !== undefined ) {
15972			if ( value === null ) {
15973				jQuery.removeAttr( elem, name );
15974				return;
15975			}
15976
15977			if ( hooks && "set" in hooks &&
15978				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
15979				return ret;
15980			}
15981
15982			elem.setAttribute( name, value + "" );
15983			return value;
15984		}
15985
15986		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
15987			return ret;
15988		}
15989
15990		ret = jQuery.find.attr( elem, name );
15991
15992		// Non-existent attributes return null, we normalize to undefined
15993		return ret == null ? undefined : ret;
15994	},
15995
15996	attrHooks: {
15997		type: {
15998			set: function( elem, value ) {
15999				if ( !support.radioValue && value === "radio" &&
16000					nodeName( elem, "input" ) ) {
16001					var val = elem.value;
16002					elem.setAttribute( "type", value );
16003					if ( val ) {
16004						elem.value = val;
16005					}
16006					return value;
16007				}
16008			}
16009		}
16010	},
16011
16012	removeAttr: function( elem, value ) {
16013		var name,
16014			i = 0,
16015
16016			// Attribute names can contain non-HTML whitespace characters
16017			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
16018			attrNames = value && value.match( rnothtmlwhite );
16019
16020		if ( attrNames && elem.nodeType === 1 ) {
16021			while ( ( name = attrNames[ i++ ] ) ) {
16022				elem.removeAttribute( name );
16023			}
16024		}
16025	}
16026} );
16027
16028// Hooks for boolean attributes
16029boolHook = {
16030	set: function( elem, value, name ) {
16031		if ( value === false ) {
16032
16033			// Remove boolean attributes when set to false
16034			jQuery.removeAttr( elem, name );
16035		} else {
16036			elem.setAttribute( name, name );
16037		}
16038		return name;
16039	}
16040};
16041
16042jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
16043	var getter = attrHandle[ name ] || jQuery.find.attr;
16044
16045	attrHandle[ name ] = function( elem, name, isXML ) {
16046		var ret, handle,
16047			lowercaseName = name.toLowerCase();
16048
16049		if ( !isXML ) {
16050
16051			// Avoid an infinite loop by temporarily removing this function from the getter
16052			handle = attrHandle[ lowercaseName ];
16053			attrHandle[ lowercaseName ] = ret;
16054			ret = getter( elem, name, isXML ) != null ?
16055				lowercaseName :
16056				null;
16057			attrHandle[ lowercaseName ] = handle;
16058		}
16059		return ret;
16060	};
16061} );
16062
16063
16064
16065
16066var rfocusable = /^(?:input|select|textarea|button)$/i,
16067	rclickable = /^(?:a|area)$/i;
16068
16069jQuery.fn.extend( {
16070	prop: function( name, value ) {
16071		return access( this, jQuery.prop, name, value, arguments.length > 1 );
16072	},
16073
16074	removeProp: function( name ) {
16075		return this.each( function() {
16076			delete this[ jQuery.propFix[ name ] || name ];
16077		} );
16078	}
16079} );
16080
16081jQuery.extend( {
16082	prop: function( elem, name, value ) {
16083		var ret, hooks,
16084			nType = elem.nodeType;
16085
16086		// Don't get/set properties on text, comment and attribute nodes
16087		if ( nType === 3 || nType === 8 || nType === 2 ) {
16088			return;
16089		}
16090
16091		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
16092
16093			// Fix name and attach hooks
16094			name = jQuery.propFix[ name ] || name;
16095			hooks = jQuery.propHooks[ name ];
16096		}
16097
16098		if ( value !== undefined ) {
16099			if ( hooks && "set" in hooks &&
16100				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
16101				return ret;
16102			}
16103
16104			return ( elem[ name ] = value );
16105		}
16106
16107		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
16108			return ret;
16109		}
16110
16111		return elem[ name ];
16112	},
16113
16114	propHooks: {
16115		tabIndex: {
16116			get: function( elem ) {
16117
16118				// Support: IE <=9 - 11 only
16119				// elem.tabIndex doesn't always return the
16120				// correct value when it hasn't been explicitly set
16121				// Use proper attribute retrieval (trac-12072)
16122				var tabindex = jQuery.find.attr( elem, "tabindex" );
16123
16124				if ( tabindex ) {
16125					return parseInt( tabindex, 10 );
16126				}
16127
16128				if (
16129					rfocusable.test( elem.nodeName ) ||
16130					rclickable.test( elem.nodeName ) &&
16131					elem.href
16132				) {
16133					return 0;
16134				}
16135
16136				return -1;
16137			}
16138		}
16139	},
16140
16141	propFix: {
16142		"for": "htmlFor",
16143		"class": "className"
16144	}
16145} );
16146
16147// Support: IE <=11 only
16148// Accessing the selectedIndex property
16149// forces the browser to respect setting selected
16150// on the option
16151// The getter ensures a default option is selected
16152// when in an optgroup
16153// eslint rule "no-unused-expressions" is disabled for this code
16154// since it considers such accessions noop
16155if ( !support.optSelected ) {
16156	jQuery.propHooks.selected = {
16157		get: function( elem ) {
16158
16159			/* eslint no-unused-expressions: "off" */
16160
16161			var parent = elem.parentNode;
16162			if ( parent && parent.parentNode ) {
16163				parent.parentNode.selectedIndex;
16164			}
16165			return null;
16166		},
16167		set: function( elem ) {
16168
16169			/* eslint no-unused-expressions: "off" */
16170
16171			var parent = elem.parentNode;
16172			if ( parent ) {
16173				parent.selectedIndex;
16174
16175				if ( parent.parentNode ) {
16176					parent.parentNode.selectedIndex;
16177				}
16178			}
16179		}
16180	};
16181}
16182
16183jQuery.each( [
16184	"tabIndex",
16185	"readOnly",
16186	"maxLength",
16187	"cellSpacing",
16188	"cellPadding",
16189	"rowSpan",
16190	"colSpan",
16191	"useMap",
16192	"frameBorder",
16193	"contentEditable"
16194], function() {
16195	jQuery.propFix[ this.toLowerCase() ] = this;
16196} );
16197
16198
16199
16200
16201	// Strip and collapse whitespace according to HTML spec
16202	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
16203	function stripAndCollapse( value ) {
16204		var tokens = value.match( rnothtmlwhite ) || [];
16205		return tokens.join( " " );
16206	}
16207
16208
16209function getClass( elem ) {
16210	return elem.getAttribute && elem.getAttribute( "class" ) || "";
16211}
16212
16213function classesToArray( value ) {
16214	if ( Array.isArray( value ) ) {
16215		return value;
16216	}
16217	if ( typeof value === "string" ) {
16218		return value.match( rnothtmlwhite ) || [];
16219	}
16220	return [];
16221}
16222
16223jQuery.fn.extend( {
16224	addClass: function( value ) {
16225		var classNames, cur, curValue, className, i, finalValue;
16226
16227		if ( isFunction( value ) ) {
16228			return this.each( function( j ) {
16229				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
16230			} );
16231		}
16232
16233		classNames = classesToArray( value );
16234
16235		if ( classNames.length ) {
16236			return this.each( function() {
16237				curValue = getClass( this );
16238				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
16239
16240				if ( cur ) {
16241					for ( i = 0; i < classNames.length; i++ ) {
16242						className = classNames[ i ];
16243						if ( cur.indexOf( " " + className + " " ) < 0 ) {
16244							cur += className + " ";
16245						}
16246					}
16247
16248					// Only assign if different to avoid unneeded rendering.
16249					finalValue = stripAndCollapse( cur );
16250					if ( curValue !== finalValue ) {
16251						this.setAttribute( "class", finalValue );
16252					}
16253				}
16254			} );
16255		}
16256
16257		return this;
16258	},
16259
16260	removeClass: function( value ) {
16261		var classNames, cur, curValue, className, i, finalValue;
16262
16263		if ( isFunction( value ) ) {
16264			return this.each( function( j ) {
16265				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
16266			} );
16267		}
16268
16269		if ( !arguments.length ) {
16270			return this.attr( "class", "" );
16271		}
16272
16273		classNames = classesToArray( value );
16274
16275		if ( classNames.length ) {
16276			return this.each( function() {
16277				curValue = getClass( this );
16278
16279				// This expression is here for better compressibility (see addClass)
16280				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
16281
16282				if ( cur ) {
16283					for ( i = 0; i < classNames.length; i++ ) {
16284						className = classNames[ i ];
16285
16286						// Remove *all* instances
16287						while ( cur.indexOf( " " + className + " " ) > -1 ) {
16288							cur = cur.replace( " " + className + " ", " " );
16289						}
16290					}
16291
16292					// Only assign if different to avoid unneeded rendering.
16293					finalValue = stripAndCollapse( cur );
16294					if ( curValue !== finalValue ) {
16295						this.setAttribute( "class", finalValue );
16296					}
16297				}
16298			} );
16299		}
16300
16301		return this;
16302	},
16303
16304	toggleClass: function( value, stateVal ) {
16305		var classNames, className, i, self,
16306			type = typeof value,
16307			isValidValue = type === "string" || Array.isArray( value );
16308
16309		if ( isFunction( value ) ) {
16310			return this.each( function( i ) {
16311				jQuery( this ).toggleClass(
16312					value.call( this, i, getClass( this ), stateVal ),
16313					stateVal
16314				);
16315			} );
16316		}
16317
16318		if ( typeof stateVal === "boolean" && isValidValue ) {
16319			return stateVal ? this.addClass( value ) : this.removeClass( value );
16320		}
16321
16322		classNames = classesToArray( value );
16323
16324		return this.each( function() {
16325			if ( isValidValue ) {
16326
16327				// Toggle individual class names
16328				self = jQuery( this );
16329
16330				for ( i = 0; i < classNames.length; i++ ) {
16331					className = classNames[ i ];
16332
16333					// Check each className given, space separated list
16334					if ( self.hasClass( className ) ) {
16335						self.removeClass( className );
16336					} else {
16337						self.addClass( className );
16338					}
16339				}
16340
16341			// Toggle whole class name
16342			} else if ( value === undefined || type === "boolean" ) {
16343				className = getClass( this );
16344				if ( className ) {
16345
16346					// Store className if set
16347					dataPriv.set( this, "__className__", className );
16348				}
16349
16350				// If the element has a class name or if we're passed `false`,
16351				// then remove the whole classname (if there was one, the above saved it).
16352				// Otherwise bring back whatever was previously saved (if anything),
16353				// falling back to the empty string if nothing was stored.
16354				if ( this.setAttribute ) {
16355					this.setAttribute( "class",
16356						className || value === false ?
16357							"" :
16358							dataPriv.get( this, "__className__" ) || ""
16359					);
16360				}
16361			}
16362		} );
16363	},
16364
16365	hasClass: function( selector ) {
16366		var className, elem,
16367			i = 0;
16368
16369		className = " " + selector + " ";
16370		while ( ( elem = this[ i++ ] ) ) {
16371			if ( elem.nodeType === 1 &&
16372				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
16373				return true;
16374			}
16375		}
16376
16377		return false;
16378	}
16379} );
16380
16381
16382
16383
16384var rreturn = /\r/g;
16385
16386jQuery.fn.extend( {
16387	val: function( value ) {
16388		var hooks, ret, valueIsFunction,
16389			elem = this[ 0 ];
16390
16391		if ( !arguments.length ) {
16392			if ( elem ) {
16393				hooks = jQuery.valHooks[ elem.type ] ||
16394					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
16395
16396				if ( hooks &&
16397					"get" in hooks &&
16398					( ret = hooks.get( elem, "value" ) ) !== undefined
16399				) {
16400					return ret;
16401				}
16402
16403				ret = elem.value;
16404
16405				// Handle most common string cases
16406				if ( typeof ret === "string" ) {
16407					return ret.replace( rreturn, "" );
16408				}
16409
16410				// Handle cases where value is null/undef or number
16411				return ret == null ? "" : ret;
16412			}
16413
16414			return;
16415		}
16416
16417		valueIsFunction = isFunction( value );
16418
16419		return this.each( function( i ) {
16420			var val;
16421
16422			if ( this.nodeType !== 1 ) {
16423				return;
16424			}
16425
16426			if ( valueIsFunction ) {
16427				val = value.call( this, i, jQuery( this ).val() );
16428			} else {
16429				val = value;
16430			}
16431
16432			// Treat null/undefined as ""; convert numbers to string
16433			if ( val == null ) {
16434				val = "";
16435
16436			} else if ( typeof val === "number" ) {
16437				val += "";
16438
16439			} else if ( Array.isArray( val ) ) {
16440				val = jQuery.map( val, function( value ) {
16441					return value == null ? "" : value + "";
16442				} );
16443			}
16444
16445			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
16446
16447			// If set returns undefined, fall back to normal setting
16448			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
16449				this.value = val;
16450			}
16451		} );
16452	}
16453} );
16454
16455jQuery.extend( {
16456	valHooks: {
16457		option: {
16458			get: function( elem ) {
16459
16460				var val = jQuery.find.attr( elem, "value" );
16461				return val != null ?
16462					val :
16463
16464					// Support: IE <=10 - 11 only
16465					// option.text throws exceptions (trac-14686, trac-14858)
16466					// Strip and collapse whitespace
16467					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
16468					stripAndCollapse( jQuery.text( elem ) );
16469			}
16470		},
16471		select: {
16472			get: function( elem ) {
16473				var value, option, i,
16474					options = elem.options,
16475					index = elem.selectedIndex,
16476					one = elem.type === "select-one",
16477					values = one ? null : [],
16478					max = one ? index + 1 : options.length;
16479
16480				if ( index < 0 ) {
16481					i = max;
16482
16483				} else {
16484					i = one ? index : 0;
16485				}
16486
16487				// Loop through all the selected options
16488				for ( ; i < max; i++ ) {
16489					option = options[ i ];
16490
16491					// Support: IE <=9 only
16492					// IE8-9 doesn't update selected after form reset (trac-2551)
16493					if ( ( option.selected || i === index ) &&
16494
16495							// Don't return options that are disabled or in a disabled optgroup
16496							!option.disabled &&
16497							( !option.parentNode.disabled ||
16498								!nodeName( option.parentNode, "optgroup" ) ) ) {
16499
16500						// Get the specific value for the option
16501						value = jQuery( option ).val();
16502
16503						// We don't need an array for one selects
16504						if ( one ) {
16505							return value;
16506						}
16507
16508						// Multi-Selects return an array
16509						values.push( value );
16510					}
16511				}
16512
16513				return values;
16514			},
16515
16516			set: function( elem, value ) {
16517				var optionSet, option,
16518					options = elem.options,
16519					values = jQuery.makeArray( value ),
16520					i = options.length;
16521
16522				while ( i-- ) {
16523					option = options[ i ];
16524
16525					/* eslint-disable no-cond-assign */
16526
16527					if ( option.selected =
16528						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
16529					) {
16530						optionSet = true;
16531					}
16532
16533					/* eslint-enable no-cond-assign */
16534				}
16535
16536				// Force browsers to behave consistently when non-matching value is set
16537				if ( !optionSet ) {
16538					elem.selectedIndex = -1;
16539				}
16540				return values;
16541			}
16542		}
16543	}
16544} );
16545
16546// Radios and checkboxes getter/setter
16547jQuery.each( [ "radio", "checkbox" ], function() {
16548	jQuery.valHooks[ this ] = {
16549		set: function( elem, value ) {
16550			if ( Array.isArray( value ) ) {
16551				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
16552			}
16553		}
16554	};
16555	if ( !support.checkOn ) {
16556		jQuery.valHooks[ this ].get = function( elem ) {
16557			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
16558		};
16559	}
16560} );
16561
16562
16563
16564
16565// Return jQuery for attributes-only inclusion
16566var location = window.location;
16567
16568var nonce = { guid: Date.now() };
16569
16570var rquery = ( /\?/ );
16571
16572
16573
16574// Cross-browser xml parsing
16575jQuery.parseXML = function( data ) {
16576	var xml, parserErrorElem;
16577	if ( !data || typeof data !== "string" ) {
16578		return null;
16579	}
16580
16581	// Support: IE 9 - 11 only
16582	// IE throws on parseFromString with invalid input.
16583	try {
16584		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
16585	} catch ( e ) {}
16586
16587	parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
16588	if ( !xml || parserErrorElem ) {
16589		jQuery.error( "Invalid XML: " + (
16590			parserErrorElem ?
16591				jQuery.map( parserErrorElem.childNodes, function( el ) {
16592					return el.textContent;
16593				} ).join( "\n" ) :
16594				data
16595		) );
16596	}
16597	return xml;
16598};
16599
16600
16601var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
16602	stopPropagationCallback = function( e ) {
16603		e.stopPropagation();
16604	};
16605
16606jQuery.extend( jQuery.event, {
16607
16608	trigger: function( event, data, elem, onlyHandlers ) {
16609
16610		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
16611			eventPath = [ elem || document ],
16612			type = hasOwn.call( event, "type" ) ? event.type : event,
16613			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
16614
16615		cur = lastElement = tmp = elem = elem || document;
16616
16617		// Don't do events on text and comment nodes
16618		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
16619			return;
16620		}
16621
16622		// focus/blur morphs to focusin/out; ensure we're not firing them right now
16623		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
16624			return;
16625		}
16626
16627		if ( type.indexOf( "." ) > -1 ) {
16628
16629			// Namespaced trigger; create a regexp to match event type in handle()
16630			namespaces = type.split( "." );
16631			type = namespaces.shift();
16632			namespaces.sort();
16633		}
16634		ontype = type.indexOf( ":" ) < 0 && "on" + type;
16635
16636		// Caller can pass in a jQuery.Event object, Object, or just an event type string
16637		event = event[ jQuery.expando ] ?
16638			event :
16639			new jQuery.Event( type, typeof event === "object" && event );
16640
16641		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
16642		event.isTrigger = onlyHandlers ? 2 : 3;
16643		event.namespace = namespaces.join( "." );
16644		event.rnamespace = event.namespace ?
16645			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
16646			null;
16647
16648		// Clean up the event in case it is being reused
16649		event.result = undefined;
16650		if ( !event.target ) {
16651			event.target = elem;
16652		}
16653
16654		// Clone any incoming data and prepend the event, creating the handler arg list
16655		data = data == null ?
16656			[ event ] :
16657			jQuery.makeArray( data, [ event ] );
16658
16659		// Allow special events to draw outside the lines
16660		special = jQuery.event.special[ type ] || {};
16661		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
16662			return;
16663		}
16664
16665		// Determine event propagation path in advance, per W3C events spec (trac-9951)
16666		// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
16667		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
16668
16669			bubbleType = special.delegateType || type;
16670			if ( !rfocusMorph.test( bubbleType + type ) ) {
16671				cur = cur.parentNode;
16672			}
16673			for ( ; cur; cur = cur.parentNode ) {
16674				eventPath.push( cur );
16675				tmp = cur;
16676			}
16677
16678			// Only add window if we got to document (e.g., not plain obj or detached DOM)
16679			if ( tmp === ( elem.ownerDocument || document ) ) {
16680				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
16681			}
16682		}
16683
16684		// Fire handlers on the event path
16685		i = 0;
16686		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
16687			lastElement = cur;
16688			event.type = i > 1 ?
16689				bubbleType :
16690				special.bindType || type;
16691
16692			// jQuery handler
16693			handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
16694				dataPriv.get( cur, "handle" );
16695			if ( handle ) {
16696				handle.apply( cur, data );
16697			}
16698
16699			// Native handler
16700			handle = ontype && cur[ ontype ];
16701			if ( handle && handle.apply && acceptData( cur ) ) {
16702				event.result = handle.apply( cur, data );
16703				if ( event.result === false ) {
16704					event.preventDefault();
16705				}
16706			}
16707		}
16708		event.type = type;
16709
16710		// If nobody prevented the default action, do it now
16711		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
16712
16713			if ( ( !special._default ||
16714				special._default.apply( eventPath.pop(), data ) === false ) &&
16715				acceptData( elem ) ) {
16716
16717				// Call a native DOM method on the target with the same name as the event.
16718				// Don't do default actions on window, that's where global variables be (trac-6170)
16719				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
16720
16721					// Don't re-trigger an onFOO event when we call its FOO() method
16722					tmp = elem[ ontype ];
16723
16724					if ( tmp ) {
16725						elem[ ontype ] = null;
16726					}
16727
16728					// Prevent re-triggering of the same event, since we already bubbled it above
16729					jQuery.event.triggered = type;
16730
16731					if ( event.isPropagationStopped() ) {
16732						lastElement.addEventListener( type, stopPropagationCallback );
16733					}
16734
16735					elem[ type ]();
16736
16737					if ( event.isPropagationStopped() ) {
16738						lastElement.removeEventListener( type, stopPropagationCallback );
16739					}
16740
16741					jQuery.event.triggered = undefined;
16742
16743					if ( tmp ) {
16744						elem[ ontype ] = tmp;
16745					}
16746				}
16747			}
16748		}
16749
16750		return event.result;
16751	},
16752
16753	// Piggyback on a donor event to simulate a different one
16754	// Used only for `focus(in | out)` events
16755	simulate: function( type, elem, event ) {
16756		var e = jQuery.extend(
16757			new jQuery.Event(),
16758			event,
16759			{
16760				type: type,
16761				isSimulated: true
16762			}
16763		);
16764
16765		jQuery.event.trigger( e, null, elem );
16766	}
16767
16768} );
16769
16770jQuery.fn.extend( {
16771
16772	trigger: function( type, data ) {
16773		return this.each( function() {
16774			jQuery.event.trigger( type, data, this );
16775		} );
16776	},
16777	triggerHandler: function( type, data ) {
16778		var elem = this[ 0 ];
16779		if ( elem ) {
16780			return jQuery.event.trigger( type, data, elem, true );
16781		}
16782	}
16783} );
16784
16785
16786var
16787	rbracket = /\[\]$/,
16788	rCRLF = /\r?\n/g,
16789	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
16790	rsubmittable = /^(?:input|select|textarea|keygen)/i;
16791
16792function buildParams( prefix, obj, traditional, add ) {
16793	var name;
16794
16795	if ( Array.isArray( obj ) ) {
16796
16797		// Serialize array item.
16798		jQuery.each( obj, function( i, v ) {
16799			if ( traditional || rbracket.test( prefix ) ) {
16800
16801				// Treat each array item as a scalar.
16802				add( prefix, v );
16803
16804			} else {
16805
16806				// Item is non-scalar (array or object), encode its numeric index.
16807				buildParams(
16808					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
16809					v,
16810					traditional,
16811					add
16812				);
16813			}
16814		} );
16815
16816	} else if ( !traditional && toType( obj ) === "object" ) {
16817
16818		// Serialize object item.
16819		for ( name in obj ) {
16820			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
16821		}
16822
16823	} else {
16824
16825		// Serialize scalar item.
16826		add( prefix, obj );
16827	}
16828}
16829
16830// Serialize an array of form elements or a set of
16831// key/values into a query string
16832jQuery.param = function( a, traditional ) {
16833	var prefix,
16834		s = [],
16835		add = function( key, valueOrFunction ) {
16836
16837			// If value is a function, invoke it and use its return value
16838			var value = isFunction( valueOrFunction ) ?
16839				valueOrFunction() :
16840				valueOrFunction;
16841
16842			s[ s.length ] = encodeURIComponent( key ) + "=" +
16843				encodeURIComponent( value == null ? "" : value );
16844		};
16845
16846	if ( a == null ) {
16847		return "";
16848	}
16849
16850	// If an array was passed in, assume that it is an array of form elements.
16851	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
16852
16853		// Serialize the form elements
16854		jQuery.each( a, function() {
16855			add( this.name, this.value );
16856		} );
16857
16858	} else {
16859
16860		// If traditional, encode the "old" way (the way 1.3.2 or older
16861		// did it), otherwise encode params recursively.
16862		for ( prefix in a ) {
16863			buildParams( prefix, a[ prefix ], traditional, add );
16864		}
16865	}
16866
16867	// Return the resulting serialization
16868	return s.join( "&" );
16869};
16870
16871jQuery.fn.extend( {
16872	serialize: function() {
16873		return jQuery.param( this.serializeArray() );
16874	},
16875	serializeArray: function() {
16876		return this.map( function() {
16877
16878			// Can add propHook for "elements" to filter or add form elements
16879			var elements = jQuery.prop( this, "elements" );
16880			return elements ? jQuery.makeArray( elements ) : this;
16881		} ).filter( function() {
16882			var type = this.type;
16883
16884			// Use .is( ":disabled" ) so that fieldset[disabled] works
16885			return this.name && !jQuery( this ).is( ":disabled" ) &&
16886				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
16887				( this.checked || !rcheckableType.test( type ) );
16888		} ).map( function( _i, elem ) {
16889			var val = jQuery( this ).val();
16890
16891			if ( val == null ) {
16892				return null;
16893			}
16894
16895			if ( Array.isArray( val ) ) {
16896				return jQuery.map( val, function( val ) {
16897					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
16898				} );
16899			}
16900
16901			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
16902		} ).get();
16903	}
16904} );
16905
16906
16907var
16908	r20 = /%20/g,
16909	rhash = /#.*$/,
16910	rantiCache = /([?&])_=[^&]*/,
16911	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
16912
16913	// trac-7653, trac-8125, trac-8152: local protocol detection
16914	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
16915	rnoContent = /^(?:GET|HEAD)$/,
16916	rprotocol = /^\/\//,
16917
16918	/* Prefilters
16919	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
16920	 * 2) These are called:
16921	 *    - BEFORE asking for a transport
16922	 *    - AFTER param serialization (s.data is a string if s.processData is true)
16923	 * 3) key is the dataType
16924	 * 4) the catchall symbol "*" can be used
16925	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
16926	 */
16927	prefilters = {},
16928
16929	/* Transports bindings
16930	 * 1) key is the dataType
16931	 * 2) the catchall symbol "*" can be used
16932	 * 3) selection will start with transport dataType and THEN go to "*" if needed
16933	 */
16934	transports = {},
16935
16936	// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
16937	allTypes = "*/".concat( "*" ),
16938
16939	// Anchor tag for parsing the document origin
16940	originAnchor = document.createElement( "a" );
16941
16942originAnchor.href = location.href;
16943
16944// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
16945function addToPrefiltersOrTransports( structure ) {
16946
16947	// dataTypeExpression is optional and defaults to "*"
16948	return function( dataTypeExpression, func ) {
16949
16950		if ( typeof dataTypeExpression !== "string" ) {
16951			func = dataTypeExpression;
16952			dataTypeExpression = "*";
16953		}
16954
16955		var dataType,
16956			i = 0,
16957			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
16958
16959		if ( isFunction( func ) ) {
16960
16961			// For each dataType in the dataTypeExpression
16962			while ( ( dataType = dataTypes[ i++ ] ) ) {
16963
16964				// Prepend if requested
16965				if ( dataType[ 0 ] === "+" ) {
16966					dataType = dataType.slice( 1 ) || "*";
16967					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
16968
16969				// Otherwise append
16970				} else {
16971					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
16972				}
16973			}
16974		}
16975	};
16976}
16977
16978// Base inspection function for prefilters and transports
16979function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
16980
16981	var inspected = {},
16982		seekingTransport = ( structure === transports );
16983
16984	function inspect( dataType ) {
16985		var selected;
16986		inspected[ dataType ] = true;
16987		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
16988			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
16989			if ( typeof dataTypeOrTransport === "string" &&
16990				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
16991
16992				options.dataTypes.unshift( dataTypeOrTransport );
16993				inspect( dataTypeOrTransport );
16994				return false;
16995			} else if ( seekingTransport ) {
16996				return !( selected = dataTypeOrTransport );
16997			}
16998		} );
16999		return selected;
17000	}
17001
17002	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
17003}
17004
17005// A special extend for ajax options
17006// that takes "flat" options (not to be deep extended)
17007// Fixes trac-9887
17008function ajaxExtend( target, src ) {
17009	var key, deep,
17010		flatOptions = jQuery.ajaxSettings.flatOptions || {};
17011
17012	for ( key in src ) {
17013		if ( src[ key ] !== undefined ) {
17014			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
17015		}
17016	}
17017	if ( deep ) {
17018		jQuery.extend( true, target, deep );
17019	}
17020
17021	return target;
17022}
17023
17024/* Handles responses to an ajax request:
17025 * - finds the right dataType (mediates between content-type and expected dataType)
17026 * - returns the corresponding response
17027 */
17028function ajaxHandleResponses( s, jqXHR, responses ) {
17029
17030	var ct, type, finalDataType, firstDataType,
17031		contents = s.contents,
17032		dataTypes = s.dataTypes;
17033
17034	// Remove auto dataType and get content-type in the process
17035	while ( dataTypes[ 0 ] === "*" ) {
17036		dataTypes.shift();
17037		if ( ct === undefined ) {
17038			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
17039		}
17040	}
17041
17042	// Check if we're dealing with a known content-type
17043	if ( ct ) {
17044		for ( type in contents ) {
17045			if ( contents[ type ] && contents[ type ].test( ct ) ) {
17046				dataTypes.unshift( type );
17047				break;
17048			}
17049		}
17050	}
17051
17052	// Check to see if we have a response for the expected dataType
17053	if ( dataTypes[ 0 ] in responses ) {
17054		finalDataType = dataTypes[ 0 ];
17055	} else {
17056
17057		// Try convertible dataTypes
17058		for ( type in responses ) {
17059			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
17060				finalDataType = type;
17061				break;
17062			}
17063			if ( !firstDataType ) {
17064				firstDataType = type;
17065			}
17066		}
17067
17068		// Or just use first one
17069		finalDataType = finalDataType || firstDataType;
17070	}
17071
17072	// If we found a dataType
17073	// We add the dataType to the list if needed
17074	// and return the corresponding response
17075	if ( finalDataType ) {
17076		if ( finalDataType !== dataTypes[ 0 ] ) {
17077			dataTypes.unshift( finalDataType );
17078		}
17079		return responses[ finalDataType ];
17080	}
17081}
17082
17083/* Chain conversions given the request and the original response
17084 * Also sets the responseXXX fields on the jqXHR instance
17085 */
17086function ajaxConvert( s, response, jqXHR, isSuccess ) {
17087	var conv2, current, conv, tmp, prev,
17088		converters = {},
17089
17090		// Work with a copy of dataTypes in case we need to modify it for conversion
17091		dataTypes = s.dataTypes.slice();
17092
17093	// Create converters map with lowercased keys
17094	if ( dataTypes[ 1 ] ) {
17095		for ( conv in s.converters ) {
17096			converters[ conv.toLowerCase() ] = s.converters[ conv ];
17097		}
17098	}
17099
17100	current = dataTypes.shift();
17101
17102	// Convert to each sequential dataType
17103	while ( current ) {
17104
17105		if ( s.responseFields[ current ] ) {
17106			jqXHR[ s.responseFields[ current ] ] = response;
17107		}
17108
17109		// Apply the dataFilter if provided
17110		if ( !prev && isSuccess && s.dataFilter ) {
17111			response = s.dataFilter( response, s.dataType );
17112		}
17113
17114		prev = current;
17115		current = dataTypes.shift();
17116
17117		if ( current ) {
17118
17119			// There's only work to do if current dataType is non-auto
17120			if ( current === "*" ) {
17121
17122				current = prev;
17123
17124			// Convert response if prev dataType is non-auto and differs from current
17125			} else if ( prev !== "*" && prev !== current ) {
17126
17127				// Seek a direct converter
17128				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
17129
17130				// If none found, seek a pair
17131				if ( !conv ) {
17132					for ( conv2 in converters ) {
17133
17134						// If conv2 outputs current
17135						tmp = conv2.split( " " );
17136						if ( tmp[ 1 ] === current ) {
17137
17138							// If prev can be converted to accepted input
17139							conv = converters[ prev + " " + tmp[ 0 ] ] ||
17140								converters[ "* " + tmp[ 0 ] ];
17141							if ( conv ) {
17142
17143								// Condense equivalence converters
17144								if ( conv === true ) {
17145									conv = converters[ conv2 ];
17146
17147								// Otherwise, insert the intermediate dataType
17148								} else if ( converters[ conv2 ] !== true ) {
17149									current = tmp[ 0 ];
17150									dataTypes.unshift( tmp[ 1 ] );
17151								}
17152								break;
17153							}
17154						}
17155					}
17156				}
17157
17158				// Apply converter (if not an equivalence)
17159				if ( conv !== true ) {
17160
17161					// Unless errors are allowed to bubble, catch and return them
17162					if ( conv && s.throws ) {
17163						response = conv( response );
17164					} else {
17165						try {
17166							response = conv( response );
17167						} catch ( e ) {
17168							return {
17169								state: "parsererror",
17170								error: conv ? e : "No conversion from " + prev + " to " + current
17171							};
17172						}
17173					}
17174				}
17175			}
17176		}
17177	}
17178
17179	return { state: "success", data: response };
17180}
17181
17182jQuery.extend( {
17183
17184	// Counter for holding the number of active queries
17185	active: 0,
17186
17187	// Last-Modified header cache for next request
17188	lastModified: {},
17189	etag: {},
17190
17191	ajaxSettings: {
17192		url: location.href,
17193		type: "GET",
17194		isLocal: rlocalProtocol.test( location.protocol ),
17195		global: true,
17196		processData: true,
17197		async: true,
17198		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
17199
17200		/*
17201		timeout: 0,
17202		data: null,
17203		dataType: null,
17204		username: null,
17205		password: null,
17206		cache: null,
17207		throws: false,
17208		traditional: false,
17209		headers: {},
17210		*/
17211
17212		accepts: {
17213			"*": allTypes,
17214			text: "text/plain",
17215			html: "text/html",
17216			xml: "application/xml, text/xml",
17217			json: "application/json, text/javascript"
17218		},
17219
17220		contents: {
17221			xml: /\bxml\b/,
17222			html: /\bhtml/,
17223			json: /\bjson\b/
17224		},
17225
17226		responseFields: {
17227			xml: "responseXML",
17228			text: "responseText",
17229			json: "responseJSON"
17230		},
17231
17232		// Data converters
17233		// Keys separate source (or catchall "*") and destination types with a single space
17234		converters: {
17235
17236			// Convert anything to text
17237			"* text": String,
17238
17239			// Text to html (true = no transformation)
17240			"text html": true,
17241
17242			// Evaluate text as a json expression
17243			"text json": JSON.parse,
17244
17245			// Parse text as xml
17246			"text xml": jQuery.parseXML
17247		},
17248
17249		// For options that shouldn't be deep extended:
17250		// you can add your own custom options here if
17251		// and when you create one that shouldn't be
17252		// deep extended (see ajaxExtend)
17253		flatOptions: {
17254			url: true,
17255			context: true
17256		}
17257	},
17258
17259	// Creates a full fledged settings object into target
17260	// with both ajaxSettings and settings fields.
17261	// If target is omitted, writes into ajaxSettings.
17262	ajaxSetup: function( target, settings ) {
17263		return settings ?
17264
17265			// Building a settings object
17266			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
17267
17268			// Extending ajaxSettings
17269			ajaxExtend( jQuery.ajaxSettings, target );
17270	},
17271
17272	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
17273	ajaxTransport: addToPrefiltersOrTransports( transports ),
17274
17275	// Main method
17276	ajax: function( url, options ) {
17277
17278		// If url is an object, simulate pre-1.5 signature
17279		if ( typeof url === "object" ) {
17280			options = url;
17281			url = undefined;
17282		}
17283
17284		// Force options to be an object
17285		options = options || {};
17286
17287		var transport,
17288
17289			// URL without anti-cache param
17290			cacheURL,
17291
17292			// Response headers
17293			responseHeadersString,
17294			responseHeaders,
17295
17296			// timeout handle
17297			timeoutTimer,
17298
17299			// Url cleanup var
17300			urlAnchor,
17301
17302			// Request state (becomes false upon send and true upon completion)
17303			completed,
17304
17305			// To know if global events are to be dispatched
17306			fireGlobals,
17307
17308			// Loop variable
17309			i,
17310
17311			// uncached part of the url
17312			uncached,
17313
17314			// Create the final options object
17315			s = jQuery.ajaxSetup( {}, options ),
17316
17317			// Callbacks context
17318			callbackContext = s.context || s,
17319
17320			// Context for global events is callbackContext if it is a DOM node or jQuery collection
17321			globalEventContext = s.context &&
17322				( callbackContext.nodeType || callbackContext.jquery ) ?
17323				jQuery( callbackContext ) :
17324				jQuery.event,
17325
17326			// Deferreds
17327			deferred = jQuery.Deferred(),
17328			completeDeferred = jQuery.Callbacks( "once memory" ),
17329
17330			// Status-dependent callbacks
17331			statusCode = s.statusCode || {},
17332
17333			// Headers (they are sent all at once)
17334			requestHeaders = {},
17335			requestHeadersNames = {},
17336
17337			// Default abort message
17338			strAbort = "canceled",
17339
17340			// Fake xhr
17341			jqXHR = {
17342				readyState: 0,
17343
17344				// Builds headers hashtable if needed
17345				getResponseHeader: function( key ) {
17346					var match;
17347					if ( completed ) {
17348						if ( !responseHeaders ) {
17349							responseHeaders = {};
17350							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
17351								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
17352									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
17353										.concat( match[ 2 ] );
17354							}
17355						}
17356						match = responseHeaders[ key.toLowerCase() + " " ];
17357					}
17358					return match == null ? null : match.join( ", " );
17359				},
17360
17361				// Raw string
17362				getAllResponseHeaders: function() {
17363					return completed ? responseHeadersString : null;
17364				},
17365
17366				// Caches the header
17367				setRequestHeader: function( name, value ) {
17368					if ( completed == null ) {
17369						name = requestHeadersNames[ name.toLowerCase() ] =
17370							requestHeadersNames[ name.toLowerCase() ] || name;
17371						requestHeaders[ name ] = value;
17372					}
17373					return this;
17374				},
17375
17376				// Overrides response content-type header
17377				overrideMimeType: function( type ) {
17378					if ( completed == null ) {
17379						s.mimeType = type;
17380					}
17381					return this;
17382				},
17383
17384				// Status-dependent callbacks
17385				statusCode: function( map ) {
17386					var code;
17387					if ( map ) {
17388						if ( completed ) {
17389
17390							// Execute the appropriate callbacks
17391							jqXHR.always( map[ jqXHR.status ] );
17392						} else {
17393
17394							// Lazy-add the new callbacks in a way that preserves old ones
17395							for ( code in map ) {
17396								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
17397							}
17398						}
17399					}
17400					return this;
17401				},
17402
17403				// Cancel the request
17404				abort: function( statusText ) {
17405					var finalText = statusText || strAbort;
17406					if ( transport ) {
17407						transport.abort( finalText );
17408					}
17409					done( 0, finalText );
17410					return this;
17411				}
17412			};
17413
17414		// Attach deferreds
17415		deferred.promise( jqXHR );
17416
17417		// Add protocol if not provided (prefilters might expect it)
17418		// Handle falsy url in the settings object (trac-10093: consistency with old signature)
17419		// We also use the url parameter if available
17420		s.url = ( ( url || s.url || location.href ) + "" )
17421			.replace( rprotocol, location.protocol + "//" );
17422
17423		// Alias method option to type as per ticket trac-12004
17424		s.type = options.method || options.type || s.method || s.type;
17425
17426		// Extract dataTypes list
17427		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
17428
17429		// A cross-domain request is in order when the origin doesn't match the current origin.
17430		if ( s.crossDomain == null ) {
17431			urlAnchor = document.createElement( "a" );
17432
17433			// Support: IE <=8 - 11, Edge 12 - 15
17434			// IE throws exception on accessing the href property if url is malformed,
17435			// e.g. http://example.com:80x/
17436			try {
17437				urlAnchor.href = s.url;
17438
17439				// Support: IE <=8 - 11 only
17440				// Anchor's host property isn't correctly set when s.url is relative
17441				urlAnchor.href = urlAnchor.href;
17442				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
17443					urlAnchor.protocol + "//" + urlAnchor.host;
17444			} catch ( e ) {
17445
17446				// If there is an error parsing the URL, assume it is crossDomain,
17447				// it can be rejected by the transport if it is invalid
17448				s.crossDomain = true;
17449			}
17450		}
17451
17452		// Convert data if not already a string
17453		if ( s.data && s.processData && typeof s.data !== "string" ) {
17454			s.data = jQuery.param( s.data, s.traditional );
17455		}
17456
17457		// Apply prefilters
17458		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
17459
17460		// If request was aborted inside a prefilter, stop there
17461		if ( completed ) {
17462			return jqXHR;
17463		}
17464
17465		// We can fire global events as of now if asked to
17466		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
17467		fireGlobals = jQuery.event && s.global;
17468
17469		// Watch for a new set of requests
17470		if ( fireGlobals && jQuery.active++ === 0 ) {
17471			jQuery.event.trigger( "ajaxStart" );
17472		}
17473
17474		// Uppercase the type
17475		s.type = s.type.toUpperCase();
17476
17477		// Determine if request has content
17478		s.hasContent = !rnoContent.test( s.type );
17479
17480		// Save the URL in case we're toying with the If-Modified-Since
17481		// and/or If-None-Match header later on
17482		// Remove hash to simplify url manipulation
17483		cacheURL = s.url.replace( rhash, "" );
17484
17485		// More options handling for requests with no content
17486		if ( !s.hasContent ) {
17487
17488			// Remember the hash so we can put it back
17489			uncached = s.url.slice( cacheURL.length );
17490
17491			// If data is available and should be processed, append data to url
17492			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
17493				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
17494
17495				// trac-9682: remove data so that it's not used in an eventual retry
17496				delete s.data;
17497			}
17498
17499			// Add or update anti-cache param if needed
17500			if ( s.cache === false ) {
17501				cacheURL = cacheURL.replace( rantiCache, "$1" );
17502				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
17503					uncached;
17504			}
17505
17506			// Put hash and anti-cache on the URL that will be requested (gh-1732)
17507			s.url = cacheURL + uncached;
17508
17509		// Change '%20' to '+' if this is encoded form body content (gh-2658)
17510		} else if ( s.data && s.processData &&
17511			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
17512			s.data = s.data.replace( r20, "+" );
17513		}
17514
17515		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
17516		if ( s.ifModified ) {
17517			if ( jQuery.lastModified[ cacheURL ] ) {
17518				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
17519			}
17520			if ( jQuery.etag[ cacheURL ] ) {
17521				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
17522			}
17523		}
17524
17525		// Set the correct header, if data is being sent
17526		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
17527			jqXHR.setRequestHeader( "Content-Type", s.contentType );
17528		}
17529
17530		// Set the Accepts header for the server, depending on the dataType
17531		jqXHR.setRequestHeader(
17532			"Accept",
17533			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
17534				s.accepts[ s.dataTypes[ 0 ] ] +
17535					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
17536				s.accepts[ "*" ]
17537		);
17538
17539		// Check for headers option
17540		for ( i in s.headers ) {
17541			jqXHR.setRequestHeader( i, s.headers[ i ] );
17542		}
17543
17544		// Allow custom headers/mimetypes and early abort
17545		if ( s.beforeSend &&
17546			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
17547
17548			// Abort if not done already and return
17549			return jqXHR.abort();
17550		}
17551
17552		// Aborting is no longer a cancellation
17553		strAbort = "abort";
17554
17555		// Install callbacks on deferreds
17556		completeDeferred.add( s.complete );
17557		jqXHR.done( s.success );
17558		jqXHR.fail( s.error );
17559
17560		// Get transport
17561		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
17562
17563		// If no transport, we auto-abort
17564		if ( !transport ) {
17565			done( -1, "No Transport" );
17566		} else {
17567			jqXHR.readyState = 1;
17568
17569			// Send global event
17570			if ( fireGlobals ) {
17571				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
17572			}
17573
17574			// If request was aborted inside ajaxSend, stop there
17575			if ( completed ) {
17576				return jqXHR;
17577			}
17578
17579			// Timeout
17580			if ( s.async && s.timeout > 0 ) {
17581				timeoutTimer = window.setTimeout( function() {
17582					jqXHR.abort( "timeout" );
17583				}, s.timeout );
17584			}
17585
17586			try {
17587				completed = false;
17588				transport.send( requestHeaders, done );
17589			} catch ( e ) {
17590
17591				// Rethrow post-completion exceptions
17592				if ( completed ) {
17593					throw e;
17594				}
17595
17596				// Propagate others as results
17597				done( -1, e );
17598			}
17599		}
17600
17601		// Callback for when everything is done
17602		function done( status, nativeStatusText, responses, headers ) {
17603			var isSuccess, success, error, response, modified,
17604				statusText = nativeStatusText;
17605
17606			// Ignore repeat invocations
17607			if ( completed ) {
17608				return;
17609			}
17610
17611			completed = true;
17612
17613			// Clear timeout if it exists
17614			if ( timeoutTimer ) {
17615				window.clearTimeout( timeoutTimer );
17616			}
17617
17618			// Dereference transport for early garbage collection
17619			// (no matter how long the jqXHR object will be used)
17620			transport = undefined;
17621
17622			// Cache response headers
17623			responseHeadersString = headers || "";
17624
17625			// Set readyState
17626			jqXHR.readyState = status > 0 ? 4 : 0;
17627
17628			// Determine if successful
17629			isSuccess = status >= 200 && status < 300 || status === 304;
17630
17631			// Get response data
17632			if ( responses ) {
17633				response = ajaxHandleResponses( s, jqXHR, responses );
17634			}
17635
17636			// Use a noop converter for missing script but not if jsonp
17637			if ( !isSuccess &&
17638				jQuery.inArray( "script", s.dataTypes ) > -1 &&
17639				jQuery.inArray( "json", s.dataTypes ) < 0 ) {
17640				s.converters[ "text script" ] = function() {};
17641			}
17642
17643			// Convert no matter what (that way responseXXX fields are always set)
17644			response = ajaxConvert( s, response, jqXHR, isSuccess );
17645
17646			// If successful, handle type chaining
17647			if ( isSuccess ) {
17648
17649				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
17650				if ( s.ifModified ) {
17651					modified = jqXHR.getResponseHeader( "Last-Modified" );
17652					if ( modified ) {
17653						jQuery.lastModified[ cacheURL ] = modified;
17654					}
17655					modified = jqXHR.getResponseHeader( "etag" );
17656					if ( modified ) {
17657						jQuery.etag[ cacheURL ] = modified;
17658					}
17659				}
17660
17661				// if no content
17662				if ( status === 204 || s.type === "HEAD" ) {
17663					statusText = "nocontent";
17664
17665				// if not modified
17666				} else if ( status === 304 ) {
17667					statusText = "notmodified";
17668
17669				// If we have data, let's convert it
17670				} else {
17671					statusText = response.state;
17672					success = response.data;
17673					error = response.error;
17674					isSuccess = !error;
17675				}
17676			} else {
17677
17678				// Extract error from statusText and normalize for non-aborts
17679				error = statusText;
17680				if ( status || !statusText ) {
17681					statusText = "error";
17682					if ( status < 0 ) {
17683						status = 0;
17684					}
17685				}
17686			}
17687
17688			// Set data for the fake xhr object
17689			jqXHR.status = status;
17690			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
17691
17692			// Success/Error
17693			if ( isSuccess ) {
17694				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
17695			} else {
17696				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
17697			}
17698
17699			// Status-dependent callbacks
17700			jqXHR.statusCode( statusCode );
17701			statusCode = undefined;
17702
17703			if ( fireGlobals ) {
17704				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
17705					[ jqXHR, s, isSuccess ? success : error ] );
17706			}
17707
17708			// Complete
17709			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
17710
17711			if ( fireGlobals ) {
17712				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
17713
17714				// Handle the global AJAX counter
17715				if ( !( --jQuery.active ) ) {
17716					jQuery.event.trigger( "ajaxStop" );
17717				}
17718			}
17719		}
17720
17721		return jqXHR;
17722	},
17723
17724	getJSON: function( url, data, callback ) {
17725		return jQuery.get( url, data, callback, "json" );
17726	},
17727
17728	getScript: function( url, callback ) {
17729		return jQuery.get( url, undefined, callback, "script" );
17730	}
17731} );
17732
17733jQuery.each( [ "get", "post" ], function( _i, method ) {
17734	jQuery[ method ] = function( url, data, callback, type ) {
17735
17736		// Shift arguments if data argument was omitted
17737		if ( isFunction( data ) ) {
17738			type = type || callback;
17739			callback = data;
17740			data = undefined;
17741		}
17742
17743		// The url can be an options object (which then must have .url)
17744		return jQuery.ajax( jQuery.extend( {
17745			url: url,
17746			type: method,
17747			dataType: type,
17748			data: data,
17749			success: callback
17750		}, jQuery.isPlainObject( url ) && url ) );
17751	};
17752} );
17753
17754jQuery.ajaxPrefilter( function( s ) {
17755	var i;
17756	for ( i in s.headers ) {
17757		if ( i.toLowerCase() === "content-type" ) {
17758			s.contentType = s.headers[ i ] || "";
17759		}
17760	}
17761} );
17762
17763
17764jQuery._evalUrl = function( url, options, doc ) {
17765	return jQuery.ajax( {
17766		url: url,
17767
17768		// Make this explicit, since user can override this through ajaxSetup (trac-11264)
17769		type: "GET",
17770		dataType: "script",
17771		cache: true,
17772		async: false,
17773		global: false,
17774
17775		// Only evaluate the response if it is successful (gh-4126)
17776		// dataFilter is not invoked for failure responses, so using it instead
17777		// of the default converter is kludgy but it works.
17778		converters: {
17779			"text script": function() {}
17780		},
17781		dataFilter: function( response ) {
17782			jQuery.globalEval( response, options, doc );
17783		}
17784	} );
17785};
17786
17787
17788jQuery.fn.extend( {
17789	wrapAll: function( html ) {
17790		var wrap;
17791
17792		if ( this[ 0 ] ) {
17793			if ( isFunction( html ) ) {
17794				html = html.call( this[ 0 ] );
17795			}
17796
17797			// The elements to wrap the target around
17798			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
17799
17800			if ( this[ 0 ].parentNode ) {
17801				wrap.insertBefore( this[ 0 ] );
17802			}
17803
17804			wrap.map( function() {
17805				var elem = this;
17806
17807				while ( elem.firstElementChild ) {
17808					elem = elem.firstElementChild;
17809				}
17810
17811				return elem;
17812			} ).append( this );
17813		}
17814
17815		return this;
17816	},
17817
17818	wrapInner: function( html ) {
17819		if ( isFunction( html ) ) {
17820			return this.each( function( i ) {
17821				jQuery( this ).wrapInner( html.call( this, i ) );
17822			} );
17823		}
17824
17825		return this.each( function() {
17826			var self = jQuery( this ),
17827				contents = self.contents();
17828
17829			if ( contents.length ) {
17830				contents.wrapAll( html );
17831
17832			} else {
17833				self.append( html );
17834			}
17835		} );
17836	},
17837
17838	wrap: function( html ) {
17839		var htmlIsFunction = isFunction( html );
17840
17841		return this.each( function( i ) {
17842			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
17843		} );
17844	},
17845
17846	unwrap: function( selector ) {
17847		this.parent( selector ).not( "body" ).each( function() {
17848			jQuery( this ).replaceWith( this.childNodes );
17849		} );
17850		return this;
17851	}
17852} );
17853
17854
17855jQuery.expr.pseudos.hidden = function( elem ) {
17856	return !jQuery.expr.pseudos.visible( elem );
17857};
17858jQuery.expr.pseudos.visible = function( elem ) {
17859	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
17860};
17861
17862
17863
17864
17865jQuery.ajaxSettings.xhr = function() {
17866	try {
17867		return new window.XMLHttpRequest();
17868	} catch ( e ) {}
17869};
17870
17871var xhrSuccessStatus = {
17872
17873		// File protocol always yields status code 0, assume 200
17874		0: 200,
17875
17876		// Support: IE <=9 only
17877		// trac-1450: sometimes IE returns 1223 when it should be 204
17878		1223: 204
17879	},
17880	xhrSupported = jQuery.ajaxSettings.xhr();
17881
17882support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
17883support.ajax = xhrSupported = !!xhrSupported;
17884
17885jQuery.ajaxTransport( function( options ) {
17886	var callback, errorCallback;
17887
17888	// Cross domain only allowed if supported through XMLHttpRequest
17889	if ( support.cors || xhrSupported && !options.crossDomain ) {
17890		return {
17891			send: function( headers, complete ) {
17892				var i,
17893					xhr = options.xhr();
17894
17895				xhr.open(
17896					options.type,
17897					options.url,
17898					options.async,
17899					options.username,
17900					options.password
17901				);
17902
17903				// Apply custom fields if provided
17904				if ( options.xhrFields ) {
17905					for ( i in options.xhrFields ) {
17906						xhr[ i ] = options.xhrFields[ i ];
17907					}
17908				}
17909
17910				// Override mime type if needed
17911				if ( options.mimeType && xhr.overrideMimeType ) {
17912					xhr.overrideMimeType( options.mimeType );
17913				}
17914
17915				// X-Requested-With header
17916				// For cross-domain requests, seeing as conditions for a preflight are
17917				// akin to a jigsaw puzzle, we simply never set it to be sure.
17918				// (it can always be set on a per-request basis or even using ajaxSetup)
17919				// For same-domain requests, won't change header if already provided.
17920				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
17921					headers[ "X-Requested-With" ] = "XMLHttpRequest";
17922				}
17923
17924				// Set headers
17925				for ( i in headers ) {
17926					xhr.setRequestHeader( i, headers[ i ] );
17927				}
17928
17929				// Callback
17930				callback = function( type ) {
17931					return function() {
17932						if ( callback ) {
17933							callback = errorCallback = xhr.onload =
17934								xhr.onerror = xhr.onabort = xhr.ontimeout =
17935									xhr.onreadystatechange = null;
17936
17937							if ( type === "abort" ) {
17938								xhr.abort();
17939							} else if ( type === "error" ) {
17940
17941								// Support: IE <=9 only
17942								// On a manual native abort, IE9 throws
17943								// errors on any property access that is not readyState
17944								if ( typeof xhr.status !== "number" ) {
17945									complete( 0, "error" );
17946								} else {
17947									complete(
17948
17949										// File: protocol always yields status 0; see trac-8605, trac-14207
17950										xhr.status,
17951										xhr.statusText
17952									);
17953								}
17954							} else {
17955								complete(
17956									xhrSuccessStatus[ xhr.status ] || xhr.status,
17957									xhr.statusText,
17958
17959									// Support: IE <=9 only
17960									// IE9 has no XHR2 but throws on binary (trac-11426)
17961									// For XHR2 non-text, let the caller handle it (gh-2498)
17962									( xhr.responseType || "text" ) !== "text"  ||
17963									typeof xhr.responseText !== "string" ?
17964										{ binary: xhr.response } :
17965										{ text: xhr.responseText },
17966									xhr.getAllResponseHeaders()
17967								);
17968							}
17969						}
17970					};
17971				};
17972
17973				// Listen to events
17974				xhr.onload = callback();
17975				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
17976
17977				// Support: IE 9 only
17978				// Use onreadystatechange to replace onabort
17979				// to handle uncaught aborts
17980				if ( xhr.onabort !== undefined ) {
17981					xhr.onabort = errorCallback;
17982				} else {
17983					xhr.onreadystatechange = function() {
17984
17985						// Check readyState before timeout as it changes
17986						if ( xhr.readyState === 4 ) {
17987
17988							// Allow onerror to be called first,
17989							// but that will not handle a native abort
17990							// Also, save errorCallback to a variable
17991							// as xhr.onerror cannot be accessed
17992							window.setTimeout( function() {
17993								if ( callback ) {
17994									errorCallback();
17995								}
17996							} );
17997						}
17998					};
17999				}
18000
18001				// Create the abort callback
18002				callback = callback( "abort" );
18003
18004				try {
18005
18006					// Do send the request (this may raise an exception)
18007					xhr.send( options.hasContent && options.data || null );
18008				} catch ( e ) {
18009
18010					// trac-14683: Only rethrow if this hasn't been notified as an error yet
18011					if ( callback ) {
18012						throw e;
18013					}
18014				}
18015			},
18016
18017			abort: function() {
18018				if ( callback ) {
18019					callback();
18020				}
18021			}
18022		};
18023	}
18024} );
18025
18026
18027
18028
18029// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
18030jQuery.ajaxPrefilter( function( s ) {
18031	if ( s.crossDomain ) {
18032		s.contents.script = false;
18033	}
18034} );
18035
18036// Install script dataType
18037jQuery.ajaxSetup( {
18038	accepts: {
18039		script: "text/javascript, application/javascript, " +
18040			"application/ecmascript, application/x-ecmascript"
18041	},
18042	contents: {
18043		script: /\b(?:java|ecma)script\b/
18044	},
18045	converters: {
18046		"text script": function( text ) {
18047			jQuery.globalEval( text );
18048			return text;
18049		}
18050	}
18051} );
18052
18053// Handle cache's special case and crossDomain
18054jQuery.ajaxPrefilter( "script", function( s ) {
18055	if ( s.cache === undefined ) {
18056		s.cache = false;
18057	}
18058	if ( s.crossDomain ) {
18059		s.type = "GET";
18060	}
18061} );
18062
18063// Bind script tag hack transport
18064jQuery.ajaxTransport( "script", function( s ) {
18065
18066	// This transport only deals with cross domain or forced-by-attrs requests
18067	if ( s.crossDomain || s.scriptAttrs ) {
18068		var script, callback;
18069		return {
18070			send: function( _, complete ) {
18071				script = jQuery( "<script>" )
18072					.attr( s.scriptAttrs || {} )
18073					.prop( { charset: s.scriptCharset, src: s.url } )
18074					.on( "load error", callback = function( evt ) {
18075						script.remove();
18076						callback = null;
18077						if ( evt ) {
18078							complete( evt.type === "error" ? 404 : 200, evt.type );
18079						}
18080					} );
18081
18082				// Use native DOM manipulation to avoid our domManip AJAX trickery
18083				document.head.appendChild( script[ 0 ] );
18084			},
18085			abort: function() {
18086				if ( callback ) {
18087					callback();
18088				}
18089			}
18090		};
18091	}
18092} );
18093
18094
18095
18096
18097var oldCallbacks = [],
18098	rjsonp = /(=)\?(?=&|$)|\?\?/;
18099
18100// Default jsonp settings
18101jQuery.ajaxSetup( {
18102	jsonp: "callback",
18103	jsonpCallback: function() {
18104		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
18105		this[ callback ] = true;
18106		return callback;
18107	}
18108} );
18109
18110// Detect, normalize options and install callbacks for jsonp requests
18111jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
18112
18113	var callbackName, overwritten, responseContainer,
18114		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
18115			"url" :
18116			typeof s.data === "string" &&
18117				( s.contentType || "" )
18118					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
18119				rjsonp.test( s.data ) && "data"
18120		);
18121
18122	// Handle iff the expected data type is "jsonp" or we have a parameter to set
18123	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
18124
18125		// Get callback name, remembering preexisting value associated with it
18126		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
18127			s.jsonpCallback() :
18128			s.jsonpCallback;
18129
18130		// Insert callback into url or form data
18131		if ( jsonProp ) {
18132			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
18133		} else if ( s.jsonp !== false ) {
18134			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
18135		}
18136
18137		// Use data converter to retrieve json after script execution
18138		s.converters[ "script json" ] = function() {
18139			if ( !responseContainer ) {
18140				jQuery.error( callbackName + " was not called" );
18141			}
18142			return responseContainer[ 0 ];
18143		};
18144
18145		// Force json dataType
18146		s.dataTypes[ 0 ] = "json";
18147
18148		// Install callback
18149		overwritten = window[ callbackName ];
18150		window[ callbackName ] = function() {
18151			responseContainer = arguments;
18152		};
18153
18154		// Clean-up function (fires after converters)
18155		jqXHR.always( function() {
18156
18157			// If previous value didn't exist - remove it
18158			if ( overwritten === undefined ) {
18159				jQuery( window ).removeProp( callbackName );
18160
18161			// Otherwise restore preexisting value
18162			} else {
18163				window[ callbackName ] = overwritten;
18164			}
18165
18166			// Save back as free
18167			if ( s[ callbackName ] ) {
18168
18169				// Make sure that re-using the options doesn't screw things around
18170				s.jsonpCallback = originalSettings.jsonpCallback;
18171
18172				// Save the callback name for future use
18173				oldCallbacks.push( callbackName );
18174			}
18175
18176			// Call if it was a function and we have a response
18177			if ( responseContainer && isFunction( overwritten ) ) {
18178				overwritten( responseContainer[ 0 ] );
18179			}
18180
18181			responseContainer = overwritten = undefined;
18182		} );
18183
18184		// Delegate to script
18185		return "script";
18186	}
18187} );
18188
18189
18190
18191
18192// Support: Safari 8 only
18193// In Safari 8 documents created via document.implementation.createHTMLDocument
18194// collapse sibling forms: the second one becomes a child of the first one.
18195// Because of that, this security measure has to be disabled in Safari 8.
18196// https://bugs.webkit.org/show_bug.cgi?id=137337
18197support.createHTMLDocument = ( function() {
18198	var body = document.implementation.createHTMLDocument( "" ).body;
18199	body.innerHTML = "<form></form><form></form>";
18200	return body.childNodes.length === 2;
18201} )();
18202
18203
18204// Argument "data" should be string of html
18205// context (optional): If specified, the fragment will be created in this context,
18206// defaults to document
18207// keepScripts (optional): If true, will include scripts passed in the html string
18208jQuery.parseHTML = function( data, context, keepScripts ) {
18209	if ( typeof data !== "string" ) {
18210		return [];
18211	}
18212	if ( typeof context === "boolean" ) {
18213		keepScripts = context;
18214		context = false;
18215	}
18216
18217	var base, parsed, scripts;
18218
18219	if ( !context ) {
18220
18221		// Stop scripts or inline event handlers from being executed immediately
18222		// by using document.implementation
18223		if ( support.createHTMLDocument ) {
18224			context = document.implementation.createHTMLDocument( "" );
18225
18226			// Set the base href for the created document
18227			// so any parsed elements with URLs
18228			// are based on the document's URL (gh-2965)
18229			base = context.createElement( "base" );
18230			base.href = document.location.href;
18231			context.head.appendChild( base );
18232		} else {
18233			context = document;
18234		}
18235	}
18236
18237	parsed = rsingleTag.exec( data );
18238	scripts = !keepScripts && [];
18239
18240	// Single tag
18241	if ( parsed ) {
18242		return [ context.createElement( parsed[ 1 ] ) ];
18243	}
18244
18245	parsed = buildFragment( [ data ], context, scripts );
18246
18247	if ( scripts && scripts.length ) {
18248		jQuery( scripts ).remove();
18249	}
18250
18251	return jQuery.merge( [], parsed.childNodes );
18252};
18253
18254
18255/**
18256 * Load a url into a page
18257 */
18258jQuery.fn.load = function( url, params, callback ) {
18259	var selector, type, response,
18260		self = this,
18261		off = url.indexOf( " " );
18262
18263	if ( off > -1 ) {
18264		selector = stripAndCollapse( url.slice( off ) );
18265		url = url.slice( 0, off );
18266	}
18267
18268	// If it's a function
18269	if ( isFunction( params ) ) {
18270
18271		// We assume that it's the callback
18272		callback = params;
18273		params = undefined;
18274
18275	// Otherwise, build a param string
18276	} else if ( params && typeof params === "object" ) {
18277		type = "POST";
18278	}
18279
18280	// If we have elements to modify, make the request
18281	if ( self.length > 0 ) {
18282		jQuery.ajax( {
18283			url: url,
18284
18285			// If "type" variable is undefined, then "GET" method will be used.
18286			// Make value of this field explicit since
18287			// user can override it through ajaxSetup method
18288			type: type || "GET",
18289			dataType: "html",
18290			data: params
18291		} ).done( function( responseText ) {
18292
18293			// Save response for use in complete callback
18294			response = arguments;
18295
18296			self.html( selector ?
18297
18298				// If a selector was specified, locate the right elements in a dummy div
18299				// Exclude scripts to avoid IE 'Permission Denied' errors
18300				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
18301
18302				// Otherwise use the full result
18303				responseText );
18304
18305		// If the request succeeds, this function gets "data", "status", "jqXHR"
18306		// but they are ignored because response was set above.
18307		// If it fails, this function gets "jqXHR", "status", "error"
18308		} ).always( callback && function( jqXHR, status ) {
18309			self.each( function() {
18310				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
18311			} );
18312		} );
18313	}
18314
18315	return this;
18316};
18317
18318
18319
18320
18321jQuery.expr.pseudos.animated = function( elem ) {
18322	return jQuery.grep( jQuery.timers, function( fn ) {
18323		return elem === fn.elem;
18324	} ).length;
18325};
18326
18327
18328
18329
18330jQuery.offset = {
18331	setOffset: function( elem, options, i ) {
18332		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
18333			position = jQuery.css( elem, "position" ),
18334			curElem = jQuery( elem ),
18335			props = {};
18336
18337		// Set position first, in-case top/left are set even on static elem
18338		if ( position === "static" ) {
18339			elem.style.position = "relative";
18340		}
18341
18342		curOffset = curElem.offset();
18343		curCSSTop = jQuery.css( elem, "top" );
18344		curCSSLeft = jQuery.css( elem, "left" );
18345		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
18346			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
18347
18348		// Need to be able to calculate position if either
18349		// top or left is auto and position is either absolute or fixed
18350		if ( calculatePosition ) {
18351			curPosition = curElem.position();
18352			curTop = curPosition.top;
18353			curLeft = curPosition.left;
18354
18355		} else {
18356			curTop = parseFloat( curCSSTop ) || 0;
18357			curLeft = parseFloat( curCSSLeft ) || 0;
18358		}
18359
18360		if ( isFunction( options ) ) {
18361
18362			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
18363			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
18364		}
18365
18366		if ( options.top != null ) {
18367			props.top = ( options.top - curOffset.top ) + curTop;
18368		}
18369		if ( options.left != null ) {
18370			props.left = ( options.left - curOffset.left ) + curLeft;
18371		}
18372
18373		if ( "using" in options ) {
18374			options.using.call( elem, props );
18375
18376		} else {
18377			curElem.css( props );
18378		}
18379	}
18380};
18381
18382jQuery.fn.extend( {
18383
18384	// offset() relates an element's border box to the document origin
18385	offset: function( options ) {
18386
18387		// Preserve chaining for setter
18388		if ( arguments.length ) {
18389			return options === undefined ?
18390				this :
18391				this.each( function( i ) {
18392					jQuery.offset.setOffset( this, options, i );
18393				} );
18394		}
18395
18396		var rect, win,
18397			elem = this[ 0 ];
18398
18399		if ( !elem ) {
18400			return;
18401		}
18402
18403		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
18404		// Support: IE <=11 only
18405		// Running getBoundingClientRect on a
18406		// disconnected node in IE throws an error
18407		if ( !elem.getClientRects().length ) {
18408			return { top: 0, left: 0 };
18409		}
18410
18411		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
18412		rect = elem.getBoundingClientRect();
18413		win = elem.ownerDocument.defaultView;
18414		return {
18415			top: rect.top + win.pageYOffset,
18416			left: rect.left + win.pageXOffset
18417		};
18418	},
18419
18420	// position() relates an element's margin box to its offset parent's padding box
18421	// This corresponds to the behavior of CSS absolute positioning
18422	position: function() {
18423		if ( !this[ 0 ] ) {
18424			return;
18425		}
18426
18427		var offsetParent, offset, doc,
18428			elem = this[ 0 ],
18429			parentOffset = { top: 0, left: 0 };
18430
18431		// position:fixed elements are offset from the viewport, which itself always has zero offset
18432		if ( jQuery.css( elem, "position" ) === "fixed" ) {
18433
18434			// Assume position:fixed implies availability of getBoundingClientRect
18435			offset = elem.getBoundingClientRect();
18436
18437		} else {
18438			offset = this.offset();
18439
18440			// Account for the *real* offset parent, which can be the document or its root element
18441			// when a statically positioned element is identified
18442			doc = elem.ownerDocument;
18443			offsetParent = elem.offsetParent || doc.documentElement;
18444			while ( offsetParent &&
18445				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
18446				jQuery.css( offsetParent, "position" ) === "static" ) {
18447
18448				offsetParent = offsetParent.parentNode;
18449			}
18450			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
18451
18452				// Incorporate borders into its offset, since they are outside its content origin
18453				parentOffset = jQuery( offsetParent ).offset();
18454				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
18455				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
18456			}
18457		}
18458
18459		// Subtract parent offsets and element margins
18460		return {
18461			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
18462			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
18463		};
18464	},
18465
18466	// This method will return documentElement in the following cases:
18467	// 1) For the element inside the iframe without offsetParent, this method will return
18468	//    documentElement of the parent window
18469	// 2) For the hidden or detached element
18470	// 3) For body or html element, i.e. in case of the html node - it will return itself
18471	//
18472	// but those exceptions were never presented as a real life use-cases
18473	// and might be considered as more preferable results.
18474	//
18475	// This logic, however, is not guaranteed and can change at any point in the future
18476	offsetParent: function() {
18477		return this.map( function() {
18478			var offsetParent = this.offsetParent;
18479
18480			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
18481				offsetParent = offsetParent.offsetParent;
18482			}
18483
18484			return offsetParent || documentElement;
18485		} );
18486	}
18487} );
18488
18489// Create scrollLeft and scrollTop methods
18490jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
18491	var top = "pageYOffset" === prop;
18492
18493	jQuery.fn[ method ] = function( val ) {
18494		return access( this, function( elem, method, val ) {
18495
18496			// Coalesce documents and windows
18497			var win;
18498			if ( isWindow( elem ) ) {
18499				win = elem;
18500			} else if ( elem.nodeType === 9 ) {
18501				win = elem.defaultView;
18502			}
18503
18504			if ( val === undefined ) {
18505				return win ? win[ prop ] : elem[ method ];
18506			}
18507
18508			if ( win ) {
18509				win.scrollTo(
18510					!top ? val : win.pageXOffset,
18511					top ? val : win.pageYOffset
18512				);
18513
18514			} else {
18515				elem[ method ] = val;
18516			}
18517		}, method, val, arguments.length );
18518	};
18519} );
18520
18521// Support: Safari <=7 - 9.1, Chrome <=37 - 49
18522// Add the top/left cssHooks using jQuery.fn.position
18523// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
18524// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
18525// getComputedStyle returns percent when specified for top/left/bottom/right;
18526// rather than make the css module depend on the offset module, just check for it here
18527jQuery.each( [ "top", "left" ], function( _i, prop ) {
18528	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
18529		function( elem, computed ) {
18530			if ( computed ) {
18531				computed = curCSS( elem, prop );
18532
18533				// If curCSS returns percentage, fallback to offset
18534				return rnumnonpx.test( computed ) ?
18535					jQuery( elem ).position()[ prop ] + "px" :
18536					computed;
18537			}
18538		}
18539	);
18540} );
18541
18542
18543// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
18544jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
18545	jQuery.each( {
18546		padding: "inner" + name,
18547		content: type,
18548		"": "outer" + name
18549	}, function( defaultExtra, funcName ) {
18550
18551		// Margin is only for outerHeight, outerWidth
18552		jQuery.fn[ funcName ] = function( margin, value ) {
18553			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
18554				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
18555
18556			return access( this, function( elem, type, value ) {
18557				var doc;
18558
18559				if ( isWindow( elem ) ) {
18560
18561					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
18562					return funcName.indexOf( "outer" ) === 0 ?
18563						elem[ "inner" + name ] :
18564						elem.document.documentElement[ "client" + name ];
18565				}
18566
18567				// Get document width or height
18568				if ( elem.nodeType === 9 ) {
18569					doc = elem.documentElement;
18570
18571					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
18572					// whichever is greatest
18573					return Math.max(
18574						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
18575						elem.body[ "offset" + name ], doc[ "offset" + name ],
18576						doc[ "client" + name ]
18577					);
18578				}
18579
18580				return value === undefined ?
18581
18582					// Get width or height on the element, requesting but not forcing parseFloat
18583					jQuery.css( elem, type, extra ) :
18584
18585					// Set width or height on the element
18586					jQuery.style( elem, type, value, extra );
18587			}, type, chainable ? margin : undefined, chainable );
18588		};
18589	} );
18590} );
18591
18592
18593jQuery.each( [
18594	"ajaxStart",
18595	"ajaxStop",
18596	"ajaxComplete",
18597	"ajaxError",
18598	"ajaxSuccess",
18599	"ajaxSend"
18600], function( _i, type ) {
18601	jQuery.fn[ type ] = function( fn ) {
18602		return this.on( type, fn );
18603	};
18604} );
18605
18606
18607
18608
18609jQuery.fn.extend( {
18610
18611	bind: function( types, data, fn ) {
18612		return this.on( types, null, data, fn );
18613	},
18614	unbind: function( types, fn ) {
18615		return this.off( types, null, fn );
18616	},
18617
18618	delegate: function( selector, types, data, fn ) {
18619		return this.on( types, selector, data, fn );
18620	},
18621	undelegate: function( selector, types, fn ) {
18622
18623		// ( namespace ) or ( selector, types [, fn] )
18624		return arguments.length === 1 ?
18625			this.off( selector, "**" ) :
18626			this.off( types, selector || "**", fn );
18627	},
18628
18629	hover: function( fnOver, fnOut ) {
18630		return this
18631			.on( "mouseenter", fnOver )
18632			.on( "mouseleave", fnOut || fnOver );
18633	}
18634} );
18635
18636jQuery.each(
18637	( "blur focus focusin focusout resize scroll click dblclick " +
18638	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
18639	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
18640	function( _i, name ) {
18641
18642		// Handle event binding
18643		jQuery.fn[ name ] = function( data, fn ) {
18644			return arguments.length > 0 ?
18645				this.on( name, null, data, fn ) :
18646				this.trigger( name );
18647		};
18648	}
18649);
18650
18651
18652
18653
18654// Support: Android <=4.0 only
18655// Make sure we trim BOM and NBSP
18656// Require that the "whitespace run" starts from a non-whitespace
18657// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
18658var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
18659
18660// Bind a function to a context, optionally partially applying any
18661// arguments.
18662// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
18663// However, it is not slated for removal any time soon
18664jQuery.proxy = function( fn, context ) {
18665	var tmp, args, proxy;
18666
18667	if ( typeof context === "string" ) {
18668		tmp = fn[ context ];
18669		context = fn;
18670		fn = tmp;
18671	}
18672
18673	// Quick check to determine if target is callable, in the spec
18674	// this throws a TypeError, but we will just return undefined.
18675	if ( !isFunction( fn ) ) {
18676		return undefined;
18677	}
18678
18679	// Simulated bind
18680	args = slice.call( arguments, 2 );
18681	proxy = function() {
18682		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
18683	};
18684
18685	// Set the guid of unique handler to the same of original handler, so it can be removed
18686	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
18687
18688	return proxy;
18689};
18690
18691jQuery.holdReady = function( hold ) {
18692	if ( hold ) {
18693		jQuery.readyWait++;
18694	} else {
18695		jQuery.ready( true );
18696	}
18697};
18698jQuery.isArray = Array.isArray;
18699jQuery.parseJSON = JSON.parse;
18700jQuery.nodeName = nodeName;
18701jQuery.isFunction = isFunction;
18702jQuery.isWindow = isWindow;
18703jQuery.camelCase = camelCase;
18704jQuery.type = toType;
18705
18706jQuery.now = Date.now;
18707
18708jQuery.isNumeric = function( obj ) {
18709
18710	// As of jQuery 3.0, isNumeric is limited to
18711	// strings and numbers (primitives or objects)
18712	// that can be coerced to finite numbers (gh-2662)
18713	var type = jQuery.type( obj );
18714	return ( type === "number" || type === "string" ) &&
18715
18716		// parseFloat NaNs numeric-cast false positives ("")
18717		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
18718		// subtraction forces infinities to NaN
18719		!isNaN( obj - parseFloat( obj ) );
18720};
18721
18722jQuery.trim = function( text ) {
18723	return text == null ?
18724		"" :
18725		( text + "" ).replace( rtrim, "$1" );
18726};
18727
18728
18729
18730// Register as a named AMD module, since jQuery can be concatenated with other
18731// files that may use define, but not via a proper concatenation script that
18732// understands anonymous AMD modules. A named AMD is safest and most robust
18733// way to register. Lowercase jquery is used because AMD module names are
18734// derived from file names, and jQuery is normally delivered in a lowercase
18735// file name. Do this after creating the global so that if an AMD module wants
18736// to call noConflict to hide this version of jQuery, it will work.
18737
18738// Note that for maximum portability, libraries that are not jQuery should
18739// declare themselves as anonymous modules, and avoid setting a global if an
18740// AMD loader is present. jQuery is a special case. For more information, see
18741// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
18742
18743if ( true ) {
18744	!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {
18745		return jQuery;
18746	}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
18747				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
18748}
18749
18750
18751
18752
18753var
18754
18755	// Map over jQuery in case of overwrite
18756	_jQuery = window.jQuery,
18757
18758	// Map over the $ in case of overwrite
18759	_$ = window.$;
18760
18761jQuery.noConflict = function( deep ) {
18762	if ( window.$ === jQuery ) {
18763		window.$ = _$;
18764	}
18765
18766	if ( deep && window.jQuery === jQuery ) {
18767		window.jQuery = _jQuery;
18768	}
18769
18770	return jQuery;
18771};
18772
18773// Expose jQuery and $ identifiers, even in AMD
18774// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
18775// and CommonJS for browser emulators (trac-13566)
18776if ( typeof noGlobal === "undefined" ) {
18777	window.jQuery = window.$ = jQuery;
18778}
18779
18780
18781
18782
18783return jQuery;
18784} );
18785
18786
18787/***/ }),
18788
vendor: 559,392 bytes, lines 18789-36307
18789/***/ "./node_modules/lodash/lodash.js":
18790/*!***************************************!*\
18791  !*** ./node_modules/lodash/lodash.js ***!
18792  \***************************************/
18793/*! no static exports found */
18794/***/ (function(module, exports, __webpack_require__) {
18795
18796/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_RESULT__;/**
18797 * @license
18798 * Lodash <https://lodash.com/>
18799 * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
18800 * Released under MIT license <https://lodash.com/license>
18801 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
18802 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
18803 */
18804;(function() {
18805
18806  /** Used as a safe reference for `undefined` in pre-ES5 environments. */
18807  var undefined;
18808
18809  /** Used as the semantic version number. */
18810  var VERSION = '4.17.21';
18811
18812  /** Used as the size to enable large array optimizations. */
18813  var LARGE_ARRAY_SIZE = 200;
18814
18815  /** Error message constants. */
18816  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
18817      FUNC_ERROR_TEXT = 'Expected a function',
18818      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';
18819
18820  /** Used to stand-in for `undefined` hash values. */
18821  var HASH_UNDEFINED = '__lodash_hash_undefined__';
18822
18823  /** Used as the maximum memoize cache size. */
18824  var MAX_MEMOIZE_SIZE = 500;
18825
18826  /** Used as the internal argument placeholder. */
18827  var PLACEHOLDER = '__lodash_placeholder__';
18828
18829  /** Used to compose bitmasks for cloning. */
18830  var CLONE_DEEP_FLAG = 1,
18831      CLONE_FLAT_FLAG = 2,
18832      CLONE_SYMBOLS_FLAG = 4;
18833
18834  /** Used to compose bitmasks for value comparisons. */
18835  var COMPARE_PARTIAL_FLAG = 1,
18836      COMPARE_UNORDERED_FLAG = 2;
18837
18838  /** Used to compose bitmasks for function metadata. */
18839  var WRAP_BIND_FLAG = 1,
18840      WRAP_BIND_KEY_FLAG = 2,
18841      WRAP_CURRY_BOUND_FLAG = 4,
18842      WRAP_CURRY_FLAG = 8,
18843      WRAP_CURRY_RIGHT_FLAG = 16,
18844      WRAP_PARTIAL_FLAG = 32,
18845      WRAP_PARTIAL_RIGHT_FLAG = 64,
18846      WRAP_ARY_FLAG = 128,
18847      WRAP_REARG_FLAG = 256,
18848      WRAP_FLIP_FLAG = 512;
18849
18850  /** Used as default options for `_.truncate`. */
18851  var DEFAULT_TRUNC_LENGTH = 30,
18852      DEFAULT_TRUNC_OMISSION = '...';
18853
18854  /** Used to detect hot functions by number of calls within a span of milliseconds. */
18855  var HOT_COUNT = 800,
18856      HOT_SPAN = 16;
18857
18858  /** Used to indicate the type of lazy iteratees. */
18859  var LAZY_FILTER_FLAG = 1,
18860      LAZY_MAP_FLAG = 2,
18861      LAZY_WHILE_FLAG = 3;
18862
18863  /** Used as references for various `Number` constants. */
18864  var INFINITY = 1 / 0,
18865      MAX_SAFE_INTEGER = 9007199254740991,
18866      MAX_INTEGER = 1.7976931348623157e+308,
18867      NAN = 0 / 0;
18868
18869  /** Used as references for the maximum length and index of an array. */
18870  var MAX_ARRAY_LENGTH = 4294967295,
18871      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
18872      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
18873
18874  /** Used to associate wrap methods with their bit flags. */
18875  var wrapFlags = [
18876    ['ary', WRAP_ARY_FLAG],
18877    ['bind', WRAP_BIND_FLAG],
18878    ['bindKey', WRAP_BIND_KEY_FLAG],
18879    ['curry', WRAP_CURRY_FLAG],
18880    ['curryRight', WRAP_CURRY_RIGHT_FLAG],
18881    ['flip', WRAP_FLIP_FLAG],
18882    ['partial', WRAP_PARTIAL_FLAG],
18883    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
18884    ['rearg', WRAP_REARG_FLAG]
18885  ];
18886
18887  /** `Object#toString` result references. */
18888  var argsTag = '[object Arguments]',
18889      arrayTag = '[object Array]',
18890      asyncTag = '[object AsyncFunction]',
18891      boolTag = '[object Boolean]',
18892      dateTag = '[object Date]',
18893      domExcTag = '[object DOMException]',
18894      errorTag = '[object Error]',
18895      funcTag = '[object Function]',
18896      genTag = '[object GeneratorFunction]',
18897      mapTag = '[object Map]',
18898      numberTag = '[object Number]',
18899      nullTag = '[object Null]',
18900      objectTag = '[object Object]',
18901      promiseTag = '[object Promise]',
18902      proxyTag = '[object Proxy]',
18903      regexpTag = '[object RegExp]',
18904      setTag = '[object Set]',
18905      stringTag = '[object String]',
18906      symbolTag = '[object Symbol]',
18907      undefinedTag = '[object Undefined]',
18908      weakMapTag = '[object WeakMap]',
18909      weakSetTag = '[object WeakSet]';
18910
18911  var arrayBufferTag = '[object ArrayBuffer]',
18912      dataViewTag = '[object DataView]',
18913      float32Tag = '[object Float32Array]',
18914      float64Tag = '[object Float64Array]',
18915      int8Tag = '[object Int8Array]',
18916      int16Tag = '[object Int16Array]',
18917      int32Tag = '[object Int32Array]',
18918      uint8Tag = '[object Uint8Array]',
18919      uint8ClampedTag = '[object Uint8ClampedArray]',
18920      uint16Tag = '[object Uint16Array]',
18921      uint32Tag = '[object Uint32Array]';
18922
18923  /** Used to match empty string literals in compiled template source. */
18924  var reEmptyStringLeading = /\b__p \+= '';/g,
18925      reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
18926      reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
18927
18928  /** Used to match HTML entities and HTML characters. */
18929  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
18930      reUnescapedHtml = /[&<>"']/g,
18931      reHasEscapedHtml = RegExp(reEscapedHtml.source),
18932      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
18933
18934  /** Used to match template delimiters. */
18935  var reEscape = /<%-([\s\S]+?)%>/g,
18936      reEvaluate = /<%([\s\S]+?)%>/g,
18937      reInterpolate = /<%=([\s\S]+?)%>/g;
18938
18939  /** Used to match property names within property paths. */
18940  var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
18941      reIsPlainProp = /^\w*$/,
18942      rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
18943
18944  /**
18945   * Used to match `RegExp`
18946   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
18947   */
18948  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
18949      reHasRegExpChar = RegExp(reRegExpChar.source);
18950
18951  /** Used to match leading whitespace. */
18952  var reTrimStart = /^\s+/;
18953
18954  /** Used to match a single whitespace character. */
18955  var reWhitespace = /\s/;
18956
18957  /** Used to match wrap detail comments. */
18958  var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
18959      reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
18960      reSplitDetails = /,? & /;
18961
18962  /** Used to match words composed of alphanumeric characters. */
18963  var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
18964
18965  /**
18966   * Used to validate the `validate` option in `_.template` variable.
18967   *
18968   * Forbids characters which could potentially change the meaning of the function argument definition:
18969   * - "()," (modification of function parameters)
18970   * - "=" (default value)
18971   * - "[]{}" (destructuring of function parameters)
18972   * - "/" (beginning of a comment)
18973   * - whitespace
18974   */
18975  var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;
18976
18977  /** Used to match backslashes in property paths. */
18978  var reEscapeChar = /\\(\\)?/g;
18979
18980  /**
18981   * Used to match
18982   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
18983   */
18984  var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
18985
18986  /** Used to match `RegExp` flags from their coerced string values. */
18987  var reFlags = /\w*$/;
18988
18989  /** Used to detect bad signed hexadecimal string values. */
18990  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
18991
18992  /** Used to detect binary string values. */
18993  var reIsBinary = /^0b[01]+$/i;
18994
18995  /** Used to detect host constructors (Safari). */
18996  var reIsHostCtor = /^\[object .+?Constructor\]$/;
18997
18998  /** Used to detect octal string values. */
18999  var reIsOctal = /^0o[0-7]+$/i;
19000
19001  /** Used to detect unsigned integer values. */
19002  var reIsUint = /^(?:0|[1-9]\d*)$/;
19003
19004  /** Used to match Latin Unicode letters (excluding mathematical operators). */
19005  var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
19006
19007  /** Used to ensure capturing order of template delimiters. */
19008  var reNoMatch = /($^)/;
19009
19010  /** Used to match unescaped characters in compiled string literals. */
19011  var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
19012
19013  /** Used to compose unicode character classes. */
19014  var rsAstralRange = '\\ud800-\\udfff',
19015      rsComboMarksRange = '\\u0300-\\u036f',
19016      reComboHalfMarksRange = '\\ufe20-\\ufe2f',
19017      rsComboSymbolsRange = '\\u20d0-\\u20ff',
19018      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
19019      rsDingbatRange = '\\u2700-\\u27bf',
19020      rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
19021      rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
19022      rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
19023      rsPunctuationRange = '\\u2000-\\u206f',
19024      rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
19025      rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
19026      rsVarRange = '\\ufe0e\\ufe0f',
19027      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
19028
19029  /** Used to compose unicode capture groups. */
19030  var rsApos = "['\u2019]",
19031      rsAstral = '[' + rsAstralRange + ']',
19032      rsBreak = '[' + rsBreakRange + ']',
19033      rsCombo = '[' + rsComboRange + ']',
19034      rsDigits = '\\d+',
19035      rsDingbat = '[' + rsDingbatRange + ']',
19036      rsLower = '[' + rsLowerRange + ']',
19037      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
19038      rsFitz = '\\ud83c[\\udffb-\\udfff]',
19039      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
19040      rsNonAstral = '[^' + rsAstralRange + ']',
19041      rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
19042      rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
19043      rsUpper = '[' + rsUpperRange + ']',
19044      rsZWJ = '\\u200d';
19045
19046  /** Used to compose unicode regexes. */
19047  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
19048      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
19049      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
19050      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
19051      reOptMod = rsModifier + '?',
19052      rsOptVar = '[' + rsVarRange + ']?',
19053      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
19054      rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
19055      rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
19056      rsSeq = rsOptVar + reOptMod + rsOptJoin,
19057      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
19058      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
19059
19060  /** Used to match apostrophes. */
19061  var reApos = RegExp(rsApos, 'g');
19062
19063  /**
19064   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
19065   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
19066   */
19067  var reComboMark = RegExp(rsCombo, 'g');
19068
19069  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
19070  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
19071
19072  /** Used to match complex or compound words. */
19073  var reUnicodeWord = RegExp([
19074    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
19075    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
19076    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
19077    rsUpper + '+' + rsOptContrUpper,
19078    rsOrdUpper,
19079    rsOrdLower,
19080    rsDigits,
19081    rsEmoji
19082  ].join('|'), 'g');
19083
19084  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
19085  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');
19086
19087  /** Used to detect strings that need a more robust regexp to match words. */
19088  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
19089
19090  /** Used to assign default `context` object properties. */
19091  var contextProps = [
19092    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
19093    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
19094    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
19095    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
19096    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
19097  ];
19098
19099  /** Used to make template sourceURLs easier to identify. */
19100  var templateCounter = -1;
19101
19102  /** Used to identify `toStringTag` values of typed arrays. */
19103  var typedArrayTags = {};
19104  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
19105  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
19106  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
19107  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
19108  typedArrayTags[uint32Tag] = true;
19109  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
19110  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
19111  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
19112  typedArrayTags[errorTag] = typedArrayTags[funcTag] =
19113  typedArrayTags[mapTag] = typedArrayTags[numberTag] =
19114  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
19115  typedArrayTags[setTag] = typedArrayTags[stringTag] =
19116  typedArrayTags[weakMapTag] = false;
19117
19118  /** Used to identify `toStringTag` values supported by `_.clone`. */
19119  var cloneableTags = {};
19120  cloneableTags[argsTag] = cloneableTags[arrayTag] =
19121  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
19122  cloneableTags[boolTag] = cloneableTags[dateTag] =
19123  cloneableTags[float32Tag] = cloneableTags[float64Tag] =
19124  cloneableTags[int8Tag] = cloneableTags[int16Tag] =
19125  cloneableTags[int32Tag] = cloneableTags[mapTag] =
19126  cloneableTags[numberTag] = cloneableTags[objectTag] =
19127  cloneableTags[regexpTag] = cloneableTags[setTag] =
19128  cloneableTags[stringTag] = cloneableTags[symbolTag] =
19129  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
19130  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
19131  cloneableTags[errorTag] = cloneableTags[funcTag] =
19132  cloneableTags[weakMapTag] = false;
19133
19134  /** Used to map Latin Unicode letters to basic Latin letters. */
19135  var deburredLetters = {
19136    // Latin-1 Supplement block.
19137    '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
19138    '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
19139    '\xc7': 'C',  '\xe7': 'c',
19140    '\xd0': 'D',  '\xf0': 'd',
19141    '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
19142    '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
19143    '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
19144    '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
19145    '\xd1': 'N',  '\xf1': 'n',
19146    '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
19147    '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
19148    '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
19149    '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
19150    '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
19151    '\xc6': 'Ae', '\xe6': 'ae',
19152    '\xde': 'Th', '\xfe': 'th',
19153    '\xdf': 'ss',
19154    // Latin Extended-A block.
19155    '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A',
19156    '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a',
19157    '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
19158    '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
19159    '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
19160    '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
19161    '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
19162    '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
19163    '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
19164    '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
19165    '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
19166    '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
19167    '\u0134': 'J',  '\u0135': 'j',
19168    '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k',
19169    '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
19170    '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
19171    '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
19172    '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
19173    '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O',
19174    '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o',
19175    '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R',
19176    '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r',
19177    '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
19178    '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's',
19179    '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T',
19180    '\u0163': 't',  '\u0165': 't', '\u0167': 't',
19181    '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
19182    '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
19183    '\u0174': 'W',  '\u0175': 'w',
19184    '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y',
19185    '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z',
19186    '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z',
19187    '\u0132': 'IJ', '\u0133': 'ij',
19188    '\u0152': 'Oe', '\u0153': 'oe',
19189    '\u0149': "'n", '\u017f': 's'
19190  };
19191
19192  /** Used to map characters to HTML entities. */
19193  var htmlEscapes = {
19194    '&': '&amp;',
19195    '<': '&lt;',
19196    '>': '&gt;',
19197    '"': '&quot;',
19198    "'": '&#39;'
19199  };
19200
19201  /** Used to map HTML entities to characters. */
19202  var htmlUnescapes = {
19203    '&amp;': '&',
19204    '&lt;': '<',
19205    '&gt;': '>',
19206    '&quot;': '"',
19207    '&#39;': "'"
19208  };
19209
19210  /** Used to escape characters for inclusion in compiled string literals. */
19211  var stringEscapes = {
19212    '\\': '\\',
19213    "'": "'",
19214    '\n': 'n',
19215    '\r': 'r',
19216    '\u2028': 'u2028',
19217    '\u2029': 'u2029'
19218  };
19219
19220  /** Built-in method references without a dependency on `root`. */
19221  var freeParseFloat = parseFloat,
19222      freeParseInt = parseInt;
19223
19224  /** Detect free variable `global` from Node.js. */
19225  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
19226
19227  /** Detect free variable `self`. */
19228  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
19229
19230  /** Used as a reference to the global object. */
19231  var root = freeGlobal || freeSelf || Function('return this')();
19232
19233  /** Detect free variable `exports`. */
19234  var freeExports =  true && exports && !exports.nodeType && exports;
19235
19236  /** Detect free variable `module`. */
19237  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
19238
19239  /** Detect the popular CommonJS extension `module.exports`. */
19240  var moduleExports = freeModule && freeModule.exports === freeExports;
19241
19242  /** Detect free variable `process` from Node.js. */
19243  var freeProcess = moduleExports && freeGlobal.process;
19244
19245  /** Used to access faster Node.js helpers. */
19246  var nodeUtil = (function() {
19247    try {
19248      // Use `util.types` for Node.js 10+.
19249      var types = freeModule && freeModule.require && freeModule.require('util').types;
19250
19251      if (types) {
19252        return types;
19253      }
19254
19255      // Legacy `process.binding('util')` for Node.js < 10.
19256      return freeProcess && freeProcess.binding && freeProcess.binding('util');
19257    } catch (e) {}
19258  }());
19259
19260  /* Node.js helper references. */
19261  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
19262      nodeIsDate = nodeUtil && nodeUtil.isDate,
19263      nodeIsMap = nodeUtil && nodeUtil.isMap,
19264      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
19265      nodeIsSet = nodeUtil && nodeUtil.isSet,
19266      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
19267
19268  /*--------------------------------------------------------------------------*/
19269
19270  /**
19271   * A faster alternative to `Function#apply`, this function invokes `func`
19272   * with the `this` binding of `thisArg` and the arguments of `args`.
19273   *
19274   * @private
19275   * @param {Function} func The function to invoke.
19276   * @param {*} thisArg The `this` binding of `func`.
19277   * @param {Array} args The arguments to invoke `func` with.
19278   * @returns {*} Returns the result of `func`.
19279   */
19280  function apply(func, thisArg, args) {
19281    switch (args.length) {
19282      case 0: return func.call(thisArg);
19283      case 1: return func.call(thisArg, args[0]);
19284      case 2: return func.call(thisArg, args[0], args[1]);
19285      case 3: return func.call(thisArg, args[0], args[1], args[2]);
19286    }
19287    return func.apply(thisArg, args);
19288  }
19289
19290  /**
19291   * A specialized version of `baseAggregator` for arrays.
19292   *
19293   * @private
19294   * @param {Array} [array] The array to iterate over.
19295   * @param {Function} setter The function to set `accumulator` values.
19296   * @param {Function} iteratee The iteratee to transform keys.
19297   * @param {Object} accumulator The initial aggregated object.
19298   * @returns {Function} Returns `accumulator`.
19299   */
19300  function arrayAggregator(array, setter, iteratee, accumulator) {
19301    var index = -1,
19302        length = array == null ? 0 : array.length;
19303
19304    while (++index < length) {
19305      var value = array[index];
19306      setter(accumulator, value, iteratee(value), array);
19307    }
19308    return accumulator;
19309  }
19310
19311  /**
19312   * A specialized version of `_.forEach` for arrays without support for
19313   * iteratee shorthands.
19314   *
19315   * @private
19316   * @param {Array} [array] The array to iterate over.
19317   * @param {Function} iteratee The function invoked per iteration.
19318   * @returns {Array} Returns `array`.
19319   */
19320  function arrayEach(array, iteratee) {
19321    var index = -1,
19322        length = array == null ? 0 : array.length;
19323
19324    while (++index < length) {
19325      if (iteratee(array[index], index, array) === false) {
19326        break;
19327      }
19328    }
19329    return array;
19330  }
19331
19332  /**
19333   * A specialized version of `_.forEachRight` for arrays without support for
19334   * iteratee shorthands.
19335   *
19336   * @private
19337   * @param {Array} [array] The array to iterate over.
19338   * @param {Function} iteratee The function invoked per iteration.
19339   * @returns {Array} Returns `array`.
19340   */
19341  function arrayEachRight(array, iteratee) {
19342    var length = array == null ? 0 : array.length;
19343
19344    while (length--) {
19345      if (iteratee(array[length], length, array) === false) {
19346        break;
19347      }
19348    }
19349    return array;
19350  }
19351
19352  /**
19353   * A specialized version of `_.every` for arrays without support for
19354   * iteratee shorthands.
19355   *
19356   * @private
19357   * @param {Array} [array] The array to iterate over.
19358   * @param {Function} predicate The function invoked per iteration.
19359   * @returns {boolean} Returns `true` if all elements pass the predicate check,
19360   *  else `false`.
19361   */
19362  function arrayEvery(array, predicate) {
19363    var index = -1,
19364        length = array == null ? 0 : array.length;
19365
19366    while (++index < length) {
19367      if (!predicate(array[index], index, array)) {
19368        return false;
19369      }
19370    }
19371    return true;
19372  }
19373
19374  /**
19375   * A specialized version of `_.filter` for arrays without support for
19376   * iteratee shorthands.
19377   *
19378   * @private
19379   * @param {Array} [array] The array to iterate over.
19380   * @param {Function} predicate The function invoked per iteration.
19381   * @returns {Array} Returns the new filtered array.
19382   */
19383  function arrayFilter(array, predicate) {
19384    var index = -1,
19385        length = array == null ? 0 : array.length,
19386        resIndex = 0,
19387        result = [];
19388
19389    while (++index < length) {
19390      var value = array[index];
19391      if (predicate(value, index, array)) {
19392        result[resIndex++] = value;
19393      }
19394    }
19395    return result;
19396  }
19397
19398  /**
19399   * A specialized version of `_.includes` for arrays without support for
19400   * specifying an index to search from.
19401   *
19402   * @private
19403   * @param {Array} [array] The array to inspect.
19404   * @param {*} target The value to search for.
19405   * @returns {boolean} Returns `true` if `target` is found, else `false`.
19406   */
19407  function arrayIncludes(array, value) {
19408    var length = array == null ? 0 : array.length;
19409    return !!length && baseIndexOf(array, value, 0) > -1;
19410  }
19411
19412  /**
19413   * This function is like `arrayIncludes` except that it accepts a comparator.
19414   *
19415   * @private
19416   * @param {Array} [array] The array to inspect.
19417   * @param {*} target The value to search for.
19418   * @param {Function} comparator The comparator invoked per element.
19419   * @returns {boolean} Returns `true` if `target` is found, else `false`.
19420   */
19421  function arrayIncludesWith(array, value, comparator) {
19422    var index = -1,
19423        length = array == null ? 0 : array.length;
19424
19425    while (++index < length) {
19426      if (comparator(value, array[index])) {
19427        return true;
19428      }
19429    }
19430    return false;
19431  }
19432
19433  /**
19434   * A specialized version of `_.map` for arrays without support for iteratee
19435   * shorthands.
19436   *
19437   * @private
19438   * @param {Array} [array] The array to iterate over.
19439   * @param {Function} iteratee The function invoked per iteration.
19440   * @returns {Array} Returns the new mapped array.
19441   */
19442  function arrayMap(array, iteratee) {
19443    var index = -1,
19444        length = array == null ? 0 : array.length,
19445        result = Array(length);
19446
19447    while (++index < length) {
19448      result[index] = iteratee(array[index], index, array);
19449    }
19450    return result;
19451  }
19452
19453  /**
19454   * Appends the elements of `values` to `array`.
19455   *
19456   * @private
19457   * @param {Array} array The array to modify.
19458   * @param {Array} values The values to append.
19459   * @returns {Array} Returns `array`.
19460   */
19461  function arrayPush(array, values) {
19462    var index = -1,
19463        length = values.length,
19464        offset = array.length;
19465
19466    while (++index < length) {
19467      array[offset + index] = values[index];
19468    }
19469    return array;
19470  }
19471
19472  /**
19473   * A specialized version of `_.reduce` for arrays without support for
19474   * iteratee shorthands.
19475   *
19476   * @private
19477   * @param {Array} [array] The array to iterate over.
19478   * @param {Function} iteratee The function invoked per iteration.
19479   * @param {*} [accumulator] The initial value.
19480   * @param {boolean} [initAccum] Specify using the first element of `array` as
19481   *  the initial value.
19482   * @returns {*} Returns the accumulated value.
19483   */
19484  function arrayReduce(array, iteratee, accumulator, initAccum) {
19485    var index = -1,
19486        length = array == null ? 0 : array.length;
19487
19488    if (initAccum && length) {
19489      accumulator = array[++index];
19490    }
19491    while (++index < length) {
19492      accumulator = iteratee(accumulator, array[index], index, array);
19493    }
19494    return accumulator;
19495  }
19496
19497  /**
19498   * A specialized version of `_.reduceRight` for arrays without support for
19499   * iteratee shorthands.
19500   *
19501   * @private
19502   * @param {Array} [array] The array to iterate over.
19503   * @param {Function} iteratee The function invoked per iteration.
19504   * @param {*} [accumulator] The initial value.
19505   * @param {boolean} [initAccum] Specify using the last element of `array` as
19506   *  the initial value.
19507   * @returns {*} Returns the accumulated value.
19508   */
19509  function arrayReduceRight(array, iteratee, accumulator, initAccum) {
19510    var length = array == null ? 0 : array.length;
19511    if (initAccum && length) {
19512      accumulator = array[--length];
19513    }
19514    while (length--) {
19515      accumulator = iteratee(accumulator, array[length], length, array);
19516    }
19517    return accumulator;
19518  }
19519
19520  /**
19521   * A specialized version of `_.some` for arrays without support for iteratee
19522   * shorthands.
19523   *
19524   * @private
19525   * @param {Array} [array] The array to iterate over.
19526   * @param {Function} predicate The function invoked per iteration.
19527   * @returns {boolean} Returns `true` if any element passes the predicate check,
19528   *  else `false`.
19529   */
19530  function arraySome(array, predicate) {
19531    var index = -1,
19532        length = array == null ? 0 : array.length;
19533
19534    while (++index < length) {
19535      if (predicate(array[index], index, array)) {
19536        return true;
19537      }
19538    }
19539    return false;
19540  }
19541
19542  /**
19543   * Gets the size of an ASCII `string`.
19544   *
19545   * @private
19546   * @param {string} string The string inspect.
19547   * @returns {number} Returns the string size.
19548   */
19549  var asciiSize = baseProperty('length');
19550
19551  /**
19552   * Converts an ASCII `string` to an array.
19553   *
19554   * @private
19555   * @param {string} string The string to convert.
19556   * @returns {Array} Returns the converted array.
19557   */
19558  function asciiToArray(string) {
19559    return string.split('');
19560  }
19561
19562  /**
19563   * Splits an ASCII `string` into an array of its words.
19564   *
19565   * @private
19566   * @param {string} The string to inspect.
19567   * @returns {Array} Returns the words of `string`.
19568   */
19569  function asciiWords(string) {
19570    return string.match(reAsciiWord) || [];
19571  }
19572
19573  /**
19574   * The base implementation of methods like `_.findKey` and `_.findLastKey`,
19575   * without support for iteratee shorthands, which iterates over `collection`
19576   * using `eachFunc`.
19577   *
19578   * @private
19579   * @param {Array|Object} collection The collection to inspect.
19580   * @param {Function} predicate The function invoked per iteration.
19581   * @param {Function} eachFunc The function to iterate over `collection`.
19582   * @returns {*} Returns the found element or its key, else `undefined`.
19583   */
19584  function baseFindKey(collection, predicate, eachFunc) {
19585    var result;
19586    eachFunc(collection, function(value, key, collection) {
19587      if (predicate(value, key, collection)) {
19588        result = key;
19589        return false;
19590      }
19591    });
19592    return result;
19593  }
19594
19595  /**
19596   * The base implementation of `_.findIndex` and `_.findLastIndex` without
19597   * support for iteratee shorthands.
19598   *
19599   * @private
19600   * @param {Array} array The array to inspect.
19601   * @param {Function} predicate The function invoked per iteration.
19602   * @param {number} fromIndex The index to search from.
19603   * @param {boolean} [fromRight] Specify iterating from right to left.
19604   * @returns {number} Returns the index of the matched value, else `-1`.
19605   */
19606  function baseFindIndex(array, predicate, fromIndex, fromRight) {
19607    var length = array.length,
19608        index = fromIndex + (fromRight ? 1 : -1);
19609
19610    while ((fromRight ? index-- : ++index < length)) {
19611      if (predicate(array[index], index, array)) {
19612        return index;
19613      }
19614    }
19615    return -1;
19616  }
19617
19618  /**
19619   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
19620   *
19621   * @private
19622   * @param {Array} array The array to inspect.
19623   * @param {*} value The value to search for.
19624   * @param {number} fromIndex The index to search from.
19625   * @returns {number} Returns the index of the matched value, else `-1`.
19626   */
19627  function baseIndexOf(array, value, fromIndex) {
19628    return value === value
19629      ? strictIndexOf(array, value, fromIndex)
19630      : baseFindIndex(array, baseIsNaN, fromIndex);
19631  }
19632
19633  /**
19634   * This function is like `baseIndexOf` except that it accepts a comparator.
19635   *
19636   * @private
19637   * @param {Array} array The array to inspect.
19638   * @param {*} value The value to search for.
19639   * @param {number} fromIndex The index to search from.
19640   * @param {Function} comparator The comparator invoked per element.
19641   * @returns {number} Returns the index of the matched value, else `-1`.
19642   */
19643  function baseIndexOfWith(array, value, fromIndex, comparator) {
19644    var index = fromIndex - 1,
19645        length = array.length;
19646
19647    while (++index < length) {
19648      if (comparator(array[index], value)) {
19649        return index;
19650      }
19651    }
19652    return -1;
19653  }
19654
19655  /**
19656   * The base implementation of `_.isNaN` without support for number objects.
19657   *
19658   * @private
19659   * @param {*} value The value to check.
19660   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
19661   */
19662  function baseIsNaN(value) {
19663    return value !== value;
19664  }
19665
19666  /**
19667   * The base implementation of `_.mean` and `_.meanBy` without support for
19668   * iteratee shorthands.
19669   *
19670   * @private
19671   * @param {Array} array The array to iterate over.
19672   * @param {Function} iteratee The function invoked per iteration.
19673   * @returns {number} Returns the mean.
19674   */
19675  function baseMean(array, iteratee) {
19676    var length = array == null ? 0 : array.length;
19677    return length ? (baseSum(array, iteratee) / length) : NAN;
19678  }
19679
19680  /**
19681   * The base implementation of `_.property` without support for deep paths.
19682   *
19683   * @private
19684   * @param {string} key The key of the property to get.
19685   * @returns {Function} Returns the new accessor function.
19686   */
19687  function baseProperty(key) {
19688    return function(object) {
19689      return object == null ? undefined : object[key];
19690    };
19691  }
19692
19693  /**
19694   * The base implementation of `_.propertyOf` without support for deep paths.
19695   *
19696   * @private
19697   * @param {Object} object The object to query.
19698   * @returns {Function} Returns the new accessor function.
19699   */
19700  function basePropertyOf(object) {
19701    return function(key) {
19702      return object == null ? undefined : object[key];
19703    };
19704  }
19705
19706  /**
19707   * The base implementation of `_.reduce` and `_.reduceRight`, without support
19708   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
19709   *
19710   * @private
19711   * @param {Array|Object} collection The collection to iterate over.
19712   * @param {Function} iteratee The function invoked per iteration.
19713   * @param {*} accumulator The initial value.
19714   * @param {boolean} initAccum Specify using the first or last element of
19715   *  `collection` as the initial value.
19716   * @param {Function} eachFunc The function to iterate over `collection`.
19717   * @returns {*} Returns the accumulated value.
19718   */
19719  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
19720    eachFunc(collection, function(value, index, collection) {
19721      accumulator = initAccum
19722        ? (initAccum = false, value)
19723        : iteratee(accumulator, value, index, collection);
19724    });
19725    return accumulator;
19726  }
19727
19728  /**
19729   * The base implementation of `_.sortBy` which uses `comparer` to define the
19730   * sort order of `array` and replaces criteria objects with their corresponding
19731   * values.
19732   *
19733   * @private
19734   * @param {Array} array The array to sort.
19735   * @param {Function} comparer The function to define sort order.
19736   * @returns {Array} Returns `array`.
19737   */
19738  function baseSortBy(array, comparer) {
19739    var length = array.length;
19740
19741    array.sort(comparer);
19742    while (length--) {
19743      array[length] = array[length].value;
19744    }
19745    return array;
19746  }
19747
19748  /**
19749   * The base implementation of `_.sum` and `_.sumBy` without support for
19750   * iteratee shorthands.
19751   *
19752   * @private
19753   * @param {Array} array The array to iterate over.
19754   * @param {Function} iteratee The function invoked per iteration.
19755   * @returns {number} Returns the sum.
19756   */
19757  function baseSum(array, iteratee) {
19758    var result,
19759        index = -1,
19760        length = array.length;
19761
19762    while (++index < length) {
19763      var current = iteratee(array[index]);
19764      if (current !== undefined) {
19765        result = result === undefined ? current : (result + current);
19766      }
19767    }
19768    return result;
19769  }
19770
19771  /**
19772   * The base implementation of `_.times` without support for iteratee shorthands
19773   * or max array length checks.
19774   *
19775   * @private
19776   * @param {number} n The number of times to invoke `iteratee`.
19777   * @param {Function} iteratee The function invoked per iteration.
19778   * @returns {Array} Returns the array of results.
19779   */
19780  function baseTimes(n, iteratee) {
19781    var index = -1,
19782        result = Array(n);
19783
19784    while (++index < n) {
19785      result[index] = iteratee(index);
19786    }
19787    return result;
19788  }
19789
19790  /**
19791   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
19792   * of key-value pairs for `object` corresponding to the property names of `props`.
19793   *
19794   * @private
19795   * @param {Object} object The object to query.
19796   * @param {Array} props The property names to get values for.
19797   * @returns {Object} Returns the key-value pairs.
19798   */
19799  function baseToPairs(object, props) {
19800    return arrayMap(props, function(key) {
19801      return [key, object[key]];
19802    });
19803  }
19804
19805  /**
19806   * The base implementation of `_.trim`.
19807   *
19808   * @private
19809   * @param {string} string The string to trim.
19810   * @returns {string} Returns the trimmed string.
19811   */
19812  function baseTrim(string) {
19813    return string
19814      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
19815      : string;
19816  }
19817
19818  /**
19819   * The base implementation of `_.unary` without support for storing metadata.
19820   *
19821   * @private
19822   * @param {Function} func The function to cap arguments for.
19823   * @returns {Function} Returns the new capped function.
19824   */
19825  function baseUnary(func) {
19826    return function(value) {
19827      return func(value);
19828    };
19829  }
19830
19831  /**
19832   * The base implementation of `_.values` and `_.valuesIn` which creates an
19833   * array of `object` property values corresponding to the property names
19834   * of `props`.
19835   *
19836   * @private
19837   * @param {Object} object The object to query.
19838   * @param {Array} props The property names to get values for.
19839   * @returns {Object} Returns the array of property values.
19840   */
19841  function baseValues(object, props) {
19842    return arrayMap(props, function(key) {
19843      return object[key];
19844    });
19845  }
19846
19847  /**
19848   * Checks if a `cache` value for `key` exists.
19849   *
19850   * @private
19851   * @param {Object} cache The cache to query.
19852   * @param {string} key The key of the entry to check.
19853   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
19854   */
19855  function cacheHas(cache, key) {
19856    return cache.has(key);
19857  }
19858
19859  /**
19860   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
19861   * that is not found in the character symbols.
19862   *
19863   * @private
19864   * @param {Array} strSymbols The string symbols to inspect.
19865   * @param {Array} chrSymbols The character symbols to find.
19866   * @returns {number} Returns the index of the first unmatched string symbol.
19867   */
19868  function charsStartIndex(strSymbols, chrSymbols) {
19869    var index = -1,
19870        length = strSymbols.length;
19871
19872    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
19873    return index;
19874  }
19875
19876  /**
19877   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
19878   * that is not found in the character symbols.
19879   *
19880   * @private
19881   * @param {Array} strSymbols The string symbols to inspect.
19882   * @param {Array} chrSymbols The character symbols to find.
19883   * @returns {number} Returns the index of the last unmatched string symbol.
19884   */
19885  function charsEndIndex(strSymbols, chrSymbols) {
19886    var index = strSymbols.length;
19887
19888    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
19889    return index;
19890  }
19891
19892  /**
19893   * Gets the number of `placeholder` occurrences in `array`.
19894   *
19895   * @private
19896   * @param {Array} array The array to inspect.
19897   * @param {*} placeholder The placeholder to search for.
19898   * @returns {number} Returns the placeholder count.
19899   */
19900  function countHolders(array, placeholder) {
19901    var length = array.length,
19902        result = 0;
19903
19904    while (length--) {
19905      if (array[length] === placeholder) {
19906        ++result;
19907      }
19908    }
19909    return result;
19910  }
19911
19912  /**
19913   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
19914   * letters to basic Latin letters.
19915   *
19916   * @private
19917   * @param {string} letter The matched letter to deburr.
19918   * @returns {string} Returns the deburred letter.
19919   */
19920  var deburrLetter = basePropertyOf(deburredLetters);
19921
19922  /**
19923   * Used by `_.escape` to convert characters to HTML entities.
19924   *
19925   * @private
19926   * @param {string} chr The matched character to escape.
19927   * @returns {string} Returns the escaped character.
19928   */
19929  var escapeHtmlChar = basePropertyOf(htmlEscapes);
19930
19931  /**
19932   * Used by `_.template` to escape characters for inclusion in compiled string literals.
19933   *
19934   * @private
19935   * @param {string} chr The matched character to escape.
19936   * @returns {string} Returns the escaped character.
19937   */
19938  function escapeStringChar(chr) {
19939    return '\\' + stringEscapes[chr];
19940  }
19941
19942  /**
19943   * Gets the value at `key` of `object`.
19944   *
19945   * @private
19946   * @param {Object} [object] The object to query.
19947   * @param {string} key The key of the property to get.
19948   * @returns {*} Returns the property value.
19949   */
19950  function getValue(object, key) {
19951    return object == null ? undefined : object[key];
19952  }
19953
19954  /**
19955   * Checks if `string` contains Unicode symbols.
19956   *
19957   * @private
19958   * @param {string} string The string to inspect.
19959   * @returns {boolean} Returns `true` if a symbol is found, else `false`.
19960   */
19961  function hasUnicode(string) {
19962    return reHasUnicode.test(string);
19963  }
19964
19965  /**
19966   * Checks if `string` contains a word composed of Unicode symbols.
19967   *
19968   * @private
19969   * @param {string} string The string to inspect.
19970   * @returns {boolean} Returns `true` if a word is found, else `false`.
19971   */
19972  function hasUnicodeWord(string) {
19973    return reHasUnicodeWord.test(string);
19974  }
19975
19976  /**
19977   * Converts `iterator` to an array.
19978   *
19979   * @private
19980   * @param {Object} iterator The iterator to convert.
19981   * @returns {Array} Returns the converted array.
19982   */
19983  function iteratorToArray(iterator) {
19984    var data,
19985        result = [];
19986
19987    while (!(data = iterator.next()).done) {
19988      result.push(data.value);
19989    }
19990    return result;
19991  }
19992
19993  /**
19994   * Converts `map` to its key-value pairs.
19995   *
19996   * @private
19997   * @param {Object} map The map to convert.
19998   * @returns {Array} Returns the key-value pairs.
19999   */
20000  function mapToArray(map) {
20001    var index = -1,
20002        result = Array(map.size);
20003
20004    map.forEach(function(value, key) {
20005      result[++index] = [key, value];
20006    });
20007    return result;
20008  }
20009
20010  /**
20011   * Creates a unary function that invokes `func` with its argument transformed.
20012   *
20013   * @private
20014   * @param {Function} func The function to wrap.
20015   * @param {Function} transform The argument transform.
20016   * @returns {Function} Returns the new function.
20017   */
20018  function overArg(func, transform) {
20019    return function(arg) {
20020      return func(transform(arg));
20021    };
20022  }
20023
20024  /**
20025   * Replaces all `placeholder` elements in `array` with an internal placeholder
20026   * and returns an array of their indexes.
20027   *
20028   * @private
20029   * @param {Array} array The array to modify.
20030   * @param {*} placeholder The placeholder to replace.
20031   * @returns {Array} Returns the new array of placeholder indexes.
20032   */
20033  function replaceHolders(array, placeholder) {
20034    var index = -1,
20035        length = array.length,
20036        resIndex = 0,
20037        result = [];
20038
20039    while (++index < length) {
20040      var value = array[index];
20041      if (value === placeholder || value === PLACEHOLDER) {
20042        array[index] = PLACEHOLDER;
20043        result[resIndex++] = index;
20044      }
20045    }
20046    return result;
20047  }
20048
20049  /**
20050   * Converts `set` to an array of its values.
20051   *
20052   * @private
20053   * @param {Object} set The set to convert.
20054   * @returns {Array} Returns the values.
20055   */
20056  function setToArray(set) {
20057    var index = -1,
20058        result = Array(set.size);
20059
20060    set.forEach(function(value) {
20061      result[++index] = value;
20062    });
20063    return result;
20064  }
20065
20066  /**
20067   * Converts `set` to its value-value pairs.
20068   *
20069   * @private
20070   * @param {Object} set The set to convert.
20071   * @returns {Array} Returns the value-value pairs.
20072   */
20073  function setToPairs(set) {
20074    var index = -1,
20075        result = Array(set.size);
20076
20077    set.forEach(function(value) {
20078      result[++index] = [value, value];
20079    });
20080    return result;
20081  }
20082
20083  /**
20084   * A specialized version of `_.indexOf` which performs strict equality
20085   * comparisons of values, i.e. `===`.
20086   *
20087   * @private
20088   * @param {Array} array The array to inspect.
20089   * @param {*} value The value to search for.
20090   * @param {number} fromIndex The index to search from.
20091   * @returns {number} Returns the index of the matched value, else `-1`.
20092   */
20093  function strictIndexOf(array, value, fromIndex) {
20094    var index = fromIndex - 1,
20095        length = array.length;
20096
20097    while (++index < length) {
20098      if (array[index] === value) {
20099        return index;
20100      }
20101    }
20102    return -1;
20103  }
20104
20105  /**
20106   * A specialized version of `_.lastIndexOf` which performs strict equality
20107   * comparisons of values, i.e. `===`.
20108   *
20109   * @private
20110   * @param {Array} array The array to inspect.
20111   * @param {*} value The value to search for.
20112   * @param {number} fromIndex The index to search from.
20113   * @returns {number} Returns the index of the matched value, else `-1`.
20114   */
20115  function strictLastIndexOf(array, value, fromIndex) {
20116    var index = fromIndex + 1;
20117    while (index--) {
20118      if (array[index] === value) {
20119        return index;
20120      }
20121    }
20122    return index;
20123  }
20124
20125  /**
20126   * Gets the number of symbols in `string`.
20127   *
20128   * @private
20129   * @param {string} string The string to inspect.
20130   * @returns {number} Returns the string size.
20131   */
20132  function stringSize(string) {
20133    return hasUnicode(string)
20134      ? unicodeSize(string)
20135      : asciiSize(string);
20136  }
20137
20138  /**
20139   * Converts `string` to an array.
20140   *
20141   * @private
20142   * @param {string} string The string to convert.
20143   * @returns {Array} Returns the converted array.
20144   */
20145  function stringToArray(string) {
20146    return hasUnicode(string)
20147      ? unicodeToArray(string)
20148      : asciiToArray(string);
20149  }
20150
20151  /**
20152   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
20153   * character of `string`.
20154   *
20155   * @private
20156   * @param {string} string The string to inspect.
20157   * @returns {number} Returns the index of the last non-whitespace character.
20158   */
20159  function trimmedEndIndex(string) {
20160    var index = string.length;
20161
20162    while (index-- && reWhitespace.test(string.charAt(index))) {}
20163    return index;
20164  }
20165
20166  /**
20167   * Used by `_.unescape` to convert HTML entities to characters.
20168   *
20169   * @private
20170   * @param {string} chr The matched character to unescape.
20171   * @returns {string} Returns the unescaped character.
20172   */
20173  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
20174
20175  /**
20176   * Gets the size of a Unicode `string`.
20177   *
20178   * @private
20179   * @param {string} string The string inspect.
20180   * @returns {number} Returns the string size.
20181   */
20182  function unicodeSize(string) {
20183    var result = reUnicode.lastIndex = 0;
20184    while (reUnicode.test(string)) {
20185      ++result;
20186    }
20187    return result;
20188  }
20189
20190  /**
20191   * Converts a Unicode `string` to an array.
20192   *
20193   * @private
20194   * @param {string} string The string to convert.
20195   * @returns {Array} Returns the converted array.
20196   */
20197  function unicodeToArray(string) {
20198    return string.match(reUnicode) || [];
20199  }
20200
20201  /**
20202   * Splits a Unicode `string` into an array of its words.
20203   *
20204   * @private
20205   * @param {string} The string to inspect.
20206   * @returns {Array} Returns the words of `string`.
20207   */
20208  function unicodeWords(string) {
20209    return string.match(reUnicodeWord) || [];
20210  }
20211
20212  /*--------------------------------------------------------------------------*/
20213
20214  /**
20215   * Create a new pristine `lodash` function using the `context` object.
20216   *
20217   * @static
20218   * @memberOf _
20219   * @since 1.1.0
20220   * @category Util
20221   * @param {Object} [context=root] The context object.
20222   * @returns {Function} Returns a new `lodash` function.
20223   * @example
20224   *
20225   * _.mixin({ 'foo': _.constant('foo') });
20226   *
20227   * var lodash = _.runInContext();
20228   * lodash.mixin({ 'bar': lodash.constant('bar') });
20229   *
20230   * _.isFunction(_.foo);
20231   * // => true
20232   * _.isFunction(_.bar);
20233   * // => false
20234   *
20235   * lodash.isFunction(lodash.foo);
20236   * // => false
20237   * lodash.isFunction(lodash.bar);
20238   * // => true
20239   *
20240   * // Create a suped-up `defer` in Node.js.
20241   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
20242   */
20243  var runInContext = (function runInContext(context) {
20244    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));
20245
20246    /** Built-in constructor references. */
20247    var Array = context.Array,
20248        Date = context.Date,
20249        Error = context.Error,
20250        Function = context.Function,
20251        Math = context.Math,
20252        Object = context.Object,
20253        RegExp = context.RegExp,
20254        String = context.String,
20255        TypeError = context.TypeError;
20256
20257    /** Used for built-in method references. */
20258    var arrayProto = Array.prototype,
20259        funcProto = Function.prototype,
20260        objectProto = Object.prototype;
20261
20262    /** Used to detect overreaching core-js shims. */
20263    var coreJsData = context['__core-js_shared__'];
20264
20265    /** Used to resolve the decompiled source of functions. */
20266    var funcToString = funcProto.toString;
20267
20268    /** Used to check objects for own properties. */
20269    var hasOwnProperty = objectProto.hasOwnProperty;
20270
20271    /** Used to generate unique IDs. */
20272    var idCounter = 0;
20273
20274    /** Used to detect methods masquerading as native. */
20275    var maskSrcKey = (function() {
20276      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
20277      return uid ? ('Symbol(src)_1.' + uid) : '';
20278    }());
20279
20280    /**
20281     * Used to resolve the
20282     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
20283     * of values.
20284     */
20285    var nativeObjectToString = objectProto.toString;
20286
20287    /** Used to infer the `Object` constructor. */
20288    var objectCtorString = funcToString.call(Object);
20289
20290    /** Used to restore the original `_` reference in `_.noConflict`. */
20291    var oldDash = root._;
20292
20293    /** Used to detect if a method is native. */
20294    var reIsNative = RegExp('^' +
20295      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
20296      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
20297    );
20298
20299    /** Built-in value references. */
20300    var Buffer = moduleExports ? context.Buffer : undefined,
20301        Symbol = context.Symbol,
20302        Uint8Array = context.Uint8Array,
20303        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
20304        getPrototype = overArg(Object.getPrototypeOf, Object),
20305        objectCreate = Object.create,
20306        propertyIsEnumerable = objectProto.propertyIsEnumerable,
20307        splice = arrayProto.splice,
20308        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
20309        symIterator = Symbol ? Symbol.iterator : undefined,
20310        symToStringTag = Symbol ? Symbol.toStringTag : undefined;
20311
20312    var defineProperty = (function() {
20313      try {
20314        var func = getNative(Object, 'defineProperty');
20315        func({}, '', {});
20316        return func;
20317      } catch (e) {}
20318    }());
20319
20320    /** Mocked built-ins. */
20321    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
20322        ctxNow = Date && Date.now !== root.Date.now && Date.now,
20323        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
20324
20325    /* Built-in method references for those with the same name as other `lodash` methods. */
20326    var nativeCeil = Math.ceil,
20327        nativeFloor = Math.floor,
20328        nativeGetSymbols = Object.getOwnPropertySymbols,
20329        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
20330        nativeIsFinite = context.isFinite,
20331        nativeJoin = arrayProto.join,
20332        nativeKeys = overArg(Object.keys, Object),
20333        nativeMax = Math.max,
20334        nativeMin = Math.min,
20335        nativeNow = Date.now,
20336        nativeParseInt = context.parseInt,
20337        nativeRandom = Math.random,
20338        nativeReverse = arrayProto.reverse;
20339
20340    /* Built-in method references that are verified to be native. */
20341    var DataView = getNative(context, 'DataView'),
20342        Map = getNative(context, 'Map'),
20343        Promise = getNative(context, 'Promise'),
20344        Set = getNative(context, 'Set'),
20345        WeakMap = getNative(context, 'WeakMap'),
20346        nativeCreate = getNative(Object, 'create');
20347
20348    /** Used to store function metadata. */
20349    var metaMap = WeakMap && new WeakMap;
20350
20351    /** Used to lookup unminified function names. */
20352    var realNames = {};
20353
20354    /** Used to detect maps, sets, and weakmaps. */
20355    var dataViewCtorString = toSource(DataView),
20356        mapCtorString = toSource(Map),
20357        promiseCtorString = toSource(Promise),
20358        setCtorString = toSource(Set),
20359        weakMapCtorString = toSource(WeakMap);
20360
20361    /** Used to convert symbols to primitives and strings. */
20362    var symbolProto = Symbol ? Symbol.prototype : undefined,
20363        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
20364        symbolToString = symbolProto ? symbolProto.toString : undefined;
20365
20366    /*------------------------------------------------------------------------*/
20367
20368    /**
20369     * Creates a `lodash` object which wraps `value` to enable implicit method
20370     * chain sequences. Methods that operate on and return arrays, collections,
20371     * and functions can be chained together. Methods that retrieve a single value
20372     * or may return a primitive value will automatically end the chain sequence
20373     * and return the unwrapped value. Otherwise, the value must be unwrapped
20374     * with `_#value`.
20375     *
20376     * Explicit chain sequences, which must be unwrapped with `_#value`, may be
20377     * enabled using `_.chain`.
20378     *
20379     * The execution of chained methods is lazy, that is, it's deferred until
20380     * `_#value` is implicitly or explicitly called.
20381     *
20382     * Lazy evaluation allows several methods to support shortcut fusion.
20383     * Shortcut fusion is an optimization to merge iteratee calls; this avoids
20384     * the creation of intermediate arrays and can greatly reduce the number of
20385     * iteratee executions. Sections of a chain sequence qualify for shortcut
20386     * fusion if the section is applied to an array and iteratees accept only
20387     * one argument. The heuristic for whether a section qualifies for shortcut
20388     * fusion is subject to change.
20389     *
20390     * Chaining is supported in custom builds as long as the `_#value` method is
20391     * directly or indirectly included in the build.
20392     *
20393     * In addition to lodash methods, wrappers have `Array` and `String` methods.
20394     *
20395     * The wrapper `Array` methods are:
20396     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
20397     *
20398     * The wrapper `String` methods are:
20399     * `replace` and `split`
20400     *
20401     * The wrapper methods that support shortcut fusion are:
20402     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
20403     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
20404     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
20405     *
20406     * The chainable wrapper methods are:
20407     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
20408     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
20409     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
20410     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
20411     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
20412     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
20413     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
20414     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
20415     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
20416     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
20417     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
20418     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
20419     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
20420     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
20421     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
20422     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
20423     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
20424     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
20425     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
20426     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
20427     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
20428     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
20429     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
20430     * `zipObject`, `zipObjectDeep`, and `zipWith`
20431     *
20432     * The wrapper methods that are **not** chainable by default are:
20433     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
20434     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
20435     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
20436     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
20437     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
20438     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
20439     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
20440     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
20441     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
20442     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
20443     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
20444     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
20445     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
20446     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
20447     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
20448     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
20449     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
20450     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
20451     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
20452     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
20453     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
20454     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
20455     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
20456     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
20457     * `upperFirst`, `value`, and `words`
20458     *
20459     * @name _
20460     * @constructor
20461     * @category Seq
20462     * @param {*} value The value to wrap in a `lodash` instance.
20463     * @returns {Object} Returns the new `lodash` wrapper instance.
20464     * @example
20465     *
20466     * function square(n) {
20467     *   return n * n;
20468     * }
20469     *
20470     * var wrapped = _([1, 2, 3]);
20471     *
20472     * // Returns an unwrapped value.
20473     * wrapped.reduce(_.add);
20474     * // => 6
20475     *
20476     * // Returns a wrapped value.
20477     * var squares = wrapped.map(square);
20478     *
20479     * _.isArray(squares);
20480     * // => false
20481     *
20482     * _.isArray(squares.value());
20483     * // => true
20484     */
20485    function lodash(value) {
20486      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
20487        if (value instanceof LodashWrapper) {
20488          return value;
20489        }
20490        if (hasOwnProperty.call(value, '__wrapped__')) {
20491          return wrapperClone(value);
20492        }
20493      }
20494      return new LodashWrapper(value);
20495    }
20496
20497    /**
20498     * The base implementation of `_.create` without support for assigning
20499     * properties to the created object.
20500     *
20501     * @private
20502     * @param {Object} proto The object to inherit from.
20503     * @returns {Object} Returns the new object.
20504     */
20505    var baseCreate = (function() {
20506      function object() {}
20507      return function(proto) {
20508        if (!isObject(proto)) {
20509          return {};
20510        }
20511        if (objectCreate) {
20512          return objectCreate(proto);
20513        }
20514        object.prototype = proto;
20515        var result = new object;
20516        object.prototype = undefined;
20517        return result;
20518      };
20519    }());
20520
20521    /**
20522     * The function whose prototype chain sequence wrappers inherit from.
20523     *
20524     * @private
20525     */
20526    function baseLodash() {
20527      // No operation performed.
20528    }
20529
20530    /**
20531     * The base constructor for creating `lodash` wrapper objects.
20532     *
20533     * @private
20534     * @param {*} value The value to wrap.
20535     * @param {boolean} [chainAll] Enable explicit method chain sequences.
20536     */
20537    function LodashWrapper(value, chainAll) {
20538      this.__wrapped__ = value;
20539      this.__actions__ = [];
20540      this.__chain__ = !!chainAll;
20541      this.__index__ = 0;
20542      this.__values__ = undefined;
20543    }
20544
20545    /**
20546     * By default, the template delimiters used by lodash are like those in
20547     * embedded Ruby (ERB) as well as ES2015 template strings. Change the
20548     * following template settings to use alternative delimiters.
20549     *
20550     * @static
20551     * @memberOf _
20552     * @type {Object}
20553     */
20554    lodash.templateSettings = {
20555
20556      /**
20557       * Used to detect `data` property values to be HTML-escaped.
20558       *
20559       * @memberOf _.templateSettings
20560       * @type {RegExp}
20561       */
20562      'escape': reEscape,
20563
20564      /**
20565       * Used to detect code to be evaluated.
20566       *
20567       * @memberOf _.templateSettings
20568       * @type {RegExp}
20569       */
20570      'evaluate': reEvaluate,
20571
20572      /**
20573       * Used to detect `data` property values to inject.
20574       *
20575       * @memberOf _.templateSettings
20576       * @type {RegExp}
20577       */
20578      'interpolate': reInterpolate,
20579
20580      /**
20581       * Used to reference the data object in the template text.
20582       *
20583       * @memberOf _.templateSettings
20584       * @type {string}
20585       */
20586      'variable': '',
20587
20588      /**
20589       * Used to import variables into the compiled template.
20590       *
20591       * @memberOf _.templateSettings
20592       * @type {Object}
20593       */
20594      'imports': {
20595
20596        /**
20597         * A reference to the `lodash` function.
20598         *
20599         * @memberOf _.templateSettings.imports
20600         * @type {Function}
20601         */
20602        '_': lodash
20603      }
20604    };
20605
20606    // Ensure wrappers are instances of `baseLodash`.
20607    lodash.prototype = baseLodash.prototype;
20608    lodash.prototype.constructor = lodash;
20609
20610    LodashWrapper.prototype = baseCreate(baseLodash.prototype);
20611    LodashWrapper.prototype.constructor = LodashWrapper;
20612
20613    /*------------------------------------------------------------------------*/
20614
20615    /**
20616     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
20617     *
20618     * @private
20619     * @constructor
20620     * @param {*} value The value to wrap.
20621     */
20622    function LazyWrapper(value) {
20623      this.__wrapped__ = value;
20624      this.__actions__ = [];
20625      this.__dir__ = 1;
20626      this.__filtered__ = false;
20627      this.__iteratees__ = [];
20628      this.__takeCount__ = MAX_ARRAY_LENGTH;
20629      this.__views__ = [];
20630    }
20631
20632    /**
20633     * Creates a clone of the lazy wrapper object.
20634     *
20635     * @private
20636     * @name clone
20637     * @memberOf LazyWrapper
20638     * @returns {Object} Returns the cloned `LazyWrapper` object.
20639     */
20640    function lazyClone() {
20641      var result = new LazyWrapper(this.__wrapped__);
20642      result.__actions__ = copyArray(this.__actions__);
20643      result.__dir__ = this.__dir__;
20644      result.__filtered__ = this.__filtered__;
20645      result.__iteratees__ = copyArray(this.__iteratees__);
20646      result.__takeCount__ = this.__takeCount__;
20647      result.__views__ = copyArray(this.__views__);
20648      return result;
20649    }
20650
20651    /**
20652     * Reverses the direction of lazy iteration.
20653     *
20654     * @private
20655     * @name reverse
20656     * @memberOf LazyWrapper
20657     * @returns {Object} Returns the new reversed `LazyWrapper` object.
20658     */
20659    function lazyReverse() {
20660      if (this.__filtered__) {
20661        var result = new LazyWrapper(this);
20662        result.__dir__ = -1;
20663        result.__filtered__ = true;
20664      } else {
20665        result = this.clone();
20666        result.__dir__ *= -1;
20667      }
20668      return result;
20669    }
20670
20671    /**
20672     * Extracts the unwrapped value from its lazy wrapper.
20673     *
20674     * @private
20675     * @name value
20676     * @memberOf LazyWrapper
20677     * @returns {*} Returns the unwrapped value.
20678     */
20679    function lazyValue() {
20680      var array = this.__wrapped__.value(),
20681          dir = this.__dir__,
20682          isArr = isArray(array),
20683          isRight = dir < 0,
20684          arrLength = isArr ? array.length : 0,
20685          view = getView(0, arrLength, this.__views__),
20686          start = view.start,
20687          end = view.end,
20688          length = end - start,
20689          index = isRight ? end : (start - 1),
20690          iteratees = this.__iteratees__,
20691          iterLength = iteratees.length,
20692          resIndex = 0,
20693          takeCount = nativeMin(length, this.__takeCount__);
20694
20695      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
20696        return baseWrapperValue(array, this.__actions__);
20697      }
20698      var result = [];
20699
20700      outer:
20701      while (length-- && resIndex < takeCount) {
20702        index += dir;
20703
20704        var iterIndex = -1,
20705            value = array[index];
20706
20707        while (++iterIndex < iterLength) {
20708          var data = iteratees[iterIndex],
20709              iteratee = data.iteratee,
20710              type = data.type,
20711              computed = iteratee(value);
20712
20713          if (type == LAZY_MAP_FLAG) {
20714            value = computed;
20715          } else if (!computed) {
20716            if (type == LAZY_FILTER_FLAG) {
20717              continue outer;
20718            } else {
20719              break outer;
20720            }
20721          }
20722        }
20723        result[resIndex++] = value;
20724      }
20725      return result;
20726    }
20727
20728    // Ensure `LazyWrapper` is an instance of `baseLodash`.
20729    LazyWrapper.prototype = baseCreate(baseLodash.prototype);
20730    LazyWrapper.prototype.constructor = LazyWrapper;
20731
20732    /*------------------------------------------------------------------------*/
20733
20734    /**
20735     * Creates a hash object.
20736     *
20737     * @private
20738     * @constructor
20739     * @param {Array} [entries] The key-value pairs to cache.
20740     */
20741    function Hash(entries) {
20742      var index = -1,
20743          length = entries == null ? 0 : entries.length;
20744
20745      this.clear();
20746      while (++index < length) {
20747        var entry = entries[index];
20748        this.set(entry[0], entry[1]);
20749      }
20750    }
20751
20752    /**
20753     * Removes all key-value entries from the hash.
20754     *
20755     * @private
20756     * @name clear
20757     * @memberOf Hash
20758     */
20759    function hashClear() {
20760      this.__data__ = nativeCreate ? nativeCreate(null) : {};
20761      this.size = 0;
20762    }
20763
20764    /**
20765     * Removes `key` and its value from the hash.
20766     *
20767     * @private
20768     * @name delete
20769     * @memberOf Hash
20770     * @param {Object} hash The hash to modify.
20771     * @param {string} key The key of the value to remove.
20772     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
20773     */
20774    function hashDelete(key) {
20775      var result = this.has(key) && delete this.__data__[key];
20776      this.size -= result ? 1 : 0;
20777      return result;
20778    }
20779
20780    /**
20781     * Gets the hash value for `key`.
20782     *
20783     * @private
20784     * @name get
20785     * @memberOf Hash
20786     * @param {string} key The key of the value to get.
20787     * @returns {*} Returns the entry value.
20788     */
20789    function hashGet(key) {
20790      var data = this.__data__;
20791      if (nativeCreate) {
20792        var result = data[key];
20793        return result === HASH_UNDEFINED ? undefined : result;
20794      }
20795      return hasOwnProperty.call(data, key) ? data[key] : undefined;
20796    }
20797
20798    /**
20799     * Checks if a hash value for `key` exists.
20800     *
20801     * @private
20802     * @name has
20803     * @memberOf Hash
20804     * @param {string} key The key of the entry to check.
20805     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
20806     */
20807    function hashHas(key) {
20808      var data = this.__data__;
20809      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
20810    }
20811
20812    /**
20813     * Sets the hash `key` to `value`.
20814     *
20815     * @private
20816     * @name set
20817     * @memberOf Hash
20818     * @param {string} key The key of the value to set.
20819     * @param {*} value The value to set.
20820     * @returns {Object} Returns the hash instance.
20821     */
20822    function hashSet(key, value) {
20823      var data = this.__data__;
20824      this.size += this.has(key) ? 0 : 1;
20825      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
20826      return this;
20827    }
20828
20829    // Add methods to `Hash`.
20830    Hash.prototype.clear = hashClear;
20831    Hash.prototype['delete'] = hashDelete;
20832    Hash.prototype.get = hashGet;
20833    Hash.prototype.has = hashHas;
20834    Hash.prototype.set = hashSet;
20835
20836    /*------------------------------------------------------------------------*/
20837
20838    /**
20839     * Creates an list cache object.
20840     *
20841     * @private
20842     * @constructor
20843     * @param {Array} [entries] The key-value pairs to cache.
20844     */
20845    function ListCache(entries) {
20846      var index = -1,
20847          length = entries == null ? 0 : entries.length;
20848
20849      this.clear();
20850      while (++index < length) {
20851        var entry = entries[index];
20852        this.set(entry[0], entry[1]);
20853      }
20854    }
20855
20856    /**
20857     * Removes all key-value entries from the list cache.
20858     *
20859     * @private
20860     * @name clear
20861     * @memberOf ListCache
20862     */
20863    function listCacheClear() {
20864      this.__data__ = [];
20865      this.size = 0;
20866    }
20867
20868    /**
20869     * Removes `key` and its value from the list cache.
20870     *
20871     * @private
20872     * @name delete
20873     * @memberOf ListCache
20874     * @param {string} key The key of the value to remove.
20875     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
20876     */
20877    function listCacheDelete(key) {
20878      var data = this.__data__,
20879          index = assocIndexOf(data, key);
20880
20881      if (index < 0) {
20882        return false;
20883      }
20884      var lastIndex = data.length - 1;
20885      if (index == lastIndex) {
20886        data.pop();
20887      } else {
20888        splice.call(data, index, 1);
20889      }
20890      --this.size;
20891      return true;
20892    }
20893
20894    /**
20895     * Gets the list cache value for `key`.
20896     *
20897     * @private
20898     * @name get
20899     * @memberOf ListCache
20900     * @param {string} key The key of the value to get.
20901     * @returns {*} Returns the entry value.
20902     */
20903    function listCacheGet(key) {
20904      var data = this.__data__,
20905          index = assocIndexOf(data, key);
20906
20907      return index < 0 ? undefined : data[index][1];
20908    }
20909
20910    /**
20911     * Checks if a list cache value for `key` exists.
20912     *
20913     * @private
20914     * @name has
20915     * @memberOf ListCache
20916     * @param {string} key The key of the entry to check.
20917     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
20918     */
20919    function listCacheHas(key) {
20920      return assocIndexOf(this.__data__, key) > -1;
20921    }
20922
20923    /**
20924     * Sets the list cache `key` to `value`.
20925     *
20926     * @private
20927     * @name set
20928     * @memberOf ListCache
20929     * @param {string} key The key of the value to set.
20930     * @param {*} value The value to set.
20931     * @returns {Object} Returns the list cache instance.
20932     */
20933    function listCacheSet(key, value) {
20934      var data = this.__data__,
20935          index = assocIndexOf(data, key);
20936
20937      if (index < 0) {
20938        ++this.size;
20939        data.push([key, value]);
20940      } else {
20941        data[index][1] = value;
20942      }
20943      return this;
20944    }
20945
20946    // Add methods to `ListCache`.
20947    ListCache.prototype.clear = listCacheClear;
20948    ListCache.prototype['delete'] = listCacheDelete;
20949    ListCache.prototype.get = listCacheGet;
20950    ListCache.prototype.has = listCacheHas;
20951    ListCache.prototype.set = listCacheSet;
20952
20953    /*------------------------------------------------------------------------*/
20954
20955    /**
20956     * Creates a map cache object to store key-value pairs.
20957     *
20958     * @private
20959     * @constructor
20960     * @param {Array} [entries] The key-value pairs to cache.
20961     */
20962    function MapCache(entries) {
20963      var index = -1,
20964          length = entries == null ? 0 : entries.length;
20965
20966      this.clear();
20967      while (++index < length) {
20968        var entry = entries[index];
20969        this.set(entry[0], entry[1]);
20970      }
20971    }
20972
20973    /**
20974     * Removes all key-value entries from the map.
20975     *
20976     * @private
20977     * @name clear
20978     * @memberOf MapCache
20979     */
20980    function mapCacheClear() {
20981      this.size = 0;
20982      this.__data__ = {
20983        'hash': new Hash,
20984        'map': new (Map || ListCache),
20985        'string': new Hash
20986      };
20987    }
20988
20989    /**
20990     * Removes `key` and its value from the map.
20991     *
20992     * @private
20993     * @name delete
20994     * @memberOf MapCache
20995     * @param {string} key The key of the value to remove.
20996     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
20997     */
20998    function mapCacheDelete(key) {
20999      var result = getMapData(this, key)['delete'](key);
21000      this.size -= result ? 1 : 0;
21001      return result;
21002    }
21003
21004    /**
21005     * Gets the map value for `key`.
21006     *
21007     * @private
21008     * @name get
21009     * @memberOf MapCache
21010     * @param {string} key The key of the value to get.
21011     * @returns {*} Returns the entry value.
21012     */
21013    function mapCacheGet(key) {
21014      return getMapData(this, key).get(key);
21015    }
21016
21017    /**
21018     * Checks if a map value for `key` exists.
21019     *
21020     * @private
21021     * @name has
21022     * @memberOf MapCache
21023     * @param {string} key The key of the entry to check.
21024     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
21025     */
21026    function mapCacheHas(key) {
21027      return getMapData(this, key).has(key);
21028    }
21029
21030    /**
21031     * Sets the map `key` to `value`.
21032     *
21033     * @private
21034     * @name set
21035     * @memberOf MapCache
21036     * @param {string} key The key of the value to set.
21037     * @param {*} value The value to set.
21038     * @returns {Object} Returns the map cache instance.
21039     */
21040    function mapCacheSet(key, value) {
21041      var data = getMapData(this, key),
21042          size = data.size;
21043
21044      data.set(key, value);
21045      this.size += data.size == size ? 0 : 1;
21046      return this;
21047    }
21048
21049    // Add methods to `MapCache`.
21050    MapCache.prototype.clear = mapCacheClear;
21051    MapCache.prototype['delete'] = mapCacheDelete;
21052    MapCache.prototype.get = mapCacheGet;
21053    MapCache.prototype.has = mapCacheHas;
21054    MapCache.prototype.set = mapCacheSet;
21055
21056    /*------------------------------------------------------------------------*/
21057
21058    /**
21059     *
21060     * Creates an array cache object to store unique values.
21061     *
21062     * @private
21063     * @constructor
21064     * @param {Array} [values] The values to cache.
21065     */
21066    function SetCache(values) {
21067      var index = -1,
21068          length = values == null ? 0 : values.length;
21069
21070      this.__data__ = new MapCache;
21071      while (++index < length) {
21072        this.add(values[index]);
21073      }
21074    }
21075
21076    /**
21077     * Adds `value` to the array cache.
21078     *
21079     * @private
21080     * @name add
21081     * @memberOf SetCache
21082     * @alias push
21083     * @param {*} value The value to cache.
21084     * @returns {Object} Returns the cache instance.
21085     */
21086    function setCacheAdd(value) {
21087      this.__data__.set(value, HASH_UNDEFINED);
21088      return this;
21089    }
21090
21091    /**
21092     * Checks if `value` is in the array cache.
21093     *
21094     * @private
21095     * @name has
21096     * @memberOf SetCache
21097     * @param {*} value The value to search for.
21098     * @returns {number} Returns `true` if `value` is found, else `false`.
21099     */
21100    function setCacheHas(value) {
21101      return this.__data__.has(value);
21102    }
21103
21104    // Add methods to `SetCache`.
21105    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
21106    SetCache.prototype.has = setCacheHas;
21107
21108    /*------------------------------------------------------------------------*/
21109
21110    /**
21111     * Creates a stack cache object to store key-value pairs.
21112     *
21113     * @private
21114     * @constructor
21115     * @param {Array} [entries] The key-value pairs to cache.
21116     */
21117    function Stack(entries) {
21118      var data = this.__data__ = new ListCache(entries);
21119      this.size = data.size;
21120    }
21121
21122    /**
21123     * Removes all key-value entries from the stack.
21124     *
21125     * @private
21126     * @name clear
21127     * @memberOf Stack
21128     */
21129    function stackClear() {
21130      this.__data__ = new ListCache;
21131      this.size = 0;
21132    }
21133
21134    /**
21135     * Removes `key` and its value from the stack.
21136     *
21137     * @private
21138     * @name delete
21139     * @memberOf Stack
21140     * @param {string} key The key of the value to remove.
21141     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
21142     */
21143    function stackDelete(key) {
21144      var data = this.__data__,
21145          result = data['delete'](key);
21146
21147      this.size = data.size;
21148      return result;
21149    }
21150
21151    /**
21152     * Gets the stack value for `key`.
21153     *
21154     * @private
21155     * @name get
21156     * @memberOf Stack
21157     * @param {string} key The key of the value to get.
21158     * @returns {*} Returns the entry value.
21159     */
21160    function stackGet(key) {
21161      return this.__data__.get(key);
21162    }
21163
21164    /**
21165     * Checks if a stack value for `key` exists.
21166     *
21167     * @private
21168     * @name has
21169     * @memberOf Stack
21170     * @param {string} key The key of the entry to check.
21171     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
21172     */
21173    function stackHas(key) {
21174      return this.__data__.has(key);
21175    }
21176
21177    /**
21178     * Sets the stack `key` to `value`.
21179     *
21180     * @private
21181     * @name set
21182     * @memberOf Stack
21183     * @param {string} key The key of the value to set.
21184     * @param {*} value The value to set.
21185     * @returns {Object} Returns the stack cache instance.
21186     */
21187    function stackSet(key, value) {
21188      var data = this.__data__;
21189      if (data instanceof ListCache) {
21190        var pairs = data.__data__;
21191        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
21192          pairs.push([key, value]);
21193          this.size = ++data.size;
21194          return this;
21195        }
21196        data = this.__data__ = new MapCache(pairs);
21197      }
21198      data.set(key, value);
21199      this.size = data.size;
21200      return this;
21201    }
21202
21203    // Add methods to `Stack`.
21204    Stack.prototype.clear = stackClear;
21205    Stack.prototype['delete'] = stackDelete;
21206    Stack.prototype.get = stackGet;
21207    Stack.prototype.has = stackHas;
21208    Stack.prototype.set = stackSet;
21209
21210    /*------------------------------------------------------------------------*/
21211
21212    /**
21213     * Creates an array of the enumerable property names of the array-like `value`.
21214     *
21215     * @private
21216     * @param {*} value The value to query.
21217     * @param {boolean} inherited Specify returning inherited property names.
21218     * @returns {Array} Returns the array of property names.
21219     */
21220    function arrayLikeKeys(value, inherited) {
21221      var isArr = isArray(value),
21222          isArg = !isArr && isArguments(value),
21223          isBuff = !isArr && !isArg && isBuffer(value),
21224          isType = !isArr && !isArg && !isBuff && isTypedArray(value),
21225          skipIndexes = isArr || isArg || isBuff || isType,
21226          result = skipIndexes ? baseTimes(value.length, String) : [],
21227          length = result.length;
21228
21229      for (var key in value) {
21230        if ((inherited || hasOwnProperty.call(value, key)) &&
21231            !(skipIndexes && (
21232               // Safari 9 has enumerable `arguments.length` in strict mode.
21233               key == 'length' ||
21234               // Node.js 0.10 has enumerable non-index properties on buffers.
21235               (isBuff && (key == 'offset' || key == 'parent')) ||
21236               // PhantomJS 2 has enumerable non-index properties on typed arrays.
21237               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
21238               // Skip index properties.
21239               isIndex(key, length)
21240            ))) {
21241          result.push(key);
21242        }
21243      }
21244      return result;
21245    }
21246
21247    /**
21248     * A specialized version of `_.sample` for arrays.
21249     *
21250     * @private
21251     * @param {Array} array The array to sample.
21252     * @returns {*} Returns the random element.
21253     */
21254    function arraySample(array) {
21255      var length = array.length;
21256      return length ? array[baseRandom(0, length - 1)] : undefined;
21257    }
21258
21259    /**
21260     * A specialized version of `_.sampleSize` for arrays.
21261     *
21262     * @private
21263     * @param {Array} array The array to sample.
21264     * @param {number} n The number of elements to sample.
21265     * @returns {Array} Returns the random elements.
21266     */
21267    function arraySampleSize(array, n) {
21268      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
21269    }
21270
21271    /**
21272     * A specialized version of `_.shuffle` for arrays.
21273     *
21274     * @private
21275     * @param {Array} array The array to shuffle.
21276     * @returns {Array} Returns the new shuffled array.
21277     */
21278    function arrayShuffle(array) {
21279      return shuffleSelf(copyArray(array));
21280    }
21281
21282    /**
21283     * This function is like `assignValue` except that it doesn't assign
21284     * `undefined` values.
21285     *
21286     * @private
21287     * @param {Object} object The object to modify.
21288     * @param {string} key The key of the property to assign.
21289     * @param {*} value The value to assign.
21290     */
21291    function assignMergeValue(object, key, value) {
21292      if ((value !== undefined && !eq(object[key], value)) ||
21293          (value === undefined && !(key in object))) {
21294        baseAssignValue(object, key, value);
21295      }
21296    }
21297
21298    /**
21299     * Assigns `value` to `key` of `object` if the existing value is not equivalent
21300     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
21301     * for equality comparisons.
21302     *
21303     * @private
21304     * @param {Object} object The object to modify.
21305     * @param {string} key The key of the property to assign.
21306     * @param {*} value The value to assign.
21307     */
21308    function assignValue(object, key, value) {
21309      var objValue = object[key];
21310      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
21311          (value === undefined && !(key in object))) {
21312        baseAssignValue(object, key, value);
21313      }
21314    }
21315
21316    /**
21317     * Gets the index at which the `key` is found in `array` of key-value pairs.
21318     *
21319     * @private
21320     * @param {Array} array The array to inspect.
21321     * @param {*} key The key to search for.
21322     * @returns {number} Returns the index of the matched value, else `-1`.
21323     */
21324    function assocIndexOf(array, key) {
21325      var length = array.length;
21326      while (length--) {
21327        if (eq(array[length][0], key)) {
21328          return length;
21329        }
21330      }
21331      return -1;
21332    }
21333
21334    /**
21335     * Aggregates elements of `collection` on `accumulator` with keys transformed
21336     * by `iteratee` and values set by `setter`.
21337     *
21338     * @private
21339     * @param {Array|Object} collection The collection to iterate over.
21340     * @param {Function} setter The function to set `accumulator` values.
21341     * @param {Function} iteratee The iteratee to transform keys.
21342     * @param {Object} accumulator The initial aggregated object.
21343     * @returns {Function} Returns `accumulator`.
21344     */
21345    function baseAggregator(collection, setter, iteratee, accumulator) {
21346      baseEach(collection, function(value, key, collection) {
21347        setter(accumulator, value, iteratee(value), collection);
21348      });
21349      return accumulator;
21350    }
21351
21352    /**
21353     * The base implementation of `_.assign` without support for multiple sources
21354     * or `customizer` functions.
21355     *
21356     * @private
21357     * @param {Object} object The destination object.
21358     * @param {Object} source The source object.
21359     * @returns {Object} Returns `object`.
21360     */
21361    function baseAssign(object, source) {
21362      return object && copyObject(source, keys(source), object);
21363    }
21364
21365    /**
21366     * The base implementation of `_.assignIn` without support for multiple sources
21367     * or `customizer` functions.
21368     *
21369     * @private
21370     * @param {Object} object The destination object.
21371     * @param {Object} source The source object.
21372     * @returns {Object} Returns `object`.
21373     */
21374    function baseAssignIn(object, source) {
21375      return object && copyObject(source, keysIn(source), object);
21376    }
21377
21378    /**
21379     * The base implementation of `assignValue` and `assignMergeValue` without
21380     * value checks.
21381     *
21382     * @private
21383     * @param {Object} object The object to modify.
21384     * @param {string} key The key of the property to assign.
21385     * @param {*} value The value to assign.
21386     */
21387    function baseAssignValue(object, key, value) {
21388      if (key == '__proto__' && defineProperty) {
21389        defineProperty(object, key, {
21390          'configurable': true,
21391          'enumerable': true,
21392          'value': value,
21393          'writable': true
21394        });
21395      } else {
21396        object[key] = value;
21397      }
21398    }
21399
21400    /**
21401     * The base implementation of `_.at` without support for individual paths.
21402     *
21403     * @private
21404     * @param {Object} object The object to iterate over.
21405     * @param {string[]} paths The property paths to pick.
21406     * @returns {Array} Returns the picked elements.
21407     */
21408    function baseAt(object, paths) {
21409      var index = -1,
21410          length = paths.length,
21411          result = Array(length),
21412          skip = object == null;
21413
21414      while (++index < length) {
21415        result[index] = skip ? undefined : get(object, paths[index]);
21416      }
21417      return result;
21418    }
21419
21420    /**
21421     * The base implementation of `_.clamp` which doesn't coerce arguments.
21422     *
21423     * @private
21424     * @param {number} number The number to clamp.
21425     * @param {number} [lower] The lower bound.
21426     * @param {number} upper The upper bound.
21427     * @returns {number} Returns the clamped number.
21428     */
21429    function baseClamp(number, lower, upper) {
21430      if (number === number) {
21431        if (upper !== undefined) {
21432          number = number <= upper ? number : upper;
21433        }
21434        if (lower !== undefined) {
21435          number = number >= lower ? number : lower;
21436        }
21437      }
21438      return number;
21439    }
21440
21441    /**
21442     * The base implementation of `_.clone` and `_.cloneDeep` which tracks
21443     * traversed objects.
21444     *
21445     * @private
21446     * @param {*} value The value to clone.
21447     * @param {boolean} bitmask The bitmask flags.
21448     *  1 - Deep clone
21449     *  2 - Flatten inherited properties
21450     *  4 - Clone symbols
21451     * @param {Function} [customizer] The function to customize cloning.
21452     * @param {string} [key] The key of `value`.
21453     * @param {Object} [object] The parent object of `value`.
21454     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
21455     * @returns {*} Returns the cloned value.
21456     */
21457    function baseClone(value, bitmask, customizer, key, object, stack) {
21458      var result,
21459          isDeep = bitmask & CLONE_DEEP_FLAG,
21460          isFlat = bitmask & CLONE_FLAT_FLAG,
21461          isFull = bitmask & CLONE_SYMBOLS_FLAG;
21462
21463      if (customizer) {
21464        result = object ? customizer(value, key, object, stack) : customizer(value);
21465      }
21466      if (result !== undefined) {
21467        return result;
21468      }
21469      if (!isObject(value)) {
21470        return value;
21471      }
21472      var isArr = isArray(value);
21473      if (isArr) {
21474        result = initCloneArray(value);
21475        if (!isDeep) {
21476          return copyArray(value, result);
21477        }
21478      } else {
21479        var tag = getTag(value),
21480            isFunc = tag == funcTag || tag == genTag;
21481
21482        if (isBuffer(value)) {
21483          return cloneBuffer(value, isDeep);
21484        }
21485        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
21486          result = (isFlat || isFunc) ? {} : initCloneObject(value);
21487          if (!isDeep) {
21488            return isFlat
21489              ? copySymbolsIn(value, baseAssignIn(result, value))
21490              : copySymbols(value, baseAssign(result, value));
21491          }
21492        } else {
21493          if (!cloneableTags[tag]) {
21494            return object ? value : {};
21495          }
21496          result = initCloneByTag(value, tag, isDeep);
21497        }
21498      }
21499      // Check for circular references and return its corresponding clone.
21500      stack || (stack = new Stack);
21501      var stacked = stack.get(value);
21502      if (stacked) {
21503        return stacked;
21504      }
21505      stack.set(value, result);
21506
21507      if (isSet(value)) {
21508        value.forEach(function(subValue) {
21509          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
21510        });
21511      } else if (isMap(value)) {
21512        value.forEach(function(subValue, key) {
21513          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
21514        });
21515      }
21516
21517      var keysFunc = isFull
21518        ? (isFlat ? getAllKeysIn : getAllKeys)
21519        : (isFlat ? keysIn : keys);
21520
21521      var props = isArr ? undefined : keysFunc(value);
21522      arrayEach(props || value, function(subValue, key) {
21523        if (props) {
21524          key = subValue;
21525          subValue = value[key];
21526        }
21527        // Recursively populate clone (susceptible to call stack limits).
21528        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
21529      });
21530      return result;
21531    }
21532
21533    /**
21534     * The base implementation of `_.conforms` which doesn't clone `source`.
21535     *
21536     * @private
21537     * @param {Object} source The object of property predicates to conform to.
21538     * @returns {Function} Returns the new spec function.
21539     */
21540    function baseConforms(source) {
21541      var props = keys(source);
21542      return function(object) {
21543        return baseConformsTo(object, source, props);
21544      };
21545    }
21546
21547    /**
21548     * The base implementation of `_.conformsTo` which accepts `props` to check.
21549     *
21550     * @private
21551     * @param {Object} object The object to inspect.
21552     * @param {Object} source The object of property predicates to conform to.
21553     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
21554     */
21555    function baseConformsTo(object, source, props) {
21556      var length = props.length;
21557      if (object == null) {
21558        return !length;
21559      }
21560      object = Object(object);
21561      while (length--) {
21562        var key = props[length],
21563            predicate = source[key],
21564            value = object[key];
21565
21566        if ((value === undefined && !(key in object)) || !predicate(value)) {
21567          return false;
21568        }
21569      }
21570      return true;
21571    }
21572
21573    /**
21574     * The base implementation of `_.delay` and `_.defer` which accepts `args`
21575     * to provide to `func`.
21576     *
21577     * @private
21578     * @param {Function} func The function to delay.
21579     * @param {number} wait The number of milliseconds to delay invocation.
21580     * @param {Array} args The arguments to provide to `func`.
21581     * @returns {number|Object} Returns the timer id or timeout object.
21582     */
21583    function baseDelay(func, wait, args) {
21584      if (typeof func != 'function') {
21585        throw new TypeError(FUNC_ERROR_TEXT);
21586      }
21587      return setTimeout(function() { func.apply(undefined, args); }, wait);
21588    }
21589
21590    /**
21591     * The base implementation of methods like `_.difference` without support
21592     * for excluding multiple arrays or iteratee shorthands.
21593     *
21594     * @private
21595     * @param {Array} array The array to inspect.
21596     * @param {Array} values The values to exclude.
21597     * @param {Function} [iteratee] The iteratee invoked per element.
21598     * @param {Function} [comparator] The comparator invoked per element.
21599     * @returns {Array} Returns the new array of filtered values.
21600     */
21601    function baseDifference(array, values, iteratee, comparator) {
21602      var index = -1,
21603          includes = arrayIncludes,
21604          isCommon = true,
21605          length = array.length,
21606          result = [],
21607          valuesLength = values.length;
21608
21609      if (!length) {
21610        return result;
21611      }
21612      if (iteratee) {
21613        values = arrayMap(values, baseUnary(iteratee));
21614      }
21615      if (comparator) {
21616        includes = arrayIncludesWith;
21617        isCommon = false;
21618      }
21619      else if (values.length >= LARGE_ARRAY_SIZE) {
21620        includes = cacheHas;
21621        isCommon = false;
21622        values = new SetCache(values);
21623      }
21624      outer:
21625      while (++index < length) {
21626        var value = array[index],
21627            computed = iteratee == null ? value : iteratee(value);
21628
21629        value = (comparator || value !== 0) ? value : 0;
21630        if (isCommon && computed === computed) {
21631          var valuesIndex = valuesLength;
21632          while (valuesIndex--) {
21633            if (values[valuesIndex] === computed) {
21634              continue outer;
21635            }
21636          }
21637          result.push(value);
21638        }
21639        else if (!includes(values, computed, comparator)) {
21640          result.push(value);
21641        }
21642      }
21643      return result;
21644    }
21645
21646    /**
21647     * The base implementation of `_.forEach` without support for iteratee shorthands.
21648     *
21649     * @private
21650     * @param {Array|Object} collection The collection to iterate over.
21651     * @param {Function} iteratee The function invoked per iteration.
21652     * @returns {Array|Object} Returns `collection`.
21653     */
21654    var baseEach = createBaseEach(baseForOwn);
21655
21656    /**
21657     * The base implementation of `_.forEachRight` without support for iteratee shorthands.
21658     *
21659     * @private
21660     * @param {Array|Object} collection The collection to iterate over.
21661     * @param {Function} iteratee The function invoked per iteration.
21662     * @returns {Array|Object} Returns `collection`.
21663     */
21664    var baseEachRight = createBaseEach(baseForOwnRight, true);
21665
21666    /**
21667     * The base implementation of `_.every` without support for iteratee shorthands.
21668     *
21669     * @private
21670     * @param {Array|Object} collection The collection to iterate over.
21671     * @param {Function} predicate The function invoked per iteration.
21672     * @returns {boolean} Returns `true` if all elements pass the predicate check,
21673     *  else `false`
21674     */
21675    function baseEvery(collection, predicate) {
21676      var result = true;
21677      baseEach(collection, function(value, index, collection) {
21678        result = !!predicate(value, index, collection);
21679        return result;
21680      });
21681      return result;
21682    }
21683
21684    /**
21685     * The base implementation of methods like `_.max` and `_.min` which accepts a
21686     * `comparator` to determine the extremum value.
21687     *
21688     * @private
21689     * @param {Array} array The array to iterate over.
21690     * @param {Function} iteratee The iteratee invoked per iteration.
21691     * @param {Function} comparator The comparator used to compare values.
21692     * @returns {*} Returns the extremum value.
21693     */
21694    function baseExtremum(array, iteratee, comparator) {
21695      var index = -1,
21696          length = array.length;
21697
21698      while (++index < length) {
21699        var value = array[index],
21700            current = iteratee(value);
21701
21702        if (current != null && (computed === undefined
21703              ? (current === current && !isSymbol(current))
21704              : comparator(current, computed)
21705            )) {
21706          var computed = current,
21707              result = value;
21708        }
21709      }
21710      return result;
21711    }
21712
21713    /**
21714     * The base implementation of `_.fill` without an iteratee call guard.
21715     *
21716     * @private
21717     * @param {Array} array The array to fill.
21718     * @param {*} value The value to fill `array` with.
21719     * @param {number} [start=0] The start position.
21720     * @param {number} [end=array.length] The end position.
21721     * @returns {Array} Returns `array`.
21722     */
21723    function baseFill(array, value, start, end) {
21724      var length = array.length;
21725
21726      start = toInteger(start);
21727      if (start < 0) {
21728        start = -start > length ? 0 : (length + start);
21729      }
21730      end = (end === undefined || end > length) ? length : toInteger(end);
21731      if (end < 0) {
21732        end += length;
21733      }
21734      end = start > end ? 0 : toLength(end);
21735      while (start < end) {
21736        array[start++] = value;
21737      }
21738      return array;
21739    }
21740
21741    /**
21742     * The base implementation of `_.filter` without support for iteratee shorthands.
21743     *
21744     * @private
21745     * @param {Array|Object} collection The collection to iterate over.
21746     * @param {Function} predicate The function invoked per iteration.
21747     * @returns {Array} Returns the new filtered array.
21748     */
21749    function baseFilter(collection, predicate) {
21750      var result = [];
21751      baseEach(collection, function(value, index, collection) {
21752        if (predicate(value, index, collection)) {
21753          result.push(value);
21754        }
21755      });
21756      return result;
21757    }
21758
21759    /**
21760     * The base implementation of `_.flatten` with support for restricting flattening.
21761     *
21762     * @private
21763     * @param {Array} array The array to flatten.
21764     * @param {number} depth The maximum recursion depth.
21765     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
21766     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
21767     * @param {Array} [result=[]] The initial result value.
21768     * @returns {Array} Returns the new flattened array.
21769     */
21770    function baseFlatten(array, depth, predicate, isStrict, result) {
21771      var index = -1,
21772          length = array.length;
21773
21774      predicate || (predicate = isFlattenable);
21775      result || (result = []);
21776
21777      while (++index < length) {
21778        var value = array[index];
21779        if (depth > 0 && predicate(value)) {
21780          if (depth > 1) {
21781            // Recursively flatten arrays (susceptible to call stack limits).
21782            baseFlatten(value, depth - 1, predicate, isStrict, result);
21783          } else {
21784            arrayPush(result, value);
21785          }
21786        } else if (!isStrict) {
21787          result[result.length] = value;
21788        }
21789      }
21790      return result;
21791    }
21792
21793    /**
21794     * The base implementation of `baseForOwn` which iterates over `object`
21795     * properties returned by `keysFunc` and invokes `iteratee` for each property.
21796     * Iteratee functions may exit iteration early by explicitly returning `false`.
21797     *
21798     * @private
21799     * @param {Object} object The object to iterate over.
21800     * @param {Function} iteratee The function invoked per iteration.
21801     * @param {Function} keysFunc The function to get the keys of `object`.
21802     * @returns {Object} Returns `object`.
21803     */
21804    var baseFor = createBaseFor();
21805
21806    /**
21807     * This function is like `baseFor` except that it iterates over properties
21808     * in the opposite order.
21809     *
21810     * @private
21811     * @param {Object} object The object to iterate over.
21812     * @param {Function} iteratee The function invoked per iteration.
21813     * @param {Function} keysFunc The function to get the keys of `object`.
21814     * @returns {Object} Returns `object`.
21815     */
21816    var baseForRight = createBaseFor(true);
21817
21818    /**
21819     * The base implementation of `_.forOwn` without support for iteratee shorthands.
21820     *
21821     * @private
21822     * @param {Object} object The object to iterate over.
21823     * @param {Function} iteratee The function invoked per iteration.
21824     * @returns {Object} Returns `object`.
21825     */
21826    function baseForOwn(object, iteratee) {
21827      return object && baseFor(object, iteratee, keys);
21828    }
21829
21830    /**
21831     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
21832     *
21833     * @private
21834     * @param {Object} object The object to iterate over.
21835     * @param {Function} iteratee The function invoked per iteration.
21836     * @returns {Object} Returns `object`.
21837     */
21838    function baseForOwnRight(object, iteratee) {
21839      return object && baseForRight(object, iteratee, keys);
21840    }
21841
21842    /**
21843     * The base implementation of `_.functions` which creates an array of
21844     * `object` function property names filtered from `props`.
21845     *
21846     * @private
21847     * @param {Object} object The object to inspect.
21848     * @param {Array} props The property names to filter.
21849     * @returns {Array} Returns the function names.
21850     */
21851    function baseFunctions(object, props) {
21852      return arrayFilter(props, function(key) {
21853        return isFunction(object[key]);
21854      });
21855    }
21856
21857    /**
21858     * The base implementation of `_.get` without support for default values.
21859     *
21860     * @private
21861     * @param {Object} object The object to query.
21862     * @param {Array|string} path The path of the property to get.
21863     * @returns {*} Returns the resolved value.
21864     */
21865    function baseGet(object, path) {
21866      path = castPath(path, object);
21867
21868      var index = 0,
21869          length = path.length;
21870
21871      while (object != null && index < length) {
21872        object = object[toKey(path[index++])];
21873      }
21874      return (index && index == length) ? object : undefined;
21875    }
21876
21877    /**
21878     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
21879     * `keysFunc` and `symbolsFunc` to get the enumerable property names and
21880     * symbols of `object`.
21881     *
21882     * @private
21883     * @param {Object} object The object to query.
21884     * @param {Function} keysFunc The function to get the keys of `object`.
21885     * @param {Function} symbolsFunc The function to get the symbols of `object`.
21886     * @returns {Array} Returns the array of property names and symbols.
21887     */
21888    function baseGetAllKeys(object, keysFunc, symbolsFunc) {
21889      var result = keysFunc(object);
21890      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
21891    }
21892
21893    /**
21894     * The base implementation of `getTag` without fallbacks for buggy environments.
21895     *
21896     * @private
21897     * @param {*} value The value to query.
21898     * @returns {string} Returns the `toStringTag`.
21899     */
21900    function baseGetTag(value) {
21901      if (value == null) {
21902        return value === undefined ? undefinedTag : nullTag;
21903      }
21904      return (symToStringTag && symToStringTag in Object(value))
21905        ? getRawTag(value)
21906        : objectToString(value);
21907    }
21908
21909    /**
21910     * The base implementation of `_.gt` which doesn't coerce arguments.
21911     *
21912     * @private
21913     * @param {*} value The value to compare.
21914     * @param {*} other The other value to compare.
21915     * @returns {boolean} Returns `true` if `value` is greater than `other`,
21916     *  else `false`.
21917     */
21918    function baseGt(value, other) {
21919      return value > other;
21920    }
21921
21922    /**
21923     * The base implementation of `_.has` without support for deep paths.
21924     *
21925     * @private
21926     * @param {Object} [object] The object to query.
21927     * @param {Array|string} key The key to check.
21928     * @returns {boolean} Returns `true` if `key` exists, else `false`.
21929     */
21930    function baseHas(object, key) {
21931      return object != null && hasOwnProperty.call(object, key);
21932    }
21933
21934    /**
21935     * The base implementation of `_.hasIn` without support for deep paths.
21936     *
21937     * @private
21938     * @param {Object} [object] The object to query.
21939     * @param {Array|string} key The key to check.
21940     * @returns {boolean} Returns `true` if `key` exists, else `false`.
21941     */
21942    function baseHasIn(object, key) {
21943      return object != null && key in Object(object);
21944    }
21945
21946    /**
21947     * The base implementation of `_.inRange` which doesn't coerce arguments.
21948     *
21949     * @private
21950     * @param {number} number The number to check.
21951     * @param {number} start The start of the range.
21952     * @param {number} end The end of the range.
21953     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
21954     */
21955    function baseInRange(number, start, end) {
21956      return number >= nativeMin(start, end) && number < nativeMax(start, end);
21957    }
21958
21959    /**
21960     * The base implementation of methods like `_.intersection`, without support
21961     * for iteratee shorthands, that accepts an array of arrays to inspect.
21962     *
21963     * @private
21964     * @param {Array} arrays The arrays to inspect.
21965     * @param {Function} [iteratee] The iteratee invoked per element.
21966     * @param {Function} [comparator] The comparator invoked per element.
21967     * @returns {Array} Returns the new array of shared values.
21968     */
21969    function baseIntersection(arrays, iteratee, comparator) {
21970      var includes = comparator ? arrayIncludesWith : arrayIncludes,
21971          length = arrays[0].length,
21972          othLength = arrays.length,
21973          othIndex = othLength,
21974          caches = Array(othLength),
21975          maxLength = Infinity,
21976          result = [];
21977
21978      while (othIndex--) {
21979        var array = arrays[othIndex];
21980        if (othIndex && iteratee) {
21981          array = arrayMap(array, baseUnary(iteratee));
21982        }
21983        maxLength = nativeMin(array.length, maxLength);
21984        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
21985          ? new SetCache(othIndex && array)
21986          : undefined;
21987      }
21988      array = arrays[0];
21989
21990      var index = -1,
21991          seen = caches[0];
21992
21993      outer:
21994      while (++index < length && result.length < maxLength) {
21995        var value = array[index],
21996            computed = iteratee ? iteratee(value) : value;
21997
21998        value = (comparator || value !== 0) ? value : 0;
21999        if (!(seen
22000              ? cacheHas(seen, computed)
22001              : includes(result, computed, comparator)
22002            )) {
22003          othIndex = othLength;
22004          while (--othIndex) {
22005            var cache = caches[othIndex];
22006            if (!(cache
22007                  ? cacheHas(cache, computed)
22008                  : includes(arrays[othIndex], computed, comparator))
22009                ) {
22010              continue outer;
22011            }
22012          }
22013          if (seen) {
22014            seen.push(computed);
22015          }
22016          result.push(value);
22017        }
22018      }
22019      return result;
22020    }
22021
22022    /**
22023     * The base implementation of `_.invert` and `_.invertBy` which inverts
22024     * `object` with values transformed by `iteratee` and set by `setter`.
22025     *
22026     * @private
22027     * @param {Object} object The object to iterate over.
22028     * @param {Function} setter The function to set `accumulator` values.
22029     * @param {Function} iteratee The iteratee to transform values.
22030     * @param {Object} accumulator The initial inverted object.
22031     * @returns {Function} Returns `accumulator`.
22032     */
22033    function baseInverter(object, setter, iteratee, accumulator) {
22034      baseForOwn(object, function(value, key, object) {
22035        setter(accumulator, iteratee(value), key, object);
22036      });
22037      return accumulator;
22038    }
22039
22040    /**
22041     * The base implementation of `_.invoke` without support for individual
22042     * method arguments.
22043     *
22044     * @private
22045     * @param {Object} object The object to query.
22046     * @param {Array|string} path The path of the method to invoke.
22047     * @param {Array} args The arguments to invoke the method with.
22048     * @returns {*} Returns the result of the invoked method.
22049     */
22050    function baseInvoke(object, path, args) {
22051      path = castPath(path, object);
22052      object = parent(object, path);
22053      var func = object == null ? object : object[toKey(last(path))];
22054      return func == null ? undefined : apply(func, object, args);
22055    }
22056
22057    /**
22058     * The base implementation of `_.isArguments`.
22059     *
22060     * @private
22061     * @param {*} value The value to check.
22062     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
22063     */
22064    function baseIsArguments(value) {
22065      return isObjectLike(value) && baseGetTag(value) == argsTag;
22066    }
22067
22068    /**
22069     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
22070     *
22071     * @private
22072     * @param {*} value The value to check.
22073     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
22074     */
22075    function baseIsArrayBuffer(value) {
22076      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
22077    }
22078
22079    /**
22080     * The base implementation of `_.isDate` without Node.js optimizations.
22081     *
22082     * @private
22083     * @param {*} value The value to check.
22084     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
22085     */
22086    function baseIsDate(value) {
22087      return isObjectLike(value) && baseGetTag(value) == dateTag;
22088    }
22089
22090    /**
22091     * The base implementation of `_.isEqual` which supports partial comparisons
22092     * and tracks traversed objects.
22093     *
22094     * @private
22095     * @param {*} value The value to compare.
22096     * @param {*} other The other value to compare.
22097     * @param {boolean} bitmask The bitmask flags.
22098     *  1 - Unordered comparison
22099     *  2 - Partial comparison
22100     * @param {Function} [customizer] The function to customize comparisons.
22101     * @param {Object} [stack] Tracks traversed `value` and `other` objects.
22102     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
22103     */
22104    function baseIsEqual(value, other, bitmask, customizer, stack) {
22105      if (value === other) {
22106        return true;
22107      }
22108      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
22109        return value !== value && other !== other;
22110      }
22111      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
22112    }
22113
22114    /**
22115     * A specialized version of `baseIsEqual` for arrays and objects which performs
22116     * deep comparisons and tracks traversed objects enabling objects with circular
22117     * references to be compared.
22118     *
22119     * @private
22120     * @param {Object} object The object to compare.
22121     * @param {Object} other The other object to compare.
22122     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
22123     * @param {Function} customizer The function to customize comparisons.
22124     * @param {Function} equalFunc The function to determine equivalents of values.
22125     * @param {Object} [stack] Tracks traversed `object` and `other` objects.
22126     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
22127     */
22128    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
22129      var objIsArr = isArray(object),
22130          othIsArr = isArray(other),
22131          objTag = objIsArr ? arrayTag : getTag(object),
22132          othTag = othIsArr ? arrayTag : getTag(other);
22133
22134      objTag = objTag == argsTag ? objectTag : objTag;
22135      othTag = othTag == argsTag ? objectTag : othTag;
22136
22137      var objIsObj = objTag == objectTag,
22138          othIsObj = othTag == objectTag,
22139          isSameTag = objTag == othTag;
22140
22141      if (isSameTag && isBuffer(object)) {
22142        if (!isBuffer(other)) {
22143          return false;
22144        }
22145        objIsArr = true;
22146        objIsObj = false;
22147      }
22148      if (isSameTag && !objIsObj) {
22149        stack || (stack = new Stack);
22150        return (objIsArr || isTypedArray(object))
22151          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
22152          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
22153      }
22154      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
22155        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
22156            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
22157
22158        if (objIsWrapped || othIsWrapped) {
22159          var objUnwrapped = objIsWrapped ? object.value() : object,
22160              othUnwrapped = othIsWrapped ? other.value() : other;
22161
22162          stack || (stack = new Stack);
22163          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
22164        }
22165      }
22166      if (!isSameTag) {
22167        return false;
22168      }
22169      stack || (stack = new Stack);
22170      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
22171    }
22172
22173    /**
22174     * The base implementation of `_.isMap` without Node.js optimizations.
22175     *
22176     * @private
22177     * @param {*} value The value to check.
22178     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
22179     */
22180    function baseIsMap(value) {
22181      return isObjectLike(value) && getTag(value) == mapTag;
22182    }
22183
22184    /**
22185     * The base implementation of `_.isMatch` without support for iteratee shorthands.
22186     *
22187     * @private
22188     * @param {Object} object The object to inspect.
22189     * @param {Object} source The object of property values to match.
22190     * @param {Array} matchData The property names, values, and compare flags to match.
22191     * @param {Function} [customizer] The function to customize comparisons.
22192     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
22193     */
22194    function baseIsMatch(object, source, matchData, customizer) {
22195      var index = matchData.length,
22196          length = index,
22197          noCustomizer = !customizer;
22198
22199      if (object == null) {
22200        return !length;
22201      }
22202      object = Object(object);
22203      while (index--) {
22204        var data = matchData[index];
22205        if ((noCustomizer && data[2])
22206              ? data[1] !== object[data[0]]
22207              : !(data[0] in object)
22208            ) {
22209          return false;
22210        }
22211      }
22212      while (++index < length) {
22213        data = matchData[index];
22214        var key = data[0],
22215            objValue = object[key],
22216            srcValue = data[1];
22217
22218        if (noCustomizer && data[2]) {
22219          if (objValue === undefined && !(key in object)) {
22220            return false;
22221          }
22222        } else {
22223          var stack = new Stack;
22224          if (customizer) {
22225            var result = customizer(objValue, srcValue, key, object, source, stack);
22226          }
22227          if (!(result === undefined
22228                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
22229                : result
22230              )) {
22231            return false;
22232          }
22233        }
22234      }
22235      return true;
22236    }
22237
22238    /**
22239     * The base implementation of `_.isNative` without bad shim checks.
22240     *
22241     * @private
22242     * @param {*} value The value to check.
22243     * @returns {boolean} Returns `true` if `value` is a native function,
22244     *  else `false`.
22245     */
22246    function baseIsNative(value) {
22247      if (!isObject(value) || isMasked(value)) {
22248        return false;
22249      }
22250      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
22251      return pattern.test(toSource(value));
22252    }
22253
22254    /**
22255     * The base implementation of `_.isRegExp` without Node.js optimizations.
22256     *
22257     * @private
22258     * @param {*} value The value to check.
22259     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
22260     */
22261    function baseIsRegExp(value) {
22262      return isObjectLike(value) && baseGetTag(value) == regexpTag;
22263    }
22264
22265    /**
22266     * The base implementation of `_.isSet` without Node.js optimizations.
22267     *
22268     * @private
22269     * @param {*} value The value to check.
22270     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
22271     */
22272    function baseIsSet(value) {
22273      return isObjectLike(value) && getTag(value) == setTag;
22274    }
22275
22276    /**
22277     * The base implementation of `_.isTypedArray` without Node.js optimizations.
22278     *
22279     * @private
22280     * @param {*} value The value to check.
22281     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
22282     */
22283    function baseIsTypedArray(value) {
22284      return isObjectLike(value) &&
22285        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
22286    }
22287
22288    /**
22289     * The base implementation of `_.iteratee`.
22290     *
22291     * @private
22292     * @param {*} [value=_.identity] The value to convert to an iteratee.
22293     * @returns {Function} Returns the iteratee.
22294     */
22295    function baseIteratee(value) {
22296      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
22297      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
22298      if (typeof value == 'function') {
22299        return value;
22300      }
22301      if (value == null) {
22302        return identity;
22303      }
22304      if (typeof value == 'object') {
22305        return isArray(value)
22306          ? baseMatchesProperty(value[0], value[1])
22307          : baseMatches(value);
22308      }
22309      return property(value);
22310    }
22311
22312    /**
22313     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
22314     *
22315     * @private
22316     * @param {Object} object The object to query.
22317     * @returns {Array} Returns the array of property names.
22318     */
22319    function baseKeys(object) {
22320      if (!isPrototype(object)) {
22321        return nativeKeys(object);
22322      }
22323      var result = [];
22324      for (var key in Object(object)) {
22325        if (hasOwnProperty.call(object, key) && key != 'constructor') {
22326          result.push(key);
22327        }
22328      }
22329      return result;
22330    }
22331
22332    /**
22333     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
22334     *
22335     * @private
22336     * @param {Object} object The object to query.
22337     * @returns {Array} Returns the array of property names.
22338     */
22339    function baseKeysIn(object) {
22340      if (!isObject(object)) {
22341        return nativeKeysIn(object);
22342      }
22343      var isProto = isPrototype(object),
22344          result = [];
22345
22346      for (var key in object) {
22347        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
22348          result.push(key);
22349        }
22350      }
22351      return result;
22352    }
22353
22354    /**
22355     * The base implementation of `_.lt` which doesn't coerce arguments.
22356     *
22357     * @private
22358     * @param {*} value The value to compare.
22359     * @param {*} other The other value to compare.
22360     * @returns {boolean} Returns `true` if `value` is less than `other`,
22361     *  else `false`.
22362     */
22363    function baseLt(value, other) {
22364      return value < other;
22365    }
22366
22367    /**
22368     * The base implementation of `_.map` without support for iteratee shorthands.
22369     *
22370     * @private
22371     * @param {Array|Object} collection The collection to iterate over.
22372     * @param {Function} iteratee The function invoked per iteration.
22373     * @returns {Array} Returns the new mapped array.
22374     */
22375    function baseMap(collection, iteratee) {
22376      var index = -1,
22377          result = isArrayLike(collection) ? Array(collection.length) : [];
22378
22379      baseEach(collection, function(value, key, collection) {
22380        result[++index] = iteratee(value, key, collection);
22381      });
22382      return result;
22383    }
22384
22385    /**
22386     * The base implementation of `_.matches` which doesn't clone `source`.
22387     *
22388     * @private
22389     * @param {Object} source The object of property values to match.
22390     * @returns {Function} Returns the new spec function.
22391     */
22392    function baseMatches(source) {
22393      var matchData = getMatchData(source);
22394      if (matchData.length == 1 && matchData[0][2]) {
22395        return matchesStrictComparable(matchData[0][0], matchData[0][1]);
22396      }
22397      return function(object) {
22398        return object === source || baseIsMatch(object, source, matchData);
22399      };
22400    }
22401
22402    /**
22403     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
22404     *
22405     * @private
22406     * @param {string} path The path of the property to get.
22407     * @param {*} srcValue The value to match.
22408     * @returns {Function} Returns the new spec function.
22409     */
22410    function baseMatchesProperty(path, srcValue) {
22411      if (isKey(path) && isStrictComparable(srcValue)) {
22412        return matchesStrictComparable(toKey(path), srcValue);
22413      }
22414      return function(object) {
22415        var objValue = get(object, path);
22416        return (objValue === undefined && objValue === srcValue)
22417          ? hasIn(object, path)
22418          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
22419      };
22420    }
22421
22422    /**
22423     * The base implementation of `_.merge` without support for multiple sources.
22424     *
22425     * @private
22426     * @param {Object} object The destination object.
22427     * @param {Object} source The source object.
22428     * @param {number} srcIndex The index of `source`.
22429     * @param {Function} [customizer] The function to customize merged values.
22430     * @param {Object} [stack] Tracks traversed source values and their merged
22431     *  counterparts.
22432     */
22433    function baseMerge(object, source, srcIndex, customizer, stack) {
22434      if (object === source) {
22435        return;
22436      }
22437      baseFor(source, function(srcValue, key) {
22438        stack || (stack = new Stack);
22439        if (isObject(srcValue)) {
22440          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
22441        }
22442        else {
22443          var newValue = customizer
22444            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
22445            : undefined;
22446
22447          if (newValue === undefined) {
22448            newValue = srcValue;
22449          }
22450          assignMergeValue(object, key, newValue);
22451        }
22452      }, keysIn);
22453    }
22454
22455    /**
22456     * A specialized version of `baseMerge` for arrays and objects which performs
22457     * deep merges and tracks traversed objects enabling objects with circular
22458     * references to be merged.
22459     *
22460     * @private
22461     * @param {Object} object The destination object.
22462     * @param {Object} source The source object.
22463     * @param {string} key The key of the value to merge.
22464     * @param {number} srcIndex The index of `source`.
22465     * @param {Function} mergeFunc The function to merge values.
22466     * @param {Function} [customizer] The function to customize assigned values.
22467     * @param {Object} [stack] Tracks traversed source values and their merged
22468     *  counterparts.
22469     */
22470    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
22471      var objValue = safeGet(object, key),
22472          srcValue = safeGet(source, key),
22473          stacked = stack.get(srcValue);
22474
22475      if (stacked) {
22476        assignMergeValue(object, key, stacked);
22477        return;
22478      }
22479      var newValue = customizer
22480        ? customizer(objValue, srcValue, (key + ''), object, source, stack)
22481        : undefined;
22482
22483      var isCommon = newValue === undefined;
22484
22485      if (isCommon) {
22486        var isArr = isArray(srcValue),
22487            isBuff = !isArr && isBuffer(srcValue),
22488            isTyped = !isArr && !isBuff && isTypedArray(srcValue);
22489
22490        newValue = srcValue;
22491        if (isArr || isBuff || isTyped) {
22492          if (isArray(objValue)) {
22493            newValue = objValue;
22494          }
22495          else if (isArrayLikeObject(objValue)) {
22496            newValue = copyArray(objValue);
22497          }
22498          else if (isBuff) {
22499            isCommon = false;
22500            newValue = cloneBuffer(srcValue, true);
22501          }
22502          else if (isTyped) {
22503            isCommon = false;
22504            newValue = cloneTypedArray(srcValue, true);
22505          }
22506          else {
22507            newValue = [];
22508          }
22509        }
22510        else if (isPlainObject(srcValue) || isArguments(srcValue)) {
22511          newValue = objValue;
22512          if (isArguments(objValue)) {
22513            newValue = toPlainObject(objValue);
22514          }
22515          else if (!isObject(objValue) || isFunction(objValue)) {
22516            newValue = initCloneObject(srcValue);
22517          }
22518        }
22519        else {
22520          isCommon = false;
22521        }
22522      }
22523      if (isCommon) {
22524        // Recursively merge objects and arrays (susceptible to call stack limits).
22525        stack.set(srcValue, newValue);
22526        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
22527        stack['delete'](srcValue);
22528      }
22529      assignMergeValue(object, key, newValue);
22530    }
22531
22532    /**
22533     * The base implementation of `_.nth` which doesn't coerce arguments.
22534     *
22535     * @private
22536     * @param {Array} array The array to query.
22537     * @param {number} n The index of the element to return.
22538     * @returns {*} Returns the nth element of `array`.
22539     */
22540    function baseNth(array, n) {
22541      var length = array.length;
22542      if (!length) {
22543        return;
22544      }
22545      n += n < 0 ? length : 0;
22546      return isIndex(n, length) ? array[n] : undefined;
22547    }
22548
22549    /**
22550     * The base implementation of `_.orderBy` without param guards.
22551     *
22552     * @private
22553     * @param {Array|Object} collection The collection to iterate over.
22554     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
22555     * @param {string[]} orders The sort orders of `iteratees`.
22556     * @returns {Array} Returns the new sorted array.
22557     */
22558    function baseOrderBy(collection, iteratees, orders) {
22559      if (iteratees.length) {
22560        iteratees = arrayMap(iteratees, function(iteratee) {
22561          if (isArray(iteratee)) {
22562            return function(value) {
22563              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);
22564            }
22565          }
22566          return iteratee;
22567        });
22568      } else {
22569        iteratees = [identity];
22570      }
22571
22572      var index = -1;
22573      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
22574
22575      var result = baseMap(collection, function(value, key, collection) {
22576        var criteria = arrayMap(iteratees, function(iteratee) {
22577          return iteratee(value);
22578        });
22579        return { 'criteria': criteria, 'index': ++index, 'value': value };
22580      });
22581
22582      return baseSortBy(result, function(object, other) {
22583        return compareMultiple(object, other, orders);
22584      });
22585    }
22586
22587    /**
22588     * The base implementation of `_.pick` without support for individual
22589     * property identifiers.
22590     *
22591     * @private
22592     * @param {Object} object The source object.
22593     * @param {string[]} paths The property paths to pick.
22594     * @returns {Object} Returns the new object.
22595     */
22596    function basePick(object, paths) {
22597      return basePickBy(object, paths, function(value, path) {
22598        return hasIn(object, path);
22599      });
22600    }
22601
22602    /**
22603     * The base implementation of  `_.pickBy` without support for iteratee shorthands.
22604     *
22605     * @private
22606     * @param {Object} object The source object.
22607     * @param {string[]} paths The property paths to pick.
22608     * @param {Function} predicate The function invoked per property.
22609     * @returns {Object} Returns the new object.
22610     */
22611    function basePickBy(object, paths, predicate) {
22612      var index = -1,
22613          length = paths.length,
22614          result = {};
22615
22616      while (++index < length) {
22617        var path = paths[index],
22618            value = baseGet(object, path);
22619
22620        if (predicate(value, path)) {
22621          baseSet(result, castPath(path, object), value);
22622        }
22623      }
22624      return result;
22625    }
22626
22627    /**
22628     * A specialized version of `baseProperty` which supports deep paths.
22629     *
22630     * @private
22631     * @param {Array|string} path The path of the property to get.
22632     * @returns {Function} Returns the new accessor function.
22633     */
22634    function basePropertyDeep(path) {
22635      return function(object) {
22636        return baseGet(object, path);
22637      };
22638    }
22639
22640    /**
22641     * The base implementation of `_.pullAllBy` without support for iteratee
22642     * shorthands.
22643     *
22644     * @private
22645     * @param {Array} array The array to modify.
22646     * @param {Array} values The values to remove.
22647     * @param {Function} [iteratee] The iteratee invoked per element.
22648     * @param {Function} [comparator] The comparator invoked per element.
22649     * @returns {Array} Returns `array`.
22650     */
22651    function basePullAll(array, values, iteratee, comparator) {
22652      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
22653          index = -1,
22654          length = values.length,
22655          seen = array;
22656
22657      if (array === values) {
22658        values = copyArray(values);
22659      }
22660      if (iteratee) {
22661        seen = arrayMap(array, baseUnary(iteratee));
22662      }
22663      while (++index < length) {
22664        var fromIndex = 0,
22665            value = values[index],
22666            computed = iteratee ? iteratee(value) : value;
22667
22668        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
22669          if (seen !== array) {
22670            splice.call(seen, fromIndex, 1);
22671          }
22672          splice.call(array, fromIndex, 1);
22673        }
22674      }
22675      return array;
22676    }
22677
22678    /**
22679     * The base implementation of `_.pullAt` without support for individual
22680     * indexes or capturing the removed elements.
22681     *
22682     * @private
22683     * @param {Array} array The array to modify.
22684     * @param {number[]} indexes The indexes of elements to remove.
22685     * @returns {Array} Returns `array`.
22686     */
22687    function basePullAt(array, indexes) {
22688      var length = array ? indexes.length : 0,
22689          lastIndex = length - 1;
22690
22691      while (length--) {
22692        var index = indexes[length];
22693        if (length == lastIndex || index !== previous) {
22694          var previous = index;
22695          if (isIndex(index)) {
22696            splice.call(array, index, 1);
22697          } else {
22698            baseUnset(array, index);
22699          }
22700        }
22701      }
22702      return array;
22703    }
22704
22705    /**
22706     * The base implementation of `_.random` without support for returning
22707     * floating-point numbers.
22708     *
22709     * @private
22710     * @param {number} lower The lower bound.
22711     * @param {number} upper The upper bound.
22712     * @returns {number} Returns the random number.
22713     */
22714    function baseRandom(lower, upper) {
22715      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
22716    }
22717
22718    /**
22719     * The base implementation of `_.range` and `_.rangeRight` which doesn't
22720     * coerce arguments.
22721     *
22722     * @private
22723     * @param {number} start The start of the range.
22724     * @param {number} end The end of the range.
22725     * @param {number} step The value to increment or decrement by.
22726     * @param {boolean} [fromRight] Specify iterating from right to left.
22727     * @returns {Array} Returns the range of numbers.
22728     */
22729    function baseRange(start, end, step, fromRight) {
22730      var index = -1,
22731          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
22732          result = Array(length);
22733
22734      while (length--) {
22735        result[fromRight ? length : ++index] = start;
22736        start += step;
22737      }
22738      return result;
22739    }
22740
22741    /**
22742     * The base implementation of `_.repeat` which doesn't coerce arguments.
22743     *
22744     * @private
22745     * @param {string} string The string to repeat.
22746     * @param {number} n The number of times to repeat the string.
22747     * @returns {string} Returns the repeated string.
22748     */
22749    function baseRepeat(string, n) {
22750      var result = '';
22751      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
22752        return result;
22753      }
22754      // Leverage the exponentiation by squaring algorithm for a faster repeat.
22755      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
22756      do {
22757        if (n % 2) {
22758          result += string;
22759        }
22760        n = nativeFloor(n / 2);
22761        if (n) {
22762          string += string;
22763        }
22764      } while (n);
22765
22766      return result;
22767    }
22768
22769    /**
22770     * The base implementation of `_.rest` which doesn't validate or coerce arguments.
22771     *
22772     * @private
22773     * @param {Function} func The function to apply a rest parameter to.
22774     * @param {number} [start=func.length-1] The start position of the rest parameter.
22775     * @returns {Function} Returns the new function.
22776     */
22777    function baseRest(func, start) {
22778      return setToString(overRest(func, start, identity), func + '');
22779    }
22780
22781    /**
22782     * The base implementation of `_.sample`.
22783     *
22784     * @private
22785     * @param {Array|Object} collection The collection to sample.
22786     * @returns {*} Returns the random element.
22787     */
22788    function baseSample(collection) {
22789      return arraySample(values(collection));
22790    }
22791
22792    /**
22793     * The base implementation of `_.sampleSize` without param guards.
22794     *
22795     * @private
22796     * @param {Array|Object} collection The collection to sample.
22797     * @param {number} n The number of elements to sample.
22798     * @returns {Array} Returns the random elements.
22799     */
22800    function baseSampleSize(collection, n) {
22801      var array = values(collection);
22802      return shuffleSelf(array, baseClamp(n, 0, array.length));
22803    }
22804
22805    /**
22806     * The base implementation of `_.set`.
22807     *
22808     * @private
22809     * @param {Object} object The object to modify.
22810     * @param {Array|string} path The path of the property to set.
22811     * @param {*} value The value to set.
22812     * @param {Function} [customizer] The function to customize path creation.
22813     * @returns {Object} Returns `object`.
22814     */
22815    function baseSet(object, path, value, customizer) {
22816      if (!isObject(object)) {
22817        return object;
22818      }
22819      path = castPath(path, object);
22820
22821      var index = -1,
22822          length = path.length,
22823          lastIndex = length - 1,
22824          nested = object;
22825
22826      while (nested != null && ++index < length) {
22827        var key = toKey(path[index]),
22828            newValue = value;
22829
22830        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
22831          return object;
22832        }
22833
22834        if (index != lastIndex) {
22835          var objValue = nested[key];
22836          newValue = customizer ? customizer(objValue, key, nested) : undefined;
22837          if (newValue === undefined) {
22838            newValue = isObject(objValue)
22839              ? objValue
22840              : (isIndex(path[index + 1]) ? [] : {});
22841          }
22842        }
22843        assignValue(nested, key, newValue);
22844        nested = nested[key];
22845      }
22846      return object;
22847    }
22848
22849    /**
22850     * The base implementation of `setData` without support for hot loop shorting.
22851     *
22852     * @private
22853     * @param {Function} func The function to associate metadata with.
22854     * @param {*} data The metadata.
22855     * @returns {Function} Returns `func`.
22856     */
22857    var baseSetData = !metaMap ? identity : function(func, data) {
22858      metaMap.set(func, data);
22859      return func;
22860    };
22861
22862    /**
22863     * The base implementation of `setToString` without support for hot loop shorting.
22864     *
22865     * @private
22866     * @param {Function} func The function to modify.
22867     * @param {Function} string The `toString` result.
22868     * @returns {Function} Returns `func`.
22869     */
22870    var baseSetToString = !defineProperty ? identity : function(func, string) {
22871      return defineProperty(func, 'toString', {
22872        'configurable': true,
22873        'enumerable': false,
22874        'value': constant(string),
22875        'writable': true
22876      });
22877    };
22878
22879    /**
22880     * The base implementation of `_.shuffle`.
22881     *
22882     * @private
22883     * @param {Array|Object} collection The collection to shuffle.
22884     * @returns {Array} Returns the new shuffled array.
22885     */
22886    function baseShuffle(collection) {
22887      return shuffleSelf(values(collection));
22888    }
22889
22890    /**
22891     * The base implementation of `_.slice` without an iteratee call guard.
22892     *
22893     * @private
22894     * @param {Array} array The array to slice.
22895     * @param {number} [start=0] The start position.
22896     * @param {number} [end=array.length] The end position.
22897     * @returns {Array} Returns the slice of `array`.
22898     */
22899    function baseSlice(array, start, end) {
22900      var index = -1,
22901          length = array.length;
22902
22903      if (start < 0) {
22904        start = -start > length ? 0 : (length + start);
22905      }
22906      end = end > length ? length : end;
22907      if (end < 0) {
22908        end += length;
22909      }
22910      length = start > end ? 0 : ((end - start) >>> 0);
22911      start >>>= 0;
22912
22913      var result = Array(length);
22914      while (++index < length) {
22915        result[index] = array[index + start];
22916      }
22917      return result;
22918    }
22919
22920    /**
22921     * The base implementation of `_.some` without support for iteratee shorthands.
22922     *
22923     * @private
22924     * @param {Array|Object} collection The collection to iterate over.
22925     * @param {Function} predicate The function invoked per iteration.
22926     * @returns {boolean} Returns `true` if any element passes the predicate check,
22927     *  else `false`.
22928     */
22929    function baseSome(collection, predicate) {
22930      var result;
22931
22932      baseEach(collection, function(value, index, collection) {
22933        result = predicate(value, index, collection);
22934        return !result;
22935      });
22936      return !!result;
22937    }
22938
22939    /**
22940     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
22941     * performs a binary search of `array` to determine the index at which `value`
22942     * should be inserted into `array` in order to maintain its sort order.
22943     *
22944     * @private
22945     * @param {Array} array The sorted array to inspect.
22946     * @param {*} value The value to evaluate.
22947     * @param {boolean} [retHighest] Specify returning the highest qualified index.
22948     * @returns {number} Returns the index at which `value` should be inserted
22949     *  into `array`.
22950     */
22951    function baseSortedIndex(array, value, retHighest) {
22952      var low = 0,
22953          high = array == null ? low : array.length;
22954
22955      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
22956        while (low < high) {
22957          var mid = (low + high) >>> 1,
22958              computed = array[mid];
22959
22960          if (computed !== null && !isSymbol(computed) &&
22961              (retHighest ? (computed <= value) : (computed < value))) {
22962            low = mid + 1;
22963          } else {
22964            high = mid;
22965          }
22966        }
22967        return high;
22968      }
22969      return baseSortedIndexBy(array, value, identity, retHighest);
22970    }
22971
22972    /**
22973     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
22974     * which invokes `iteratee` for `value` and each element of `array` to compute
22975     * their sort ranking. The iteratee is invoked with one argument; (value).
22976     *
22977     * @private
22978     * @param {Array} array The sorted array to inspect.
22979     * @param {*} value The value to evaluate.
22980     * @param {Function} iteratee The iteratee invoked per element.
22981     * @param {boolean} [retHighest] Specify returning the highest qualified index.
22982     * @returns {number} Returns the index at which `value` should be inserted
22983     *  into `array`.
22984     */
22985    function baseSortedIndexBy(array, value, iteratee, retHighest) {
22986      var low = 0,
22987          high = array == null ? 0 : array.length;
22988      if (high === 0) {
22989        return 0;
22990      }
22991
22992      value = iteratee(value);
22993      var valIsNaN = value !== value,
22994          valIsNull = value === null,
22995          valIsSymbol = isSymbol(value),
22996          valIsUndefined = value === undefined;
22997
22998      while (low < high) {
22999        var mid = nativeFloor((low + high) / 2),
23000            computed = iteratee(array[mid]),
23001            othIsDefined = computed !== undefined,
23002            othIsNull = computed === null,
23003            othIsReflexive = computed === computed,
23004            othIsSymbol = isSymbol(computed);
23005
23006        if (valIsNaN) {
23007          var setLow = retHighest || othIsReflexive;
23008        } else if (valIsUndefined) {
23009          setLow = othIsReflexive && (retHighest || othIsDefined);
23010        } else if (valIsNull) {
23011          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
23012        } else if (valIsSymbol) {
23013          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
23014        } else if (othIsNull || othIsSymbol) {
23015          setLow = false;
23016        } else {
23017          setLow = retHighest ? (computed <= value) : (computed < value);
23018        }
23019        if (setLow) {
23020          low = mid + 1;
23021        } else {
23022          high = mid;
23023        }
23024      }
23025      return nativeMin(high, MAX_ARRAY_INDEX);
23026    }
23027
23028    /**
23029     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
23030     * support for iteratee shorthands.
23031     *
23032     * @private
23033     * @param {Array} array The array to inspect.
23034     * @param {Function} [iteratee] The iteratee invoked per element.
23035     * @returns {Array} Returns the new duplicate free array.
23036     */
23037    function baseSortedUniq(array, iteratee) {
23038      var index = -1,
23039          length = array.length,
23040          resIndex = 0,
23041          result = [];
23042
23043      while (++index < length) {
23044        var value = array[index],
23045            computed = iteratee ? iteratee(value) : value;
23046
23047        if (!index || !eq(computed, seen)) {
23048          var seen = computed;
23049          result[resIndex++] = value === 0 ? 0 : value;
23050        }
23051      }
23052      return result;
23053    }
23054
23055    /**
23056     * The base implementation of `_.toNumber` which doesn't ensure correct
23057     * conversions of binary, hexadecimal, or octal string values.
23058     *
23059     * @private
23060     * @param {*} value The value to process.
23061     * @returns {number} Returns the number.
23062     */
23063    function baseToNumber(value) {
23064      if (typeof value == 'number') {
23065        return value;
23066      }
23067      if (isSymbol(value)) {
23068        return NAN;
23069      }
23070      return +value;
23071    }
23072
23073    /**
23074     * The base implementation of `_.toString` which doesn't convert nullish
23075     * values to empty strings.
23076     *
23077     * @private
23078     * @param {*} value The value to process.
23079     * @returns {string} Returns the string.
23080     */
23081    function baseToString(value) {
23082      // Exit early for strings to avoid a performance hit in some environments.
23083      if (typeof value == 'string') {
23084        return value;
23085      }
23086      if (isArray(value)) {
23087        // Recursively convert values (susceptible to call stack limits).
23088        return arrayMap(value, baseToString) + '';
23089      }
23090      if (isSymbol(value)) {
23091        return symbolToString ? symbolToString.call(value) : '';
23092      }
23093      var result = (value + '');
23094      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
23095    }
23096
23097    /**
23098     * The base implementation of `_.uniqBy` without support for iteratee shorthands.
23099     *
23100     * @private
23101     * @param {Array} array The array to inspect.
23102     * @param {Function} [iteratee] The iteratee invoked per element.
23103     * @param {Function} [comparator] The comparator invoked per element.
23104     * @returns {Array} Returns the new duplicate free array.
23105     */
23106    function baseUniq(array, iteratee, comparator) {
23107      var index = -1,
23108          includes = arrayIncludes,
23109          length = array.length,
23110          isCommon = true,
23111          result = [],
23112          seen = result;
23113
23114      if (comparator) {
23115        isCommon = false;
23116        includes = arrayIncludesWith;
23117      }
23118      else if (length >= LARGE_ARRAY_SIZE) {
23119        var set = iteratee ? null : createSet(array);
23120        if (set) {
23121          return setToArray(set);
23122        }
23123        isCommon = false;
23124        includes = cacheHas;
23125        seen = new SetCache;
23126      }
23127      else {
23128        seen = iteratee ? [] : result;
23129      }
23130      outer:
23131      while (++index < length) {
23132        var value = array[index],
23133            computed = iteratee ? iteratee(value) : value;
23134
23135        value = (comparator || value !== 0) ? value : 0;
23136        if (isCommon && computed === computed) {
23137          var seenIndex = seen.length;
23138          while (seenIndex--) {
23139            if (seen[seenIndex] === computed) {
23140              continue outer;
23141            }
23142          }
23143          if (iteratee) {
23144            seen.push(computed);
23145          }
23146          result.push(value);
23147        }
23148        else if (!includes(seen, computed, comparator)) {
23149          if (seen !== result) {
23150            seen.push(computed);
23151          }
23152          result.push(value);
23153        }
23154      }
23155      return result;
23156    }
23157
23158    /**
23159     * The base implementation of `_.unset`.
23160     *
23161     * @private
23162     * @param {Object} object The object to modify.
23163     * @param {Array|string} path The property path to unset.
23164     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
23165     */
23166    function baseUnset(object, path) {
23167      path = castPath(path, object);
23168      object = parent(object, path);
23169      return object == null || delete object[toKey(last(path))];
23170    }
23171
23172    /**
23173     * The base implementation of `_.update`.
23174     *
23175     * @private
23176     * @param {Object} object The object to modify.
23177     * @param {Array|string} path The path of the property to update.
23178     * @param {Function} updater The function to produce the updated value.
23179     * @param {Function} [customizer] The function to customize path creation.
23180     * @returns {Object} Returns `object`.
23181     */
23182    function baseUpdate(object, path, updater, customizer) {
23183      return baseSet(object, path, updater(baseGet(object, path)), customizer);
23184    }
23185
23186    /**
23187     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
23188     * without support for iteratee shorthands.
23189     *
23190     * @private
23191     * @param {Array} array The array to query.
23192     * @param {Function} predicate The function invoked per iteration.
23193     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
23194     * @param {boolean} [fromRight] Specify iterating from right to left.
23195     * @returns {Array} Returns the slice of `array`.
23196     */
23197    function baseWhile(array, predicate, isDrop, fromRight) {
23198      var length = array.length,
23199          index = fromRight ? length : -1;
23200
23201      while ((fromRight ? index-- : ++index < length) &&
23202        predicate(array[index], index, array)) {}
23203
23204      return isDrop
23205        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
23206        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
23207    }
23208
23209    /**
23210     * The base implementation of `wrapperValue` which returns the result of
23211     * performing a sequence of actions on the unwrapped `value`, where each
23212     * successive action is supplied the return value of the previous.
23213     *
23214     * @private
23215     * @param {*} value The unwrapped value.
23216     * @param {Array} actions Actions to perform to resolve the unwrapped value.
23217     * @returns {*} Returns the resolved value.
23218     */
23219    function baseWrapperValue(value, actions) {
23220      var result = value;
23221      if (result instanceof LazyWrapper) {
23222        result = result.value();
23223      }
23224      return arrayReduce(actions, function(result, action) {
23225        return action.func.apply(action.thisArg, arrayPush([result], action.args));
23226      }, result);
23227    }
23228
23229    /**
23230     * The base implementation of methods like `_.xor`, without support for
23231     * iteratee shorthands, that accepts an array of arrays to inspect.
23232     *
23233     * @private
23234     * @param {Array} arrays The arrays to inspect.
23235     * @param {Function} [iteratee] The iteratee invoked per element.
23236     * @param {Function} [comparator] The comparator invoked per element.
23237     * @returns {Array} Returns the new array of values.
23238     */
23239    function baseXor(arrays, iteratee, comparator) {
23240      var length = arrays.length;
23241      if (length < 2) {
23242        return length ? baseUniq(arrays[0]) : [];
23243      }
23244      var index = -1,
23245          result = Array(length);
23246
23247      while (++index < length) {
23248        var array = arrays[index],
23249            othIndex = -1;
23250
23251        while (++othIndex < length) {
23252          if (othIndex != index) {
23253            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
23254          }
23255        }
23256      }
23257      return baseUniq(baseFlatten(result, 1), iteratee, comparator);
23258    }
23259
23260    /**
23261     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
23262     *
23263     * @private
23264     * @param {Array} props The property identifiers.
23265     * @param {Array} values The property values.
23266     * @param {Function} assignFunc The function to assign values.
23267     * @returns {Object} Returns the new object.
23268     */
23269    function baseZipObject(props, values, assignFunc) {
23270      var index = -1,
23271          length = props.length,
23272          valsLength = values.length,
23273          result = {};
23274
23275      while (++index < length) {
23276        var value = index < valsLength ? values[index] : undefined;
23277        assignFunc(result, props[index], value);
23278      }
23279      return result;
23280    }
23281
23282    /**
23283     * Casts `value` to an empty array if it's not an array like object.
23284     *
23285     * @private
23286     * @param {*} value The value to inspect.
23287     * @returns {Array|Object} Returns the cast array-like object.
23288     */
23289    function castArrayLikeObject(value) {
23290      return isArrayLikeObject(value) ? value : [];
23291    }
23292
23293    /**
23294     * Casts `value` to `identity` if it's not a function.
23295     *
23296     * @private
23297     * @param {*} value The value to inspect.
23298     * @returns {Function} Returns cast function.
23299     */
23300    function castFunction(value) {
23301      return typeof value == 'function' ? value : identity;
23302    }
23303
23304    /**
23305     * Casts `value` to a path array if it's not one.
23306     *
23307     * @private
23308     * @param {*} value The value to inspect.
23309     * @param {Object} [object] The object to query keys on.
23310     * @returns {Array} Returns the cast property path array.
23311     */
23312    function castPath(value, object) {
23313      if (isArray(value)) {
23314        return value;
23315      }
23316      return isKey(value, object) ? [value] : stringToPath(toString(value));
23317    }
23318
23319    /**
23320     * A `baseRest` alias which can be replaced with `identity` by module
23321     * replacement plugins.
23322     *
23323     * @private
23324     * @type {Function}
23325     * @param {Function} func The function to apply a rest parameter to.
23326     * @returns {Function} Returns the new function.
23327     */
23328    var castRest = baseRest;
23329
23330    /**
23331     * Casts `array` to a slice if it's needed.
23332     *
23333     * @private
23334     * @param {Array} array The array to inspect.
23335     * @param {number} start The start position.
23336     * @param {number} [end=array.length] The end position.
23337     * @returns {Array} Returns the cast slice.
23338     */
23339    function castSlice(array, start, end) {
23340      var length = array.length;
23341      end = end === undefined ? length : end;
23342      return (!start && end >= length) ? array : baseSlice(array, start, end);
23343    }
23344
23345    /**
23346     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
23347     *
23348     * @private
23349     * @param {number|Object} id The timer id or timeout object of the timer to clear.
23350     */
23351    var clearTimeout = ctxClearTimeout || function(id) {
23352      return root.clearTimeout(id);
23353    };
23354
23355    /**
23356     * Creates a clone of  `buffer`.
23357     *
23358     * @private
23359     * @param {Buffer} buffer The buffer to clone.
23360     * @param {boolean} [isDeep] Specify a deep clone.
23361     * @returns {Buffer} Returns the cloned buffer.
23362     */
23363    function cloneBuffer(buffer, isDeep) {
23364      if (isDeep) {
23365        return buffer.slice();
23366      }
23367      var length = buffer.length,
23368          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
23369
23370      buffer.copy(result);
23371      return result;
23372    }
23373
23374    /**
23375     * Creates a clone of `arrayBuffer`.
23376     *
23377     * @private
23378     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
23379     * @returns {ArrayBuffer} Returns the cloned array buffer.
23380     */
23381    function cloneArrayBuffer(arrayBuffer) {
23382      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
23383      new Uint8Array(result).set(new Uint8Array(arrayBuffer));
23384      return result;
23385    }
23386
23387    /**
23388     * Creates a clone of `dataView`.
23389     *
23390     * @private
23391     * @param {Object} dataView The data view to clone.
23392     * @param {boolean} [isDeep] Specify a deep clone.
23393     * @returns {Object} Returns the cloned data view.
23394     */
23395    function cloneDataView(dataView, isDeep) {
23396      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
23397      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
23398    }
23399
23400    /**
23401     * Creates a clone of `regexp`.
23402     *
23403     * @private
23404     * @param {Object} regexp The regexp to clone.
23405     * @returns {Object} Returns the cloned regexp.
23406     */
23407    function cloneRegExp(regexp) {
23408      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
23409      result.lastIndex = regexp.lastIndex;
23410      return result;
23411    }
23412
23413    /**
23414     * Creates a clone of the `symbol` object.
23415     *
23416     * @private
23417     * @param {Object} symbol The symbol object to clone.
23418     * @returns {Object} Returns the cloned symbol object.
23419     */
23420    function cloneSymbol(symbol) {
23421      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
23422    }
23423
23424    /**
23425     * Creates a clone of `typedArray`.
23426     *
23427     * @private
23428     * @param {Object} typedArray The typed array to clone.
23429     * @param {boolean} [isDeep] Specify a deep clone.
23430     * @returns {Object} Returns the cloned typed array.
23431     */
23432    function cloneTypedArray(typedArray, isDeep) {
23433      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
23434      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
23435    }
23436
23437    /**
23438     * Compares values to sort them in ascending order.
23439     *
23440     * @private
23441     * @param {*} value The value to compare.
23442     * @param {*} other The other value to compare.
23443     * @returns {number} Returns the sort order indicator for `value`.
23444     */
23445    function compareAscending(value, other) {
23446      if (value !== other) {
23447        var valIsDefined = value !== undefined,
23448            valIsNull = value === null,
23449            valIsReflexive = value === value,
23450            valIsSymbol = isSymbol(value);
23451
23452        var othIsDefined = other !== undefined,
23453            othIsNull = other === null,
23454            othIsReflexive = other === other,
23455            othIsSymbol = isSymbol(other);
23456
23457        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
23458            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
23459            (valIsNull && othIsDefined && othIsReflexive) ||
23460            (!valIsDefined && othIsReflexive) ||
23461            !valIsReflexive) {
23462          return 1;
23463        }
23464        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
23465            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
23466            (othIsNull && valIsDefined && valIsReflexive) ||
23467            (!othIsDefined && valIsReflexive) ||
23468            !othIsReflexive) {
23469          return -1;
23470        }
23471      }
23472      return 0;
23473    }
23474
23475    /**
23476     * Used by `_.orderBy` to compare multiple properties of a value to another
23477     * and stable sort them.
23478     *
23479     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
23480     * specify an order of "desc" for descending or "asc" for ascending sort order
23481     * of corresponding values.
23482     *
23483     * @private
23484     * @param {Object} object The object to compare.
23485     * @param {Object} other The other object to compare.
23486     * @param {boolean[]|string[]} orders The order to sort by for each property.
23487     * @returns {number} Returns the sort order indicator for `object`.
23488     */
23489    function compareMultiple(object, other, orders) {
23490      var index = -1,
23491          objCriteria = object.criteria,
23492          othCriteria = other.criteria,
23493          length = objCriteria.length,
23494          ordersLength = orders.length;
23495
23496      while (++index < length) {
23497        var result = compareAscending(objCriteria[index], othCriteria[index]);
23498        if (result) {
23499          if (index >= ordersLength) {
23500            return result;
23501          }
23502          var order = orders[index];
23503          return result * (order == 'desc' ? -1 : 1);
23504        }
23505      }
23506      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
23507      // that causes it, under certain circumstances, to provide the same value for
23508      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
23509      // for more details.
23510      //
23511      // This also ensures a stable sort in V8 and other engines.
23512      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
23513      return object.index - other.index;
23514    }
23515
23516    /**
23517     * Creates an array that is the composition of partially applied arguments,
23518     * placeholders, and provided arguments into a single array of arguments.
23519     *
23520     * @private
23521     * @param {Array} args The provided arguments.
23522     * @param {Array} partials The arguments to prepend to those provided.
23523     * @param {Array} holders The `partials` placeholder indexes.
23524     * @params {boolean} [isCurried] Specify composing for a curried function.
23525     * @returns {Array} Returns the new array of composed arguments.
23526     */
23527    function composeArgs(args, partials, holders, isCurried) {
23528      var argsIndex = -1,
23529          argsLength = args.length,
23530          holdersLength = holders.length,
23531          leftIndex = -1,
23532          leftLength = partials.length,
23533          rangeLength = nativeMax(argsLength - holdersLength, 0),
23534          result = Array(leftLength + rangeLength),
23535          isUncurried = !isCurried;
23536
23537      while (++leftIndex < leftLength) {
23538        result[leftIndex] = partials[leftIndex];
23539      }
23540      while (++argsIndex < holdersLength) {
23541        if (isUncurried || argsIndex < argsLength) {
23542          result[holders[argsIndex]] = args[argsIndex];
23543        }
23544      }
23545      while (rangeLength--) {
23546        result[leftIndex++] = args[argsIndex++];
23547      }
23548      return result;
23549    }
23550
23551    /**
23552     * This function is like `composeArgs` except that the arguments composition
23553     * is tailored for `_.partialRight`.
23554     *
23555     * @private
23556     * @param {Array} args The provided arguments.
23557     * @param {Array} partials The arguments to append to those provided.
23558     * @param {Array} holders The `partials` placeholder indexes.
23559     * @params {boolean} [isCurried] Specify composing for a curried function.
23560     * @returns {Array} Returns the new array of composed arguments.
23561     */
23562    function composeArgsRight(args, partials, holders, isCurried) {
23563      var argsIndex = -1,
23564          argsLength = args.length,
23565          holdersIndex = -1,
23566          holdersLength = holders.length,
23567          rightIndex = -1,
23568          rightLength = partials.length,
23569          rangeLength = nativeMax(argsLength - holdersLength, 0),
23570          result = Array(rangeLength + rightLength),
23571          isUncurried = !isCurried;
23572
23573      while (++argsIndex < rangeLength) {
23574        result[argsIndex] = args[argsIndex];
23575      }
23576      var offset = argsIndex;
23577      while (++rightIndex < rightLength) {
23578        result[offset + rightIndex] = partials[rightIndex];
23579      }
23580      while (++holdersIndex < holdersLength) {
23581        if (isUncurried || argsIndex < argsLength) {
23582          result[offset + holders[holdersIndex]] = args[argsIndex++];
23583        }
23584      }
23585      return result;
23586    }
23587
23588    /**
23589     * Copies the values of `source` to `array`.
23590     *
23591     * @private
23592     * @param {Array} source The array to copy values from.
23593     * @param {Array} [array=[]] The array to copy values to.
23594     * @returns {Array} Returns `array`.
23595     */
23596    function copyArray(source, array) {
23597      var index = -1,
23598          length = source.length;
23599
23600      array || (array = Array(length));
23601      while (++index < length) {
23602        array[index] = source[index];
23603      }
23604      return array;
23605    }
23606
23607    /**
23608     * Copies properties of `source` to `object`.
23609     *
23610     * @private
23611     * @param {Object} source The object to copy properties from.
23612     * @param {Array} props The property identifiers to copy.
23613     * @param {Object} [object={}] The object to copy properties to.
23614     * @param {Function} [customizer] The function to customize copied values.
23615     * @returns {Object} Returns `object`.
23616     */
23617    function copyObject(source, props, object, customizer) {
23618      var isNew = !object;
23619      object || (object = {});
23620
23621      var index = -1,
23622          length = props.length;
23623
23624      while (++index < length) {
23625        var key = props[index];
23626
23627        var newValue = customizer
23628          ? customizer(object[key], source[key], key, object, source)
23629          : undefined;
23630
23631        if (newValue === undefined) {
23632          newValue = source[key];
23633        }
23634        if (isNew) {
23635          baseAssignValue(object, key, newValue);
23636        } else {
23637          assignValue(object, key, newValue);
23638        }
23639      }
23640      return object;
23641    }
23642
23643    /**
23644     * Copies own symbols of `source` to `object`.
23645     *
23646     * @private
23647     * @param {Object} source The object to copy symbols from.
23648     * @param {Object} [object={}] The object to copy symbols to.
23649     * @returns {Object} Returns `object`.
23650     */
23651    function copySymbols(source, object) {
23652      return copyObject(source, getSymbols(source), object);
23653    }
23654
23655    /**
23656     * Copies own and inherited symbols of `source` to `object`.
23657     *
23658     * @private
23659     * @param {Object} source The object to copy symbols from.
23660     * @param {Object} [object={}] The object to copy symbols to.
23661     * @returns {Object} Returns `object`.
23662     */
23663    function copySymbolsIn(source, object) {
23664      return copyObject(source, getSymbolsIn(source), object);
23665    }
23666
23667    /**
23668     * Creates a function like `_.groupBy`.
23669     *
23670     * @private
23671     * @param {Function} setter The function to set accumulator values.
23672     * @param {Function} [initializer] The accumulator object initializer.
23673     * @returns {Function} Returns the new aggregator function.
23674     */
23675    function createAggregator(setter, initializer) {
23676      return function(collection, iteratee) {
23677        var func = isArray(collection) ? arrayAggregator : baseAggregator,
23678            accumulator = initializer ? initializer() : {};
23679
23680        return func(collection, setter, getIteratee(iteratee, 2), accumulator);
23681      };
23682    }
23683
23684    /**
23685     * Creates a function like `_.assign`.
23686     *
23687     * @private
23688     * @param {Function} assigner The function to assign values.
23689     * @returns {Function} Returns the new assigner function.
23690     */
23691    function createAssigner(assigner) {
23692      return baseRest(function(object, sources) {
23693        var index = -1,
23694            length = sources.length,
23695            customizer = length > 1 ? sources[length - 1] : undefined,
23696            guard = length > 2 ? sources[2] : undefined;
23697
23698        customizer = (assigner.length > 3 && typeof customizer == 'function')
23699          ? (length--, customizer)
23700          : undefined;
23701
23702        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
23703          customizer = length < 3 ? undefined : customizer;
23704          length = 1;
23705        }
23706        object = Object(object);
23707        while (++index < length) {
23708          var source = sources[index];
23709          if (source) {
23710            assigner(object, source, index, customizer);
23711          }
23712        }
23713        return object;
23714      });
23715    }
23716
23717    /**
23718     * Creates a `baseEach` or `baseEachRight` function.
23719     *
23720     * @private
23721     * @param {Function} eachFunc The function to iterate over a collection.
23722     * @param {boolean} [fromRight] Specify iterating from right to left.
23723     * @returns {Function} Returns the new base function.
23724     */
23725    function createBaseEach(eachFunc, fromRight) {
23726      return function(collection, iteratee) {
23727        if (collection == null) {
23728          return collection;
23729        }
23730        if (!isArrayLike(collection)) {
23731          return eachFunc(collection, iteratee);
23732        }
23733        var length = collection.length,
23734            index = fromRight ? length : -1,
23735            iterable = Object(collection);
23736
23737        while ((fromRight ? index-- : ++index < length)) {
23738          if (iteratee(iterable[index], index, iterable) === false) {
23739            break;
23740          }
23741        }
23742        return collection;
23743      };
23744    }
23745
23746    /**
23747     * Creates a base function for methods like `_.forIn` and `_.forOwn`.
23748     *
23749     * @private
23750     * @param {boolean} [fromRight] Specify iterating from right to left.
23751     * @returns {Function} Returns the new base function.
23752     */
23753    function createBaseFor(fromRight) {
23754      return function(object, iteratee, keysFunc) {
23755        var index = -1,
23756            iterable = Object(object),
23757            props = keysFunc(object),
23758            length = props.length;
23759
23760        while (length--) {
23761          var key = props[fromRight ? length : ++index];
23762          if (iteratee(iterable[key], key, iterable) === false) {
23763            break;
23764          }
23765        }
23766        return object;
23767      };
23768    }
23769
23770    /**
23771     * Creates a function that wraps `func` to invoke it with the optional `this`
23772     * binding of `thisArg`.
23773     *
23774     * @private
23775     * @param {Function} func The function to wrap.
23776     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
23777     * @param {*} [thisArg] The `this` binding of `func`.
23778     * @returns {Function} Returns the new wrapped function.
23779     */
23780    function createBind(func, bitmask, thisArg) {
23781      var isBind = bitmask & WRAP_BIND_FLAG,
23782          Ctor = createCtor(func);
23783
23784      function wrapper() {
23785        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
23786        return fn.apply(isBind ? thisArg : this, arguments);
23787      }
23788      return wrapper;
23789    }
23790
23791    /**
23792     * Creates a function like `_.lowerFirst`.
23793     *
23794     * @private
23795     * @param {string} methodName The name of the `String` case method to use.
23796     * @returns {Function} Returns the new case function.
23797     */
23798    function createCaseFirst(methodName) {
23799      return function(string) {
23800        string = toString(string);
23801
23802        var strSymbols = hasUnicode(string)
23803          ? stringToArray(string)
23804          : undefined;
23805
23806        var chr = strSymbols
23807          ? strSymbols[0]
23808          : string.charAt(0);
23809
23810        var trailing = strSymbols
23811          ? castSlice(strSymbols, 1).join('')
23812          : string.slice(1);
23813
23814        return chr[methodName]() + trailing;
23815      };
23816    }
23817
23818    /**
23819     * Creates a function like `_.camelCase`.
23820     *
23821     * @private
23822     * @param {Function} callback The function to combine each word.
23823     * @returns {Function} Returns the new compounder function.
23824     */
23825    function createCompounder(callback) {
23826      return function(string) {
23827        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
23828      };
23829    }
23830
23831    /**
23832     * Creates a function that produces an instance of `Ctor` regardless of
23833     * whether it was invoked as part of a `new` expression or by `call` or `apply`.
23834     *
23835     * @private
23836     * @param {Function} Ctor The constructor to wrap.
23837     * @returns {Function} Returns the new wrapped function.
23838     */
23839    function createCtor(Ctor) {
23840      return function() {
23841        // Use a `switch` statement to work with class constructors. See
23842        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
23843        // for more details.
23844        var args = arguments;
23845        switch (args.length) {
23846          case 0: return new Ctor;
23847          case 1: return new Ctor(args[0]);
23848          case 2: return new Ctor(args[0], args[1]);
23849          case 3: return new Ctor(args[0], args[1], args[2]);
23850          case 4: return new Ctor(args[0], args[1], args[2], args[3]);
23851          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
23852          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
23853          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
23854        }
23855        var thisBinding = baseCreate(Ctor.prototype),
23856            result = Ctor.apply(thisBinding, args);
23857
23858        // Mimic the constructor's `return` behavior.
23859        // See https://es5.github.io/#x13.2.2 for more details.
23860        return isObject(result) ? result : thisBinding;
23861      };
23862    }
23863
23864    /**
23865     * Creates a function that wraps `func` to enable currying.
23866     *
23867     * @private
23868     * @param {Function} func The function to wrap.
23869     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
23870     * @param {number} arity The arity of `func`.
23871     * @returns {Function} Returns the new wrapped function.
23872     */
23873    function createCurry(func, bitmask, arity) {
23874      var Ctor = createCtor(func);
23875
23876      function wrapper() {
23877        var length = arguments.length,
23878            args = Array(length),
23879            index = length,
23880            placeholder = getHolder(wrapper);
23881
23882        while (index--) {
23883          args[index] = arguments[index];
23884        }
23885        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
23886          ? []
23887          : replaceHolders(args, placeholder);
23888
23889        length -= holders.length;
23890        if (length < arity) {
23891          return createRecurry(
23892            func, bitmask, createHybrid, wrapper.placeholder, undefined,
23893            args, holders, undefined, undefined, arity - length);
23894        }
23895        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
23896        return apply(fn, this, args);
23897      }
23898      return wrapper;
23899    }
23900
23901    /**
23902     * Creates a `_.find` or `_.findLast` function.
23903     *
23904     * @private
23905     * @param {Function} findIndexFunc The function to find the collection index.
23906     * @returns {Function} Returns the new find function.
23907     */
23908    function createFind(findIndexFunc) {
23909      return function(collection, predicate, fromIndex) {
23910        var iterable = Object(collection);
23911        if (!isArrayLike(collection)) {
23912          var iteratee = getIteratee(predicate, 3);
23913          collection = keys(collection);
23914          predicate = function(key) { return iteratee(iterable[key], key, iterable); };
23915        }
23916        var index = findIndexFunc(collection, predicate, fromIndex);
23917        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
23918      };
23919    }
23920
23921    /**
23922     * Creates a `_.flow` or `_.flowRight` function.
23923     *
23924     * @private
23925     * @param {boolean} [fromRight] Specify iterating from right to left.
23926     * @returns {Function} Returns the new flow function.
23927     */
23928    function createFlow(fromRight) {
23929      return flatRest(function(funcs) {
23930        var length = funcs.length,
23931            index = length,
23932            prereq = LodashWrapper.prototype.thru;
23933
23934        if (fromRight) {
23935          funcs.reverse();
23936        }
23937        while (index--) {
23938          var func = funcs[index];
23939          if (typeof func != 'function') {
23940            throw new TypeError(FUNC_ERROR_TEXT);
23941          }
23942          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
23943            var wrapper = new LodashWrapper([], true);
23944          }
23945        }
23946        index = wrapper ? index : length;
23947        while (++index < length) {
23948          func = funcs[index];
23949
23950          var funcName = getFuncName(func),
23951              data = funcName == 'wrapper' ? getData(func) : undefined;
23952
23953          if (data && isLaziable(data[0]) &&
23954                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
23955                !data[4].length && data[9] == 1
23956              ) {
23957            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
23958          } else {
23959            wrapper = (func.length == 1 && isLaziable(func))
23960              ? wrapper[funcName]()
23961              : wrapper.thru(func);
23962          }
23963        }
23964        return function() {
23965          var args = arguments,
23966              value = args[0];
23967
23968          if (wrapper && args.length == 1 && isArray(value)) {
23969            return wrapper.plant(value).value();
23970          }
23971          var index = 0,
23972              result = length ? funcs[index].apply(this, args) : value;
23973
23974          while (++index < length) {
23975            result = funcs[index].call(this, result);
23976          }
23977          return result;
23978        };
23979      });
23980    }
23981
23982    /**
23983     * Creates a function that wraps `func` to invoke it with optional `this`
23984     * binding of `thisArg`, partial application, and currying.
23985     *
23986     * @private
23987     * @param {Function|string} func The function or method name to wrap.
23988     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
23989     * @param {*} [thisArg] The `this` binding of `func`.
23990     * @param {Array} [partials] The arguments to prepend to those provided to
23991     *  the new function.
23992     * @param {Array} [holders] The `partials` placeholder indexes.
23993     * @param {Array} [partialsRight] The arguments to append to those provided
23994     *  to the new function.
23995     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
23996     * @param {Array} [argPos] The argument positions of the new function.
23997     * @param {number} [ary] The arity cap of `func`.
23998     * @param {number} [arity] The arity of `func`.
23999     * @returns {Function} Returns the new wrapped function.
24000     */
24001    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
24002      var isAry = bitmask & WRAP_ARY_FLAG,
24003          isBind = bitmask & WRAP_BIND_FLAG,
24004          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
24005          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
24006          isFlip = bitmask & WRAP_FLIP_FLAG,
24007          Ctor = isBindKey ? undefined : createCtor(func);
24008
24009      function wrapper() {
24010        var length = arguments.length,
24011            args = Array(length),
24012            index = length;
24013
24014        while (index--) {
24015          args[index] = arguments[index];
24016        }
24017        if (isCurried) {
24018          var placeholder = getHolder(wrapper),
24019              holdersCount = countHolders(args, placeholder);
24020        }
24021        if (partials) {
24022          args = composeArgs(args, partials, holders, isCurried);
24023        }
24024        if (partialsRight) {
24025          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
24026        }
24027        length -= holdersCount;
24028        if (isCurried && length < arity) {
24029          var newHolders = replaceHolders(args, placeholder);
24030          return createRecurry(
24031            func, bitmask, createHybrid, wrapper.placeholder, thisArg,
24032            args, newHolders, argPos, ary, arity - length
24033          );
24034        }
24035        var thisBinding = isBind ? thisArg : this,
24036            fn = isBindKey ? thisBinding[func] : func;
24037
24038        length = args.length;
24039        if (argPos) {
24040          args = reorder(args, argPos);
24041        } else if (isFlip && length > 1) {
24042          args.reverse();
24043        }
24044        if (isAry && ary < length) {
24045          args.length = ary;
24046        }
24047        if (this && this !== root && this instanceof wrapper) {
24048          fn = Ctor || createCtor(fn);
24049        }
24050        return fn.apply(thisBinding, args);
24051      }
24052      return wrapper;
24053    }
24054
24055    /**
24056     * Creates a function like `_.invertBy`.
24057     *
24058     * @private
24059     * @param {Function} setter The function to set accumulator values.
24060     * @param {Function} toIteratee The function to resolve iteratees.
24061     * @returns {Function} Returns the new inverter function.
24062     */
24063    function createInverter(setter, toIteratee) {
24064      return function(object, iteratee) {
24065        return baseInverter(object, setter, toIteratee(iteratee), {});
24066      };
24067    }
24068
24069    /**
24070     * Creates a function that performs a mathematical operation on two values.
24071     *
24072     * @private
24073     * @param {Function} operator The function to perform the operation.
24074     * @param {number} [defaultValue] The value used for `undefined` arguments.
24075     * @returns {Function} Returns the new mathematical operation function.
24076     */
24077    function createMathOperation(operator, defaultValue) {
24078      return function(value, other) {
24079        var result;
24080        if (value === undefined && other === undefined) {
24081          return defaultValue;
24082        }
24083        if (value !== undefined) {
24084          result = value;
24085        }
24086        if (other !== undefined) {
24087          if (result === undefined) {
24088            return other;
24089          }
24090          if (typeof value == 'string' || typeof other == 'string') {
24091            value = baseToString(value);
24092            other = baseToString(other);
24093          } else {
24094            value = baseToNumber(value);
24095            other = baseToNumber(other);
24096          }
24097          result = operator(value, other);
24098        }
24099        return result;
24100      };
24101    }
24102
24103    /**
24104     * Creates a function like `_.over`.
24105     *
24106     * @private
24107     * @param {Function} arrayFunc The function to iterate over iteratees.
24108     * @returns {Function} Returns the new over function.
24109     */
24110    function createOver(arrayFunc) {
24111      return flatRest(function(iteratees) {
24112        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
24113        return baseRest(function(args) {
24114          var thisArg = this;
24115          return arrayFunc(iteratees, function(iteratee) {
24116            return apply(iteratee, thisArg, args);
24117          });
24118        });
24119      });
24120    }
24121
24122    /**
24123     * Creates the padding for `string` based on `length`. The `chars` string
24124     * is truncated if the number of characters exceeds `length`.
24125     *
24126     * @private
24127     * @param {number} length The padding length.
24128     * @param {string} [chars=' '] The string used as padding.
24129     * @returns {string} Returns the padding for `string`.
24130     */
24131    function createPadding(length, chars) {
24132      chars = chars === undefined ? ' ' : baseToString(chars);
24133
24134      var charsLength = chars.length;
24135      if (charsLength < 2) {
24136        return charsLength ? baseRepeat(chars, length) : chars;
24137      }
24138      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
24139      return hasUnicode(chars)
24140        ? castSlice(stringToArray(result), 0, length).join('')
24141        : result.slice(0, length);
24142    }
24143
24144    /**
24145     * Creates a function that wraps `func` to invoke it with the `this` binding
24146     * of `thisArg` and `partials` prepended to the arguments it receives.
24147     *
24148     * @private
24149     * @param {Function} func The function to wrap.
24150     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
24151     * @param {*} thisArg The `this` binding of `func`.
24152     * @param {Array} partials The arguments to prepend to those provided to
24153     *  the new function.
24154     * @returns {Function} Returns the new wrapped function.
24155     */
24156    function createPartial(func, bitmask, thisArg, partials) {
24157      var isBind = bitmask & WRAP_BIND_FLAG,
24158          Ctor = createCtor(func);
24159
24160      function wrapper() {
24161        var argsIndex = -1,
24162            argsLength = arguments.length,
24163            leftIndex = -1,
24164            leftLength = partials.length,
24165            args = Array(leftLength + argsLength),
24166            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
24167
24168        while (++leftIndex < leftLength) {
24169          args[leftIndex] = partials[leftIndex];
24170        }
24171        while (argsLength--) {
24172          args[leftIndex++] = arguments[++argsIndex];
24173        }
24174        return apply(fn, isBind ? thisArg : this, args);
24175      }
24176      return wrapper;
24177    }
24178
24179    /**
24180     * Creates a `_.range` or `_.rangeRight` function.
24181     *
24182     * @private
24183     * @param {boolean} [fromRight] Specify iterating from right to left.
24184     * @returns {Function} Returns the new range function.
24185     */
24186    function createRange(fromRight) {
24187      return function(start, end, step) {
24188        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
24189          end = step = undefined;
24190        }
24191        // Ensure the sign of `-0` is preserved.
24192        start = toFinite(start);
24193        if (end === undefined) {
24194          end = start;
24195          start = 0;
24196        } else {
24197          end = toFinite(end);
24198        }
24199        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
24200        return baseRange(start, end, step, fromRight);
24201      };
24202    }
24203
24204    /**
24205     * Creates a function that performs a relational operation on two values.
24206     *
24207     * @private
24208     * @param {Function} operator The function to perform the operation.
24209     * @returns {Function} Returns the new relational operation function.
24210     */
24211    function createRelationalOperation(operator) {
24212      return function(value, other) {
24213        if (!(typeof value == 'string' && typeof other == 'string')) {
24214          value = toNumber(value);
24215          other = toNumber(other);
24216        }
24217        return operator(value, other);
24218      };
24219    }
24220
24221    /**
24222     * Creates a function that wraps `func` to continue currying.
24223     *
24224     * @private
24225     * @param {Function} func The function to wrap.
24226     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
24227     * @param {Function} wrapFunc The function to create the `func` wrapper.
24228     * @param {*} placeholder The placeholder value.
24229     * @param {*} [thisArg] The `this` binding of `func`.
24230     * @param {Array} [partials] The arguments to prepend to those provided to
24231     *  the new function.
24232     * @param {Array} [holders] The `partials` placeholder indexes.
24233     * @param {Array} [argPos] The argument positions of the new function.
24234     * @param {number} [ary] The arity cap of `func`.
24235     * @param {number} [arity] The arity of `func`.
24236     * @returns {Function} Returns the new wrapped function.
24237     */
24238    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
24239      var isCurry = bitmask & WRAP_CURRY_FLAG,
24240          newHolders = isCurry ? holders : undefined,
24241          newHoldersRight = isCurry ? undefined : holders,
24242          newPartials = isCurry ? partials : undefined,
24243          newPartialsRight = isCurry ? undefined : partials;
24244
24245      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
24246      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
24247
24248      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
24249        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
24250      }
24251      var newData = [
24252        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
24253        newHoldersRight, argPos, ary, arity
24254      ];
24255
24256      var result = wrapFunc.apply(undefined, newData);
24257      if (isLaziable(func)) {
24258        setData(result, newData);
24259      }
24260      result.placeholder = placeholder;
24261      return setWrapToString(result, func, bitmask);
24262    }
24263
24264    /**
24265     * Creates a function like `_.round`.
24266     *
24267     * @private
24268     * @param {string} methodName The name of the `Math` method to use when rounding.
24269     * @returns {Function} Returns the new round function.
24270     */
24271    function createRound(methodName) {
24272      var func = Math[methodName];
24273      return function(number, precision) {
24274        number = toNumber(number);
24275        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
24276        if (precision && nativeIsFinite(number)) {
24277          // Shift with exponential notation to avoid floating-point issues.
24278          // See [MDN](https://mdn.io/round#Examples) for more details.
24279          var pair = (toString(number) + 'e').split('e'),
24280              value = func(pair[0] + 'e' + (+pair[1] + precision));
24281
24282          pair = (toString(value) + 'e').split('e');
24283          return +(pair[0] + 'e' + (+pair[1] - precision));
24284        }
24285        return func(number);
24286      };
24287    }
24288
24289    /**
24290     * Creates a set object of `values`.
24291     *
24292     * @private
24293     * @param {Array} values The values to add to the set.
24294     * @returns {Object} Returns the new set.
24295     */
24296    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
24297      return new Set(values);
24298    };
24299
24300    /**
24301     * Creates a `_.toPairs` or `_.toPairsIn` function.
24302     *
24303     * @private
24304     * @param {Function} keysFunc The function to get the keys of a given object.
24305     * @returns {Function} Returns the new pairs function.
24306     */
24307    function createToPairs(keysFunc) {
24308      return function(object) {
24309        var tag = getTag(object);
24310        if (tag == mapTag) {
24311          return mapToArray(object);
24312        }
24313        if (tag == setTag) {
24314          return setToPairs(object);
24315        }
24316        return baseToPairs(object, keysFunc(object));
24317      };
24318    }
24319
24320    /**
24321     * Creates a function that either curries or invokes `func` with optional
24322     * `this` binding and partially applied arguments.
24323     *
24324     * @private
24325     * @param {Function|string} func The function or method name to wrap.
24326     * @param {number} bitmask The bitmask flags.
24327     *    1 - `_.bind`
24328     *    2 - `_.bindKey`
24329     *    4 - `_.curry` or `_.curryRight` of a bound function
24330     *    8 - `_.curry`
24331     *   16 - `_.curryRight`
24332     *   32 - `_.partial`
24333     *   64 - `_.partialRight`
24334     *  128 - `_.rearg`
24335     *  256 - `_.ary`
24336     *  512 - `_.flip`
24337     * @param {*} [thisArg] The `this` binding of `func`.
24338     * @param {Array} [partials] The arguments to be partially applied.
24339     * @param {Array} [holders] The `partials` placeholder indexes.
24340     * @param {Array} [argPos] The argument positions of the new function.
24341     * @param {number} [ary] The arity cap of `func`.
24342     * @param {number} [arity] The arity of `func`.
24343     * @returns {Function} Returns the new wrapped function.
24344     */
24345    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
24346      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
24347      if (!isBindKey && typeof func != 'function') {
24348        throw new TypeError(FUNC_ERROR_TEXT);
24349      }
24350      var length = partials ? partials.length : 0;
24351      if (!length) {
24352        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
24353        partials = holders = undefined;
24354      }
24355      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
24356      arity = arity === undefined ? arity : toInteger(arity);
24357      length -= holders ? holders.length : 0;
24358
24359      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
24360        var partialsRight = partials,
24361            holdersRight = holders;
24362
24363        partials = holders = undefined;
24364      }
24365      var data = isBindKey ? undefined : getData(func);
24366
24367      var newData = [
24368        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
24369        argPos, ary, arity
24370      ];
24371
24372      if (data) {
24373        mergeData(newData, data);
24374      }
24375      func = newData[0];
24376      bitmask = newData[1];
24377      thisArg = newData[2];
24378      partials = newData[3];
24379      holders = newData[4];
24380      arity = newData[9] = newData[9] === undefined
24381        ? (isBindKey ? 0 : func.length)
24382        : nativeMax(newData[9] - length, 0);
24383
24384      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
24385        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
24386      }
24387      if (!bitmask || bitmask == WRAP_BIND_FLAG) {
24388        var result = createBind(func, bitmask, thisArg);
24389      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
24390        result = createCurry(func, bitmask, arity);
24391      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
24392        result = createPartial(func, bitmask, thisArg, partials);
24393      } else {
24394        result = createHybrid.apply(undefined, newData);
24395      }
24396      var setter = data ? baseSetData : setData;
24397      return setWrapToString(setter(result, newData), func, bitmask);
24398    }
24399
24400    /**
24401     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
24402     * of source objects to the destination object for all destination properties
24403     * that resolve to `undefined`.
24404     *
24405     * @private
24406     * @param {*} objValue The destination value.
24407     * @param {*} srcValue The source value.
24408     * @param {string} key The key of the property to assign.
24409     * @param {Object} object The parent object of `objValue`.
24410     * @returns {*} Returns the value to assign.
24411     */
24412    function customDefaultsAssignIn(objValue, srcValue, key, object) {
24413      if (objValue === undefined ||
24414          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
24415        return srcValue;
24416      }
24417      return objValue;
24418    }
24419
24420    /**
24421     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
24422     * objects into destination objects that are passed thru.
24423     *
24424     * @private
24425     * @param {*} objValue The destination value.
24426     * @param {*} srcValue The source value.
24427     * @param {string} key The key of the property to merge.
24428     * @param {Object} object The parent object of `objValue`.
24429     * @param {Object} source The parent object of `srcValue`.
24430     * @param {Object} [stack] Tracks traversed source values and their merged
24431     *  counterparts.
24432     * @returns {*} Returns the value to assign.
24433     */
24434    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
24435      if (isObject(objValue) && isObject(srcValue)) {
24436        // Recursively merge objects and arrays (susceptible to call stack limits).
24437        stack.set(srcValue, objValue);
24438        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
24439        stack['delete'](srcValue);
24440      }
24441      return objValue;
24442    }
24443
24444    /**
24445     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
24446     * objects.
24447     *
24448     * @private
24449     * @param {*} value The value to inspect.
24450     * @param {string} key The key of the property to inspect.
24451     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
24452     */
24453    function customOmitClone(value) {
24454      return isPlainObject(value) ? undefined : value;
24455    }
24456
24457    /**
24458     * A specialized version of `baseIsEqualDeep` for arrays with support for
24459     * partial deep comparisons.
24460     *
24461     * @private
24462     * @param {Array} array The array to compare.
24463     * @param {Array} other The other array to compare.
24464     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
24465     * @param {Function} customizer The function to customize comparisons.
24466     * @param {Function} equalFunc The function to determine equivalents of values.
24467     * @param {Object} stack Tracks traversed `array` and `other` objects.
24468     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
24469     */
24470    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
24471      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
24472          arrLength = array.length,
24473          othLength = other.length;
24474
24475      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
24476        return false;
24477      }
24478      // Check that cyclic values are equal.
24479      var arrStacked = stack.get(array);
24480      var othStacked = stack.get(other);
24481      if (arrStacked && othStacked) {
24482        return arrStacked == other && othStacked == array;
24483      }
24484      var index = -1,
24485          result = true,
24486          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
24487
24488      stack.set(array, other);
24489      stack.set(other, array);
24490
24491      // Ignore non-index properties.
24492      while (++index < arrLength) {
24493        var arrValue = array[index],
24494            othValue = other[index];
24495
24496        if (customizer) {
24497          var compared = isPartial
24498            ? customizer(othValue, arrValue, index, other, array, stack)
24499            : customizer(arrValue, othValue, index, array, other, stack);
24500        }
24501        if (compared !== undefined) {
24502          if (compared) {
24503            continue;
24504          }
24505          result = false;
24506          break;
24507        }
24508        // Recursively compare arrays (susceptible to call stack limits).
24509        if (seen) {
24510          if (!arraySome(other, function(othValue, othIndex) {
24511                if (!cacheHas(seen, othIndex) &&
24512                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
24513                  return seen.push(othIndex);
24514                }
24515              })) {
24516            result = false;
24517            break;
24518          }
24519        } else if (!(
24520              arrValue === othValue ||
24521                equalFunc(arrValue, othValue, bitmask, customizer, stack)
24522            )) {
24523          result = false;
24524          break;
24525        }
24526      }
24527      stack['delete'](array);
24528      stack['delete'](other);
24529      return result;
24530    }
24531
24532    /**
24533     * A specialized version of `baseIsEqualDeep` for comparing objects of
24534     * the same `toStringTag`.
24535     *
24536     * **Note:** This function only supports comparing values with tags of
24537     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
24538     *
24539     * @private
24540     * @param {Object} object The object to compare.
24541     * @param {Object} other The other object to compare.
24542     * @param {string} tag The `toStringTag` of the objects to compare.
24543     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
24544     * @param {Function} customizer The function to customize comparisons.
24545     * @param {Function} equalFunc The function to determine equivalents of values.
24546     * @param {Object} stack Tracks traversed `object` and `other` objects.
24547     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
24548     */
24549    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
24550      switch (tag) {
24551        case dataViewTag:
24552          if ((object.byteLength != other.byteLength) ||
24553              (object.byteOffset != other.byteOffset)) {
24554            return false;
24555          }
24556          object = object.buffer;
24557          other = other.buffer;
24558
24559        case arrayBufferTag:
24560          if ((object.byteLength != other.byteLength) ||
24561              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
24562            return false;
24563          }
24564          return true;
24565
24566        case boolTag:
24567        case dateTag:
24568        case numberTag:
24569          // Coerce booleans to `1` or `0` and dates to milliseconds.
24570          // Invalid dates are coerced to `NaN`.
24571          return eq(+object, +other);
24572
24573        case errorTag:
24574          return object.name == other.name && object.message == other.message;
24575
24576        case regexpTag:
24577        case stringTag:
24578          // Coerce regexes to strings and treat strings, primitives and objects,
24579          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
24580          // for more details.
24581          return object == (other + '');
24582
24583        case mapTag:
24584          var convert = mapToArray;
24585
24586        case setTag:
24587          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
24588          convert || (convert = setToArray);
24589
24590          if (object.size != other.size && !isPartial) {
24591            return false;
24592          }
24593          // Assume cyclic values are equal.
24594          var stacked = stack.get(object);
24595          if (stacked) {
24596            return stacked == other;
24597          }
24598          bitmask |= COMPARE_UNORDERED_FLAG;
24599
24600          // Recursively compare objects (susceptible to call stack limits).
24601          stack.set(object, other);
24602          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
24603          stack['delete'](object);
24604          return result;
24605
24606        case symbolTag:
24607          if (symbolValueOf) {
24608            return symbolValueOf.call(object) == symbolValueOf.call(other);
24609          }
24610      }
24611      return false;
24612    }
24613
24614    /**
24615     * A specialized version of `baseIsEqualDeep` for objects with support for
24616     * partial deep comparisons.
24617     *
24618     * @private
24619     * @param {Object} object The object to compare.
24620     * @param {Object} other The other object to compare.
24621     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
24622     * @param {Function} customizer The function to customize comparisons.
24623     * @param {Function} equalFunc The function to determine equivalents of values.
24624     * @param {Object} stack Tracks traversed `object` and `other` objects.
24625     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
24626     */
24627    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
24628      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
24629          objProps = getAllKeys(object),
24630          objLength = objProps.length,
24631          othProps = getAllKeys(other),
24632          othLength = othProps.length;
24633
24634      if (objLength != othLength && !isPartial) {
24635        return false;
24636      }
24637      var index = objLength;
24638      while (index--) {
24639        var key = objProps[index];
24640        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
24641          return false;
24642        }
24643      }
24644      // Check that cyclic values are equal.
24645      var objStacked = stack.get(object);
24646      var othStacked = stack.get(other);
24647      if (objStacked && othStacked) {
24648        return objStacked == other && othStacked == object;
24649      }
24650      var result = true;
24651      stack.set(object, other);
24652      stack.set(other, object);
24653
24654      var skipCtor = isPartial;
24655      while (++index < objLength) {
24656        key = objProps[index];
24657        var objValue = object[key],
24658            othValue = other[key];
24659
24660        if (customizer) {
24661          var compared = isPartial
24662            ? customizer(othValue, objValue, key, other, object, stack)
24663            : customizer(objValue, othValue, key, object, other, stack);
24664        }
24665        // Recursively compare objects (susceptible to call stack limits).
24666        if (!(compared === undefined
24667              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
24668              : compared
24669            )) {
24670          result = false;
24671          break;
24672        }
24673        skipCtor || (skipCtor = key == 'constructor');
24674      }
24675      if (result && !skipCtor) {
24676        var objCtor = object.constructor,
24677            othCtor = other.constructor;
24678
24679        // Non `Object` object instances with different constructors are not equal.
24680        if (objCtor != othCtor &&
24681            ('constructor' in object && 'constructor' in other) &&
24682            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
24683              typeof othCtor == 'function' && othCtor instanceof othCtor)) {
24684          result = false;
24685        }
24686      }
24687      stack['delete'](object);
24688      stack['delete'](other);
24689      return result;
24690    }
24691
24692    /**
24693     * A specialized version of `baseRest` which flattens the rest array.
24694     *
24695     * @private
24696     * @param {Function} func The function to apply a rest parameter to.
24697     * @returns {Function} Returns the new function.
24698     */
24699    function flatRest(func) {
24700      return setToString(overRest(func, undefined, flatten), func + '');
24701    }
24702
24703    /**
24704     * Creates an array of own enumerable property names and symbols of `object`.
24705     *
24706     * @private
24707     * @param {Object} object The object to query.
24708     * @returns {Array} Returns the array of property names and symbols.
24709     */
24710    function getAllKeys(object) {
24711      return baseGetAllKeys(object, keys, getSymbols);
24712    }
24713
24714    /**
24715     * Creates an array of own and inherited enumerable property names and
24716     * symbols of `object`.
24717     *
24718     * @private
24719     * @param {Object} object The object to query.
24720     * @returns {Array} Returns the array of property names and symbols.
24721     */
24722    function getAllKeysIn(object) {
24723      return baseGetAllKeys(object, keysIn, getSymbolsIn);
24724    }
24725
24726    /**
24727     * Gets metadata for `func`.
24728     *
24729     * @private
24730     * @param {Function} func The function to query.
24731     * @returns {*} Returns the metadata for `func`.
24732     */
24733    var getData = !metaMap ? noop : function(func) {
24734      return metaMap.get(func);
24735    };
24736
24737    /**
24738     * Gets the name of `func`.
24739     *
24740     * @private
24741     * @param {Function} func The function to query.
24742     * @returns {string} Returns the function name.
24743     */
24744    function getFuncName(func) {
24745      var result = (func.name + ''),
24746          array = realNames[result],
24747          length = hasOwnProperty.call(realNames, result) ? array.length : 0;
24748
24749      while (length--) {
24750        var data = array[length],
24751            otherFunc = data.func;
24752        if (otherFunc == null || otherFunc == func) {
24753          return data.name;
24754        }
24755      }
24756      return result;
24757    }
24758
24759    /**
24760     * Gets the argument placeholder value for `func`.
24761     *
24762     * @private
24763     * @param {Function} func The function to inspect.
24764     * @returns {*} Returns the placeholder value.
24765     */
24766    function getHolder(func) {
24767      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
24768      return object.placeholder;
24769    }
24770
24771    /**
24772     * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
24773     * this function returns the custom method, otherwise it returns `baseIteratee`.
24774     * If arguments are provided, the chosen function is invoked with them and
24775     * its result is returned.
24776     *
24777     * @private
24778     * @param {*} [value] The value to convert to an iteratee.
24779     * @param {number} [arity] The arity of the created iteratee.
24780     * @returns {Function} Returns the chosen function or its result.
24781     */
24782    function getIteratee() {
24783      var result = lodash.iteratee || iteratee;
24784      result = result === iteratee ? baseIteratee : result;
24785      return arguments.length ? result(arguments[0], arguments[1]) : result;
24786    }
24787
24788    /**
24789     * Gets the data for `map`.
24790     *
24791     * @private
24792     * @param {Object} map The map to query.
24793     * @param {string} key The reference key.
24794     * @returns {*} Returns the map data.
24795     */
24796    function getMapData(map, key) {
24797      var data = map.__data__;
24798      return isKeyable(key)
24799        ? data[typeof key == 'string' ? 'string' : 'hash']
24800        : data.map;
24801    }
24802
24803    /**
24804     * Gets the property names, values, and compare flags of `object`.
24805     *
24806     * @private
24807     * @param {Object} object The object to query.
24808     * @returns {Array} Returns the match data of `object`.
24809     */
24810    function getMatchData(object) {
24811      var result = keys(object),
24812          length = result.length;
24813
24814      while (length--) {
24815        var key = result[length],
24816            value = object[key];
24817
24818        result[length] = [key, value, isStrictComparable(value)];
24819      }
24820      return result;
24821    }
24822
24823    /**
24824     * Gets the native function at `key` of `object`.
24825     *
24826     * @private
24827     * @param {Object} object The object to query.
24828     * @param {string} key The key of the method to get.
24829     * @returns {*} Returns the function if it's native, else `undefined`.
24830     */
24831    function getNative(object, key) {
24832      var value = getValue(object, key);
24833      return baseIsNative(value) ? value : undefined;
24834    }
24835
24836    /**
24837     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
24838     *
24839     * @private
24840     * @param {*} value The value to query.
24841     * @returns {string} Returns the raw `toStringTag`.
24842     */
24843    function getRawTag(value) {
24844      var isOwn = hasOwnProperty.call(value, symToStringTag),
24845          tag = value[symToStringTag];
24846
24847      try {
24848        value[symToStringTag] = undefined;
24849        var unmasked = true;
24850      } catch (e) {}
24851
24852      var result = nativeObjectToString.call(value);
24853      if (unmasked) {
24854        if (isOwn) {
24855          value[symToStringTag] = tag;
24856        } else {
24857          delete value[symToStringTag];
24858        }
24859      }
24860      return result;
24861    }
24862
24863    /**
24864     * Creates an array of the own enumerable symbols of `object`.
24865     *
24866     * @private
24867     * @param {Object} object The object to query.
24868     * @returns {Array} Returns the array of symbols.
24869     */
24870    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
24871      if (object == null) {
24872        return [];
24873      }
24874      object = Object(object);
24875      return arrayFilter(nativeGetSymbols(object), function(symbol) {
24876        return propertyIsEnumerable.call(object, symbol);
24877      });
24878    };
24879
24880    /**
24881     * Creates an array of the own and inherited enumerable symbols of `object`.
24882     *
24883     * @private
24884     * @param {Object} object The object to query.
24885     * @returns {Array} Returns the array of symbols.
24886     */
24887    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
24888      var result = [];
24889      while (object) {
24890        arrayPush(result, getSymbols(object));
24891        object = getPrototype(object);
24892      }
24893      return result;
24894    };
24895
24896    /**
24897     * Gets the `toStringTag` of `value`.
24898     *
24899     * @private
24900     * @param {*} value The value to query.
24901     * @returns {string} Returns the `toStringTag`.
24902     */
24903    var getTag = baseGetTag;
24904
24905    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
24906    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
24907        (Map && getTag(new Map) != mapTag) ||
24908        (Promise && getTag(Promise.resolve()) != promiseTag) ||
24909        (Set && getTag(new Set) != setTag) ||
24910        (WeakMap && getTag(new WeakMap) != weakMapTag)) {
24911      getTag = function(value) {
24912        var result = baseGetTag(value),
24913            Ctor = result == objectTag ? value.constructor : undefined,
24914            ctorString = Ctor ? toSource(Ctor) : '';
24915
24916        if (ctorString) {
24917          switch (ctorString) {
24918            case dataViewCtorString: return dataViewTag;
24919            case mapCtorString: return mapTag;
24920            case promiseCtorString: return promiseTag;
24921            case setCtorString: return setTag;
24922            case weakMapCtorString: return weakMapTag;
24923          }
24924        }
24925        return result;
24926      };
24927    }
24928
24929    /**
24930     * Gets the view, applying any `transforms` to the `start` and `end` positions.
24931     *
24932     * @private
24933     * @param {number} start The start of the view.
24934     * @param {number} end The end of the view.
24935     * @param {Array} transforms The transformations to apply to the view.
24936     * @returns {Object} Returns an object containing the `start` and `end`
24937     *  positions of the view.
24938     */
24939    function getView(start, end, transforms) {
24940      var index = -1,
24941          length = transforms.length;
24942
24943      while (++index < length) {
24944        var data = transforms[index],
24945            size = data.size;
24946
24947        switch (data.type) {
24948          case 'drop':      start += size; break;
24949          case 'dropRight': end -= size; break;
24950          case 'take':      end = nativeMin(end, start + size); break;
24951          case 'takeRight': start = nativeMax(start, end - size); break;
24952        }
24953      }
24954      return { 'start': start, 'end': end };
24955    }
24956
24957    /**
24958     * Extracts wrapper details from the `source` body comment.
24959     *
24960     * @private
24961     * @param {string} source The source to inspect.
24962     * @returns {Array} Returns the wrapper details.
24963     */
24964    function getWrapDetails(source) {
24965      var match = source.match(reWrapDetails);
24966      return match ? match[1].split(reSplitDetails) : [];
24967    }
24968
24969    /**
24970     * Checks if `path` exists on `object`.
24971     *
24972     * @private
24973     * @param {Object} object The object to query.
24974     * @param {Array|string} path The path to check.
24975     * @param {Function} hasFunc The function to check properties.
24976     * @returns {boolean} Returns `true` if `path` exists, else `false`.
24977     */
24978    function hasPath(object, path, hasFunc) {
24979      path = castPath(path, object);
24980
24981      var index = -1,
24982          length = path.length,
24983          result = false;
24984
24985      while (++index < length) {
24986        var key = toKey(path[index]);
24987        if (!(result = object != null && hasFunc(object, key))) {
24988          break;
24989        }
24990        object = object[key];
24991      }
24992      if (result || ++index != length) {
24993        return result;
24994      }
24995      length = object == null ? 0 : object.length;
24996      return !!length && isLength(length) && isIndex(key, length) &&
24997        (isArray(object) || isArguments(object));
24998    }
24999
25000    /**
25001     * Initializes an array clone.
25002     *
25003     * @private
25004     * @param {Array} array The array to clone.
25005     * @returns {Array} Returns the initialized clone.
25006     */
25007    function initCloneArray(array) {
25008      var length = array.length,
25009          result = new array.constructor(length);
25010
25011      // Add properties assigned by `RegExp#exec`.
25012      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
25013        result.index = array.index;
25014        result.input = array.input;
25015      }
25016      return result;
25017    }
25018
25019    /**
25020     * Initializes an object clone.
25021     *
25022     * @private
25023     * @param {Object} object The object to clone.
25024     * @returns {Object} Returns the initialized clone.
25025     */
25026    function initCloneObject(object) {
25027      return (typeof object.constructor == 'function' && !isPrototype(object))
25028        ? baseCreate(getPrototype(object))
25029        : {};
25030    }
25031
25032    /**
25033     * Initializes an object clone based on its `toStringTag`.
25034     *
25035     * **Note:** This function only supports cloning values with tags of
25036     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
25037     *
25038     * @private
25039     * @param {Object} object The object to clone.
25040     * @param {string} tag The `toStringTag` of the object to clone.
25041     * @param {boolean} [isDeep] Specify a deep clone.
25042     * @returns {Object} Returns the initialized clone.
25043     */
25044    function initCloneByTag(object, tag, isDeep) {
25045      var Ctor = object.constructor;
25046      switch (tag) {
25047        case arrayBufferTag:
25048          return cloneArrayBuffer(object);
25049
25050        case boolTag:
25051        case dateTag:
25052          return new Ctor(+object);
25053
25054        case dataViewTag:
25055          return cloneDataView(object, isDeep);
25056
25057        case float32Tag: case float64Tag:
25058        case int8Tag: case int16Tag: case int32Tag:
25059        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
25060          return cloneTypedArray(object, isDeep);
25061
25062        case mapTag:
25063          return new Ctor;
25064
25065        case numberTag:
25066        case stringTag:
25067          return new Ctor(object);
25068
25069        case regexpTag:
25070          return cloneRegExp(object);
25071
25072        case setTag:
25073          return new Ctor;
25074
25075        case symbolTag:
25076          return cloneSymbol(object);
25077      }
25078    }
25079
25080    /**
25081     * Inserts wrapper `details` in a comment at the top of the `source` body.
25082     *
25083     * @private
25084     * @param {string} source The source to modify.
25085     * @returns {Array} details The details to insert.
25086     * @returns {string} Returns the modified source.
25087     */
25088    function insertWrapDetails(source, details) {
25089      var length = details.length;
25090      if (!length) {
25091        return source;
25092      }
25093      var lastIndex = length - 1;
25094      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
25095      details = details.join(length > 2 ? ', ' : ' ');
25096      return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
25097    }
25098
25099    /**
25100     * Checks if `value` is a flattenable `arguments` object or array.
25101     *
25102     * @private
25103     * @param {*} value The value to check.
25104     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
25105     */
25106    function isFlattenable(value) {
25107      return isArray(value) || isArguments(value) ||
25108        !!(spreadableSymbol && value && value[spreadableSymbol]);
25109    }
25110
25111    /**
25112     * Checks if `value` is a valid array-like index.
25113     *
25114     * @private
25115     * @param {*} value The value to check.
25116     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
25117     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
25118     */
25119    function isIndex(value, length) {
25120      var type = typeof value;
25121      length = length == null ? MAX_SAFE_INTEGER : length;
25122
25123      return !!length &&
25124        (type == 'number' ||
25125          (type != 'symbol' && reIsUint.test(value))) &&
25126            (value > -1 && value % 1 == 0 && value < length);
25127    }
25128
25129    /**
25130     * Checks if the given arguments are from an iteratee call.
25131     *
25132     * @private
25133     * @param {*} value The potential iteratee value argument.
25134     * @param {*} index The potential iteratee index or key argument.
25135     * @param {*} object The potential iteratee object argument.
25136     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
25137     *  else `false`.
25138     */
25139    function isIterateeCall(value, index, object) {
25140      if (!isObject(object)) {
25141        return false;
25142      }
25143      var type = typeof index;
25144      if (type == 'number'
25145            ? (isArrayLike(object) && isIndex(index, object.length))
25146            : (type == 'string' && index in object)
25147          ) {
25148        return eq(object[index], value);
25149      }
25150      return false;
25151    }
25152
25153    /**
25154     * Checks if `value` is a property name and not a property path.
25155     *
25156     * @private
25157     * @param {*} value The value to check.
25158     * @param {Object} [object] The object to query keys on.
25159     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
25160     */
25161    function isKey(value, object) {
25162      if (isArray(value)) {
25163        return false;
25164      }
25165      var type = typeof value;
25166      if (type == 'number' || type == 'symbol' || type == 'boolean' ||
25167          value == null || isSymbol(value)) {
25168        return true;
25169      }
25170      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
25171        (object != null && value in Object(object));
25172    }
25173
25174    /**
25175     * Checks if `value` is suitable for use as unique object key.
25176     *
25177     * @private
25178     * @param {*} value The value to check.
25179     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
25180     */
25181    function isKeyable(value) {
25182      var type = typeof value;
25183      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
25184        ? (value !== '__proto__')
25185        : (value === null);
25186    }
25187
25188    /**
25189     * Checks if `func` has a lazy counterpart.
25190     *
25191     * @private
25192     * @param {Function} func The function to check.
25193     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
25194     *  else `false`.
25195     */
25196    function isLaziable(func) {
25197      var funcName = getFuncName(func),
25198          other = lodash[funcName];
25199
25200      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
25201        return false;
25202      }
25203      if (func === other) {
25204        return true;
25205      }
25206      var data = getData(other);
25207      return !!data && func === data[0];
25208    }
25209
25210    /**
25211     * Checks if `func` has its source masked.
25212     *
25213     * @private
25214     * @param {Function} func The function to check.
25215     * @returns {boolean} Returns `true` if `func` is masked, else `false`.
25216     */
25217    function isMasked(func) {
25218      return !!maskSrcKey && (maskSrcKey in func);
25219    }
25220
25221    /**
25222     * Checks if `func` is capable of being masked.
25223     *
25224     * @private
25225     * @param {*} value The value to check.
25226     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
25227     */
25228    var isMaskable = coreJsData ? isFunction : stubFalse;
25229
25230    /**
25231     * Checks if `value` is likely a prototype object.
25232     *
25233     * @private
25234     * @param {*} value The value to check.
25235     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
25236     */
25237    function isPrototype(value) {
25238      var Ctor = value && value.constructor,
25239          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
25240
25241      return value === proto;
25242    }
25243
25244    /**
25245     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
25246     *
25247     * @private
25248     * @param {*} value The value to check.
25249     * @returns {boolean} Returns `true` if `value` if suitable for strict
25250     *  equality comparisons, else `false`.
25251     */
25252    function isStrictComparable(value) {
25253      return value === value && !isObject(value);
25254    }
25255
25256    /**
25257     * A specialized version of `matchesProperty` for source values suitable
25258     * for strict equality comparisons, i.e. `===`.
25259     *
25260     * @private
25261     * @param {string} key The key of the property to get.
25262     * @param {*} srcValue The value to match.
25263     * @returns {Function} Returns the new spec function.
25264     */
25265    function matchesStrictComparable(key, srcValue) {
25266      return function(object) {
25267        if (object == null) {
25268          return false;
25269        }
25270        return object[key] === srcValue &&
25271          (srcValue !== undefined || (key in Object(object)));
25272      };
25273    }
25274
25275    /**
25276     * A specialized version of `_.memoize` which clears the memoized function's
25277     * cache when it exceeds `MAX_MEMOIZE_SIZE`.
25278     *
25279     * @private
25280     * @param {Function} func The function to have its output memoized.
25281     * @returns {Function} Returns the new memoized function.
25282     */
25283    function memoizeCapped(func) {
25284      var result = memoize(func, function(key) {
25285        if (cache.size === MAX_MEMOIZE_SIZE) {
25286          cache.clear();
25287        }
25288        return key;
25289      });
25290
25291      var cache = result.cache;
25292      return result;
25293    }
25294
25295    /**
25296     * Merges the function metadata of `source` into `data`.
25297     *
25298     * Merging metadata reduces the number of wrappers used to invoke a function.
25299     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
25300     * may be applied regardless of execution order. Methods like `_.ary` and
25301     * `_.rearg` modify function arguments, making the order in which they are
25302     * executed important, preventing the merging of metadata. However, we make
25303     * an exception for a safe combined case where curried functions have `_.ary`
25304     * and or `_.rearg` applied.
25305     *
25306     * @private
25307     * @param {Array} data The destination metadata.
25308     * @param {Array} source The source metadata.
25309     * @returns {Array} Returns `data`.
25310     */
25311    function mergeData(data, source) {
25312      var bitmask = data[1],
25313          srcBitmask = source[1],
25314          newBitmask = bitmask | srcBitmask,
25315          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
25316
25317      var isCombo =
25318        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
25319        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
25320        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
25321
25322      // Exit early if metadata can't be merged.
25323      if (!(isCommon || isCombo)) {
25324        return data;
25325      }
25326      // Use source `thisArg` if available.
25327      if (srcBitmask & WRAP_BIND_FLAG) {
25328        data[2] = source[2];
25329        // Set when currying a bound function.
25330        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
25331      }
25332      // Compose partial arguments.
25333      var value = source[3];
25334      if (value) {
25335        var partials = data[3];
25336        data[3] = partials ? composeArgs(partials, value, source[4]) : value;
25337        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
25338      }
25339      // Compose partial right arguments.
25340      value = source[5];
25341      if (value) {
25342        partials = data[5];
25343        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
25344        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
25345      }
25346      // Use source `argPos` if available.
25347      value = source[7];
25348      if (value) {
25349        data[7] = value;
25350      }
25351      // Use source `ary` if it's smaller.
25352      if (srcBitmask & WRAP_ARY_FLAG) {
25353        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
25354      }
25355      // Use source `arity` if one is not provided.
25356      if (data[9] == null) {
25357        data[9] = source[9];
25358      }
25359      // Use source `func` and merge bitmasks.
25360      data[0] = source[0];
25361      data[1] = newBitmask;
25362
25363      return data;
25364    }
25365
25366    /**
25367     * This function is like
25368     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
25369     * except that it includes inherited enumerable properties.
25370     *
25371     * @private
25372     * @param {Object} object The object to query.
25373     * @returns {Array} Returns the array of property names.
25374     */
25375    function nativeKeysIn(object) {
25376      var result = [];
25377      if (object != null) {
25378        for (var key in Object(object)) {
25379          result.push(key);
25380        }
25381      }
25382      return result;
25383    }
25384
25385    /**
25386     * Converts `value` to a string using `Object.prototype.toString`.
25387     *
25388     * @private
25389     * @param {*} value The value to convert.
25390     * @returns {string} Returns the converted string.
25391     */
25392    function objectToString(value) {
25393      return nativeObjectToString.call(value);
25394    }
25395
25396    /**
25397     * A specialized version of `baseRest` which transforms the rest array.
25398     *
25399     * @private
25400     * @param {Function} func The function to apply a rest parameter to.
25401     * @param {number} [start=func.length-1] The start position of the rest parameter.
25402     * @param {Function} transform The rest array transform.
25403     * @returns {Function} Returns the new function.
25404     */
25405    function overRest(func, start, transform) {
25406      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
25407      return function() {
25408        var args = arguments,
25409            index = -1,
25410            length = nativeMax(args.length - start, 0),
25411            array = Array(length);
25412
25413        while (++index < length) {
25414          array[index] = args[start + index];
25415        }
25416        index = -1;
25417        var otherArgs = Array(start + 1);
25418        while (++index < start) {
25419          otherArgs[index] = args[index];
25420        }
25421        otherArgs[start] = transform(array);
25422        return apply(func, this, otherArgs);
25423      };
25424    }
25425
25426    /**
25427     * Gets the parent value at `path` of `object`.
25428     *
25429     * @private
25430     * @param {Object} object The object to query.
25431     * @param {Array} path The path to get the parent value of.
25432     * @returns {*} Returns the parent value.
25433     */
25434    function parent(object, path) {
25435      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
25436    }
25437
25438    /**
25439     * Reorder `array` according to the specified indexes where the element at
25440     * the first index is assigned as the first element, the element at
25441     * the second index is assigned as the second element, and so on.
25442     *
25443     * @private
25444     * @param {Array} array The array to reorder.
25445     * @param {Array} indexes The arranged array indexes.
25446     * @returns {Array} Returns `array`.
25447     */
25448    function reorder(array, indexes) {
25449      var arrLength = array.length,
25450          length = nativeMin(indexes.length, arrLength),
25451          oldArray = copyArray(array);
25452
25453      while (length--) {
25454        var index = indexes[length];
25455        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
25456      }
25457      return array;
25458    }
25459
25460    /**
25461     * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
25462     *
25463     * @private
25464     * @param {Object} object The object to query.
25465     * @param {string} key The key of the property to get.
25466     * @returns {*} Returns the property value.
25467     */
25468    function safeGet(object, key) {
25469      if (key === 'constructor' && typeof object[key] === 'function') {
25470        return;
25471      }
25472
25473      if (key == '__proto__') {
25474        return;
25475      }
25476
25477      return object[key];
25478    }
25479
25480    /**
25481     * Sets metadata for `func`.
25482     *
25483     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
25484     * period of time, it will trip its breaker and transition to an identity
25485     * function to avoid garbage collection pauses in V8. See
25486     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
25487     * for more details.
25488     *
25489     * @private
25490     * @param {Function} func The function to associate metadata with.
25491     * @param {*} data The metadata.
25492     * @returns {Function} Returns `func`.
25493     */
25494    var setData = shortOut(baseSetData);
25495
25496    /**
25497     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
25498     *
25499     * @private
25500     * @param {Function} func The function to delay.
25501     * @param {number} wait The number of milliseconds to delay invocation.
25502     * @returns {number|Object} Returns the timer id or timeout object.
25503     */
25504    var setTimeout = ctxSetTimeout || function(func, wait) {
25505      return root.setTimeout(func, wait);
25506    };
25507
25508    /**
25509     * Sets the `toString` method of `func` to return `string`.
25510     *
25511     * @private
25512     * @param {Function} func The function to modify.
25513     * @param {Function} string The `toString` result.
25514     * @returns {Function} Returns `func`.
25515     */
25516    var setToString = shortOut(baseSetToString);
25517
25518    /**
25519     * Sets the `toString` method of `wrapper` to mimic the source of `reference`
25520     * with wrapper details in a comment at the top of the source body.
25521     *
25522     * @private
25523     * @param {Function} wrapper The function to modify.
25524     * @param {Function} reference The reference function.
25525     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
25526     * @returns {Function} Returns `wrapper`.
25527     */
25528    function setWrapToString(wrapper, reference, bitmask) {
25529      var source = (reference + '');
25530      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
25531    }
25532
25533    /**
25534     * Creates a function that'll short out and invoke `identity` instead
25535     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
25536     * milliseconds.
25537     *
25538     * @private
25539     * @param {Function} func The function to restrict.
25540     * @returns {Function} Returns the new shortable function.
25541     */
25542    function shortOut(func) {
25543      var count = 0,
25544          lastCalled = 0;
25545
25546      return function() {
25547        var stamp = nativeNow(),
25548            remaining = HOT_SPAN - (stamp - lastCalled);
25549
25550        lastCalled = stamp;
25551        if (remaining > 0) {
25552          if (++count >= HOT_COUNT) {
25553            return arguments[0];
25554          }
25555        } else {
25556          count = 0;
25557        }
25558        return func.apply(undefined, arguments);
25559      };
25560    }
25561
25562    /**
25563     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
25564     *
25565     * @private
25566     * @param {Array} array The array to shuffle.
25567     * @param {number} [size=array.length] The size of `array`.
25568     * @returns {Array} Returns `array`.
25569     */
25570    function shuffleSelf(array, size) {
25571      var index = -1,
25572          length = array.length,
25573          lastIndex = length - 1;
25574
25575      size = size === undefined ? length : size;
25576      while (++index < size) {
25577        var rand = baseRandom(index, lastIndex),
25578            value = array[rand];
25579
25580        array[rand] = array[index];
25581        array[index] = value;
25582      }
25583      array.length = size;
25584      return array;
25585    }
25586
25587    /**
25588     * Converts `string` to a property path array.
25589     *
25590     * @private
25591     * @param {string} string The string to convert.
25592     * @returns {Array} Returns the property path array.
25593     */
25594    var stringToPath = memoizeCapped(function(string) {
25595      var result = [];
25596      if (string.charCodeAt(0) === 46 /* . */) {
25597        result.push('');
25598      }
25599      string.replace(rePropName, function(match, number, quote, subString) {
25600        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
25601      });
25602      return result;
25603    });
25604
25605    /**
25606     * Converts `value` to a string key if it's not a string or symbol.
25607     *
25608     * @private
25609     * @param {*} value The value to inspect.
25610     * @returns {string|symbol} Returns the key.
25611     */
25612    function toKey(value) {
25613      if (typeof value == 'string' || isSymbol(value)) {
25614        return value;
25615      }
25616      var result = (value + '');
25617      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
25618    }
25619
25620    /**
25621     * Converts `func` to its source code.
25622     *
25623     * @private
25624     * @param {Function} func The function to convert.
25625     * @returns {string} Returns the source code.
25626     */
25627    function toSource(func) {
25628      if (func != null) {
25629        try {
25630          return funcToString.call(func);
25631        } catch (e) {}
25632        try {
25633          return (func + '');
25634        } catch (e) {}
25635      }
25636      return '';
25637    }
25638
25639    /**
25640     * Updates wrapper `details` based on `bitmask` flags.
25641     *
25642     * @private
25643     * @returns {Array} details The details to modify.
25644     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
25645     * @returns {Array} Returns `details`.
25646     */
25647    function updateWrapDetails(details, bitmask) {
25648      arrayEach(wrapFlags, function(pair) {
25649        var value = '_.' + pair[0];
25650        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
25651          details.push(value);
25652        }
25653      });
25654      return details.sort();
25655    }
25656
25657    /**
25658     * Creates a clone of `wrapper`.
25659     *
25660     * @private
25661     * @param {Object} wrapper The wrapper to clone.
25662     * @returns {Object} Returns the cloned wrapper.
25663     */
25664    function wrapperClone(wrapper) {
25665      if (wrapper instanceof LazyWrapper) {
25666        return wrapper.clone();
25667      }
25668      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
25669      result.__actions__ = copyArray(wrapper.__actions__);
25670      result.__index__  = wrapper.__index__;
25671      result.__values__ = wrapper.__values__;
25672      return result;
25673    }
25674
25675    /*------------------------------------------------------------------------*/
25676
25677    /**
25678     * Creates an array of elements split into groups the length of `size`.
25679     * If `array` can't be split evenly, the final chunk will be the remaining
25680     * elements.
25681     *
25682     * @static
25683     * @memberOf _
25684     * @since 3.0.0
25685     * @category Array
25686     * @param {Array} array The array to process.
25687     * @param {number} [size=1] The length of each chunk
25688     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
25689     * @returns {Array} Returns the new array of chunks.
25690     * @example
25691     *
25692     * _.chunk(['a', 'b', 'c', 'd'], 2);
25693     * // => [['a', 'b'], ['c', 'd']]
25694     *
25695     * _.chunk(['a', 'b', 'c', 'd'], 3);
25696     * // => [['a', 'b', 'c'], ['d']]
25697     */
25698    function chunk(array, size, guard) {
25699      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
25700        size = 1;
25701      } else {
25702        size = nativeMax(toInteger(size), 0);
25703      }
25704      var length = array == null ? 0 : array.length;
25705      if (!length || size < 1) {
25706        return [];
25707      }
25708      var index = 0,
25709          resIndex = 0,
25710          result = Array(nativeCeil(length / size));
25711
25712      while (index < length) {
25713        result[resIndex++] = baseSlice(array, index, (index += size));
25714      }
25715      return result;
25716    }
25717
25718    /**
25719     * Creates an array with all falsey values removed. The values `false`, `null`,
25720     * `0`, `""`, `undefined`, and `NaN` are falsey.
25721     *
25722     * @static
25723     * @memberOf _
25724     * @since 0.1.0
25725     * @category Array
25726     * @param {Array} array The array to compact.
25727     * @returns {Array} Returns the new array of filtered values.
25728     * @example
25729     *
25730     * _.compact([0, 1, false, 2, '', 3]);
25731     * // => [1, 2, 3]
25732     */
25733    function compact(array) {
25734      var index = -1,
25735          length = array == null ? 0 : array.length,
25736          resIndex = 0,
25737          result = [];
25738
25739      while (++index < length) {
25740        var value = array[index];
25741        if (value) {
25742          result[resIndex++] = value;
25743        }
25744      }
25745      return result;
25746    }
25747
25748    /**
25749     * Creates a new array concatenating `array` with any additional arrays
25750     * and/or values.
25751     *
25752     * @static
25753     * @memberOf _
25754     * @since 4.0.0
25755     * @category Array
25756     * @param {Array} array The array to concatenate.
25757     * @param {...*} [values] The values to concatenate.
25758     * @returns {Array} Returns the new concatenated array.
25759     * @example
25760     *
25761     * var array = [1];
25762     * var other = _.concat(array, 2, [3], [[4]]);
25763     *
25764     * console.log(other);
25765     * // => [1, 2, 3, [4]]
25766     *
25767     * console.log(array);
25768     * // => [1]
25769     */
25770    function concat() {
25771      var length = arguments.length;
25772      if (!length) {
25773        return [];
25774      }
25775      var args = Array(length - 1),
25776          array = arguments[0],
25777          index = length;
25778
25779      while (index--) {
25780        args[index - 1] = arguments[index];
25781      }
25782      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
25783    }
25784
25785    /**
25786     * Creates an array of `array` values not included in the other given arrays
25787     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
25788     * for equality comparisons. The order and references of result values are
25789     * determined by the first array.
25790     *
25791     * **Note:** Unlike `_.pullAll`, this method returns a new array.
25792     *
25793     * @static
25794     * @memberOf _
25795     * @since 0.1.0
25796     * @category Array
25797     * @param {Array} array The array to inspect.
25798     * @param {...Array} [values] The values to exclude.
25799     * @returns {Array} Returns the new array of filtered values.
25800     * @see _.without, _.xor
25801     * @example
25802     *
25803     * _.difference([2, 1], [2, 3]);
25804     * // => [1]
25805     */
25806    var difference = baseRest(function(array, values) {
25807      return isArrayLikeObject(array)
25808        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
25809        : [];
25810    });
25811
25812    /**
25813     * This method is like `_.difference` except that it accepts `iteratee` which
25814     * is invoked for each element of `array` and `values` to generate the criterion
25815     * by which they're compared. The order and references of result values are
25816     * determined by the first array. The iteratee is invoked with one argument:
25817     * (value).
25818     *
25819     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
25820     *
25821     * @static
25822     * @memberOf _
25823     * @since 4.0.0
25824     * @category Array
25825     * @param {Array} array The array to inspect.
25826     * @param {...Array} [values] The values to exclude.
25827     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
25828     * @returns {Array} Returns the new array of filtered values.
25829     * @example
25830     *
25831     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
25832     * // => [1.2]
25833     *
25834     * // The `_.property` iteratee shorthand.
25835     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
25836     * // => [{ 'x': 2 }]
25837     */
25838    var differenceBy = baseRest(function(array, values) {
25839      var iteratee = last(values);
25840      if (isArrayLikeObject(iteratee)) {
25841        iteratee = undefined;
25842      }
25843      return isArrayLikeObject(array)
25844        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))
25845        : [];
25846    });
25847
25848    /**
25849     * This method is like `_.difference` except that it accepts `comparator`
25850     * which is invoked to compare elements of `array` to `values`. The order and
25851     * references of result values are determined by the first array. The comparator
25852     * is invoked with two arguments: (arrVal, othVal).
25853     *
25854     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
25855     *
25856     * @static
25857     * @memberOf _
25858     * @since 4.0.0
25859     * @category Array
25860     * @param {Array} array The array to inspect.
25861     * @param {...Array} [values] The values to exclude.
25862     * @param {Function} [comparator] The comparator invoked per element.
25863     * @returns {Array} Returns the new array of filtered values.
25864     * @example
25865     *
25866     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
25867     *
25868     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
25869     * // => [{ 'x': 2, 'y': 1 }]
25870     */
25871    var differenceWith = baseRest(function(array, values) {
25872      var comparator = last(values);
25873      if (isArrayLikeObject(comparator)) {
25874        comparator = undefined;
25875      }
25876      return isArrayLikeObject(array)
25877        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
25878        : [];
25879    });
25880
25881    /**
25882     * Creates a slice of `array` with `n` elements dropped from the beginning.
25883     *
25884     * @static
25885     * @memberOf _
25886     * @since 0.5.0
25887     * @category Array
25888     * @param {Array} array The array to query.
25889     * @param {number} [n=1] The number of elements to drop.
25890     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
25891     * @returns {Array} Returns the slice of `array`.
25892     * @example
25893     *
25894     * _.drop([1, 2, 3]);
25895     * // => [2, 3]
25896     *
25897     * _.drop([1, 2, 3], 2);
25898     * // => [3]
25899     *
25900     * _.drop([1, 2, 3], 5);
25901     * // => []
25902     *
25903     * _.drop([1, 2, 3], 0);
25904     * // => [1, 2, 3]
25905     */
25906    function drop(array, n, guard) {
25907      var length = array == null ? 0 : array.length;
25908      if (!length) {
25909        return [];
25910      }
25911      n = (guard || n === undefined) ? 1 : toInteger(n);
25912      return baseSlice(array, n < 0 ? 0 : n, length);
25913    }
25914
25915    /**
25916     * Creates a slice of `array` with `n` elements dropped from the end.
25917     *
25918     * @static
25919     * @memberOf _
25920     * @since 3.0.0
25921     * @category Array
25922     * @param {Array} array The array to query.
25923     * @param {number} [n=1] The number of elements to drop.
25924     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
25925     * @returns {Array} Returns the slice of `array`.
25926     * @example
25927     *
25928     * _.dropRight([1, 2, 3]);
25929     * // => [1, 2]
25930     *
25931     * _.dropRight([1, 2, 3], 2);
25932     * // => [1]
25933     *
25934     * _.dropRight([1, 2, 3], 5);
25935     * // => []
25936     *
25937     * _.dropRight([1, 2, 3], 0);
25938     * // => [1, 2, 3]
25939     */
25940    function dropRight(array, n, guard) {
25941      var length = array == null ? 0 : array.length;
25942      if (!length) {
25943        return [];
25944      }
25945      n = (guard || n === undefined) ? 1 : toInteger(n);
25946      n = length - n;
25947      return baseSlice(array, 0, n < 0 ? 0 : n);
25948    }
25949
25950    /**
25951     * Creates a slice of `array` excluding elements dropped from the end.
25952     * Elements are dropped until `predicate` returns falsey. The predicate is
25953     * invoked with three arguments: (value, index, array).
25954     *
25955     * @static
25956     * @memberOf _
25957     * @since 3.0.0
25958     * @category Array
25959     * @param {Array} array The array to query.
25960     * @param {Function} [predicate=_.identity] The function invoked per iteration.
25961     * @returns {Array} Returns the slice of `array`.
25962     * @example
25963     *
25964     * var users = [
25965     *   { 'user': 'barney',  'active': true },
25966     *   { 'user': 'fred',    'active': false },
25967     *   { 'user': 'pebbles', 'active': false }
25968     * ];
25969     *
25970     * _.dropRightWhile(users, function(o) { return !o.active; });
25971     * // => objects for ['barney']
25972     *
25973     * // The `_.matches` iteratee shorthand.
25974     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
25975     * // => objects for ['barney', 'fred']
25976     *
25977     * // The `_.matchesProperty` iteratee shorthand.
25978     * _.dropRightWhile(users, ['active', false]);
25979     * // => objects for ['barney']
25980     *
25981     * // The `_.property` iteratee shorthand.
25982     * _.dropRightWhile(users, 'active');
25983     * // => objects for ['barney', 'fred', 'pebbles']
25984     */
25985    function dropRightWhile(array, predicate) {
25986      return (array && array.length)
25987        ? baseWhile(array, getIteratee(predicate, 3), true, true)
25988        : [];
25989    }
25990
25991    /**
25992     * Creates a slice of `array` excluding elements dropped from the beginning.
25993     * Elements are dropped until `predicate` returns falsey. The predicate is
25994     * invoked with three arguments: (value, index, array).
25995     *
25996     * @static
25997     * @memberOf _
25998     * @since 3.0.0
25999     * @category Array
26000     * @param {Array} array The array to query.
26001     * @param {Function} [predicate=_.identity] The function invoked per iteration.
26002     * @returns {Array} Returns the slice of `array`.
26003     * @example
26004     *
26005     * var users = [
26006     *   { 'user': 'barney',  'active': false },
26007     *   { 'user': 'fred',    'active': false },
26008     *   { 'user': 'pebbles', 'active': true }
26009     * ];
26010     *
26011     * _.dropWhile(users, function(o) { return !o.active; });
26012     * // => objects for ['pebbles']
26013     *
26014     * // The `_.matches` iteratee shorthand.
26015     * _.dropWhile(users, { 'user': 'barney', 'active': false });
26016     * // => objects for ['fred', 'pebbles']
26017     *
26018     * // The `_.matchesProperty` iteratee shorthand.
26019     * _.dropWhile(users, ['active', false]);
26020     * // => objects for ['pebbles']
26021     *
26022     * // The `_.property` iteratee shorthand.
26023     * _.dropWhile(users, 'active');
26024     * // => objects for ['barney', 'fred', 'pebbles']
26025     */
26026    function dropWhile(array, predicate) {
26027      return (array && array.length)
26028        ? baseWhile(array, getIteratee(predicate, 3), true)
26029        : [];
26030    }
26031
26032    /**
26033     * Fills elements of `array` with `value` from `start` up to, but not
26034     * including, `end`.
26035     *
26036     * **Note:** This method mutates `array`.
26037     *
26038     * @static
26039     * @memberOf _
26040     * @since 3.2.0
26041     * @category Array
26042     * @param {Array} array The array to fill.
26043     * @param {*} value The value to fill `array` with.
26044     * @param {number} [start=0] The start position.
26045     * @param {number} [end=array.length] The end position.
26046     * @returns {Array} Returns `array`.
26047     * @example
26048     *
26049     * var array = [1, 2, 3];
26050     *
26051     * _.fill(array, 'a');
26052     * console.log(array);
26053     * // => ['a', 'a', 'a']
26054     *
26055     * _.fill(Array(3), 2);
26056     * // => [2, 2, 2]
26057     *
26058     * _.fill([4, 6, 8, 10], '*', 1, 3);
26059     * // => [4, '*', '*', 10]
26060     */
26061    function fill(array, value, start, end) {
26062      var length = array == null ? 0 : array.length;
26063      if (!length) {
26064        return [];
26065      }
26066      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
26067        start = 0;
26068        end = length;
26069      }
26070      return baseFill(array, value, start, end);
26071    }
26072
26073    /**
26074     * This method is like `_.find` except that it returns the index of the first
26075     * element `predicate` returns truthy for instead of the element itself.
26076     *
26077     * @static
26078     * @memberOf _
26079     * @since 1.1.0
26080     * @category Array
26081     * @param {Array} array The array to inspect.
26082     * @param {Function} [predicate=_.identity] The function invoked per iteration.
26083     * @param {number} [fromIndex=0] The index to search from.
26084     * @returns {number} Returns the index of the found element, else `-1`.
26085     * @example
26086     *
26087     * var users = [
26088     *   { 'user': 'barney',  'active': false },
26089     *   { 'user': 'fred',    'active': false },
26090     *   { 'user': 'pebbles', 'active': true }
26091     * ];
26092     *
26093     * _.findIndex(users, function(o) { return o.user == 'barney'; });
26094     * // => 0
26095     *
26096     * // The `_.matches` iteratee shorthand.
26097     * _.findIndex(users, { 'user': 'fred', 'active': false });
26098     * // => 1
26099     *
26100     * // The `_.matchesProperty` iteratee shorthand.
26101     * _.findIndex(users, ['active', false]);
26102     * // => 0
26103     *
26104     * // The `_.property` iteratee shorthand.
26105     * _.findIndex(users, 'active');
26106     * // => 2
26107     */
26108    function findIndex(array, predicate, fromIndex) {
26109      var length = array == null ? 0 : array.length;
26110      if (!length) {
26111        return -1;
26112      }
26113      var index = fromIndex == null ? 0 : toInteger(fromIndex);
26114      if (index < 0) {
26115        index = nativeMax(length + index, 0);
26116      }
26117      return baseFindIndex(array, getIteratee(predicate, 3), index);
26118    }
26119
26120    /**
26121     * This method is like `_.findIndex` except that it iterates over elements
26122     * of `collection` from right to left.
26123     *
26124     * @static
26125     * @memberOf _
26126     * @since 2.0.0
26127     * @category Array
26128     * @param {Array} array The array to inspect.
26129     * @param {Function} [predicate=_.identity] The function invoked per iteration.
26130     * @param {number} [fromIndex=array.length-1] The index to search from.
26131     * @returns {number} Returns the index of the found element, else `-1`.
26132     * @example
26133     *
26134     * var users = [
26135     *   { 'user': 'barney',  'active': true },
26136     *   { 'user': 'fred',    'active': false },
26137     *   { 'user': 'pebbles', 'active': false }
26138     * ];
26139     *
26140     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
26141     * // => 2
26142     *
26143     * // The `_.matches` iteratee shorthand.
26144     * _.findLastIndex(users, { 'user': 'barney', 'active': true });
26145     * // => 0
26146     *
26147     * // The `_.matchesProperty` iteratee shorthand.
26148     * _.findLastIndex(users, ['active', false]);
26149     * // => 2
26150     *
26151     * // The `_.property` iteratee shorthand.
26152     * _.findLastIndex(users, 'active');
26153     * // => 0
26154     */
26155    function findLastIndex(array, predicate, fromIndex) {
26156      var length = array == null ? 0 : array.length;
26157      if (!length) {
26158        return -1;
26159      }
26160      var index = length - 1;
26161      if (fromIndex !== undefined) {
26162        index = toInteger(fromIndex);
26163        index = fromIndex < 0
26164          ? nativeMax(length + index, 0)
26165          : nativeMin(index, length - 1);
26166      }
26167      return baseFindIndex(array, getIteratee(predicate, 3), index, true);
26168    }
26169
26170    /**
26171     * Flattens `array` a single level deep.
26172     *
26173     * @static
26174     * @memberOf _
26175     * @since 0.1.0
26176     * @category Array
26177     * @param {Array} array The array to flatten.
26178     * @returns {Array} Returns the new flattened array.
26179     * @example
26180     *
26181     * _.flatten([1, [2, [3, [4]], 5]]);
26182     * // => [1, 2, [3, [4]], 5]
26183     */
26184    function flatten(array) {
26185      var length = array == null ? 0 : array.length;
26186      return length ? baseFlatten(array, 1) : [];
26187    }
26188
26189    /**
26190     * Recursively flattens `array`.
26191     *
26192     * @static
26193     * @memberOf _
26194     * @since 3.0.0
26195     * @category Array
26196     * @param {Array} array The array to flatten.
26197     * @returns {Array} Returns the new flattened array.
26198     * @example
26199     *
26200     * _.flattenDeep([1, [2, [3, [4]], 5]]);
26201     * // => [1, 2, 3, 4, 5]
26202     */
26203    function flattenDeep(array) {
26204      var length = array == null ? 0 : array.length;
26205      return length ? baseFlatten(array, INFINITY) : [];
26206    }
26207
26208    /**
26209     * Recursively flatten `array` up to `depth` times.
26210     *
26211     * @static
26212     * @memberOf _
26213     * @since 4.4.0
26214     * @category Array
26215     * @param {Array} array The array to flatten.
26216     * @param {number} [depth=1] The maximum recursion depth.
26217     * @returns {Array} Returns the new flattened array.
26218     * @example
26219     *
26220     * var array = [1, [2, [3, [4]], 5]];
26221     *
26222     * _.flattenDepth(array, 1);
26223     * // => [1, 2, [3, [4]], 5]
26224     *
26225     * _.flattenDepth(array, 2);
26226     * // => [1, 2, 3, [4], 5]
26227     */
26228    function flattenDepth(array, depth) {
26229      var length = array == null ? 0 : array.length;
26230      if (!length) {
26231        return [];
26232      }
26233      depth = depth === undefined ? 1 : toInteger(depth);
26234      return baseFlatten(array, depth);
26235    }
26236
26237    /**
26238     * The inverse of `_.toPairs`; this method returns an object composed
26239     * from key-value `pairs`.
26240     *
26241     * @static
26242     * @memberOf _
26243     * @since 4.0.0
26244     * @category Array
26245     * @param {Array} pairs The key-value pairs.
26246     * @returns {Object} Returns the new object.
26247     * @example
26248     *
26249     * _.fromPairs([['a', 1], ['b', 2]]);
26250     * // => { 'a': 1, 'b': 2 }
26251     */
26252    function fromPairs(pairs) {
26253      var index = -1,
26254          length = pairs == null ? 0 : pairs.length,
26255          result = {};
26256
26257      while (++index < length) {
26258        var pair = pairs[index];
26259        result[pair[0]] = pair[1];
26260      }
26261      return result;
26262    }
26263
26264    /**
26265     * Gets the first element of `array`.
26266     *
26267     * @static
26268     * @memberOf _
26269     * @since 0.1.0
26270     * @alias first
26271     * @category Array
26272     * @param {Array} array The array to query.
26273     * @returns {*} Returns the first element of `array`.
26274     * @example
26275     *
26276     * _.head([1, 2, 3]);
26277     * // => 1
26278     *
26279     * _.head([]);
26280     * // => undefined
26281     */
26282    function head(array) {
26283      return (array && array.length) ? array[0] : undefined;
26284    }
26285
26286    /**
26287     * Gets the index at which the first occurrence of `value` is found in `array`
26288     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
26289     * for equality comparisons. If `fromIndex` is negative, it's used as the
26290     * offset from the end of `array`.
26291     *
26292     * @static
26293     * @memberOf _
26294     * @since 0.1.0
26295     * @category Array
26296     * @param {Array} array The array to inspect.
26297     * @param {*} value The value to search for.
26298     * @param {number} [fromIndex=0] The index to search from.
26299     * @returns {number} Returns the index of the matched value, else `-1`.
26300     * @example
26301     *
26302     * _.indexOf([1, 2, 1, 2], 2);
26303     * // => 1
26304     *
26305     * // Search from the `fromIndex`.
26306     * _.indexOf([1, 2, 1, 2], 2, 2);
26307     * // => 3
26308     */
26309    function indexOf(array, value, fromIndex) {
26310      var length = array == null ? 0 : array.length;
26311      if (!length) {
26312        return -1;
26313      }
26314      var index = fromIndex == null ? 0 : toInteger(fromIndex);
26315      if (index < 0) {
26316        index = nativeMax(length + index, 0);
26317      }
26318      return baseIndexOf(array, value, index);
26319    }
26320
26321    /**
26322     * Gets all but the last element of `array`.
26323     *
26324     * @static
26325     * @memberOf _
26326     * @since 0.1.0
26327     * @category Array
26328     * @param {Array} array The array to query.
26329     * @returns {Array} Returns the slice of `array`.
26330     * @example
26331     *
26332     * _.initial([1, 2, 3]);
26333     * // => [1, 2]
26334     */
26335    function initial(array) {
26336      var length = array == null ? 0 : array.length;
26337      return length ? baseSlice(array, 0, -1) : [];
26338    }
26339
26340    /**
26341     * Creates an array of unique values that are included in all given arrays
26342     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
26343     * for equality comparisons. The order and references of result values are
26344     * determined by the first array.
26345     *
26346     * @static
26347     * @memberOf _
26348     * @since 0.1.0
26349     * @category Array
26350     * @param {...Array} [arrays] The arrays to inspect.
26351     * @returns {Array} Returns the new array of intersecting values.
26352     * @example
26353     *
26354     * _.intersection([2, 1], [2, 3]);
26355     * // => [2]
26356     */
26357    var intersection = baseRest(function(arrays) {
26358      var mapped = arrayMap(arrays, castArrayLikeObject);
26359      return (mapped.length && mapped[0] === arrays[0])
26360        ? baseIntersection(mapped)
26361        : [];
26362    });
26363
26364    /**
26365     * This method is like `_.intersection` except that it accepts `iteratee`
26366     * which is invoked for each element of each `arrays` to generate the criterion
26367     * by which they're compared. The order and references of result values are
26368     * determined by the first array. The iteratee is invoked with one argument:
26369     * (value).
26370     *
26371     * @static
26372     * @memberOf _
26373     * @since 4.0.0
26374     * @category Array
26375     * @param {...Array} [arrays] The arrays to inspect.
26376     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
26377     * @returns {Array} Returns the new array of intersecting values.
26378     * @example
26379     *
26380     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
26381     * // => [2.1]
26382     *
26383     * // The `_.property` iteratee shorthand.
26384     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
26385     * // => [{ 'x': 1 }]
26386     */
26387    var intersectionBy = baseRest(function(arrays) {
26388      var iteratee = last(arrays),
26389          mapped = arrayMap(arrays, castArrayLikeObject);
26390
26391      if (iteratee === last(mapped)) {
26392        iteratee = undefined;
26393      } else {
26394        mapped.pop();
26395      }
26396      return (mapped.length && mapped[0] === arrays[0])
26397        ? baseIntersection(mapped, getIteratee(iteratee, 2))
26398        : [];
26399    });
26400
26401    /**
26402     * This method is like `_.intersection` except that it accepts `comparator`
26403     * which is invoked to compare elements of `arrays`. The order and references
26404     * of result values are determined by the first array. The comparator is
26405     * invoked with two arguments: (arrVal, othVal).
26406     *
26407     * @static
26408     * @memberOf _
26409     * @since 4.0.0
26410     * @category Array
26411     * @param {...Array} [arrays] The arrays to inspect.
26412     * @param {Function} [comparator] The comparator invoked per element.
26413     * @returns {Array} Returns the new array of intersecting values.
26414     * @example
26415     *
26416     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
26417     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
26418     *
26419     * _.intersectionWith(objects, others, _.isEqual);
26420     * // => [{ 'x': 1, 'y': 2 }]
26421     */
26422    var intersectionWith = baseRest(function(arrays) {
26423      var comparator = last(arrays),
26424          mapped = arrayMap(arrays, castArrayLikeObject);
26425
26426      comparator = typeof comparator == 'function' ? comparator : undefined;
26427      if (comparator) {
26428        mapped.pop();
26429      }
26430      return (mapped.length && mapped[0] === arrays[0])
26431        ? baseIntersection(mapped, undefined, comparator)
26432        : [];
26433    });
26434
26435    /**
26436     * Converts all elements in `array` into a string separated by `separator`.
26437     *
26438     * @static
26439     * @memberOf _
26440     * @since 4.0.0
26441     * @category Array
26442     * @param {Array} array The array to convert.
26443     * @param {string} [separator=','] The element separator.
26444     * @returns {string} Returns the joined string.
26445     * @example
26446     *
26447     * _.join(['a', 'b', 'c'], '~');
26448     * // => 'a~b~c'
26449     */
26450    function join(array, separator) {
26451      return array == null ? '' : nativeJoin.call(array, separator);
26452    }
26453
26454    /**
26455     * Gets the last element of `array`.
26456     *
26457     * @static
26458     * @memberOf _
26459     * @since 0.1.0
26460     * @category Array
26461     * @param {Array} array The array to query.
26462     * @returns {*} Returns the last element of `array`.
26463     * @example
26464     *
26465     * _.last([1, 2, 3]);
26466     * // => 3
26467     */
26468    function last(array) {
26469      var length = array == null ? 0 : array.length;
26470      return length ? array[length - 1] : undefined;
26471    }
26472
26473    /**
26474     * This method is like `_.indexOf` except that it iterates over elements of
26475     * `array` from right to left.
26476     *
26477     * @static
26478     * @memberOf _
26479     * @since 0.1.0
26480     * @category Array
26481     * @param {Array} array The array to inspect.
26482     * @param {*} value The value to search for.
26483     * @param {number} [fromIndex=array.length-1] The index to search from.
26484     * @returns {number} Returns the index of the matched value, else `-1`.
26485     * @example
26486     *
26487     * _.lastIndexOf([1, 2, 1, 2], 2);
26488     * // => 3
26489     *
26490     * // Search from the `fromIndex`.
26491     * _.lastIndexOf([1, 2, 1, 2], 2, 2);
26492     * // => 1
26493     */
26494    function lastIndexOf(array, value, fromIndex) {
26495      var length = array == null ? 0 : array.length;
26496      if (!length) {
26497        return -1;
26498      }
26499      var index = length;
26500      if (fromIndex !== undefined) {
26501        index = toInteger(fromIndex);
26502        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
26503      }
26504      return value === value
26505        ? strictLastIndexOf(array, value, index)
26506        : baseFindIndex(array, baseIsNaN, index, true);
26507    }
26508
26509    /**
26510     * Gets the element at index `n` of `array`. If `n` is negative, the nth
26511     * element from the end is returned.
26512     *
26513     * @static
26514     * @memberOf _
26515     * @since 4.11.0
26516     * @category Array
26517     * @param {Array} array The array to query.
26518     * @param {number} [n=0] The index of the element to return.
26519     * @returns {*} Returns the nth element of `array`.
26520     * @example
26521     *
26522     * var array = ['a', 'b', 'c', 'd'];
26523     *
26524     * _.nth(array, 1);
26525     * // => 'b'
26526     *
26527     * _.nth(array, -2);
26528     * // => 'c';
26529     */
26530    function nth(array, n) {
26531      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
26532    }
26533
26534    /**
26535     * Removes all given values from `array` using
26536     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
26537     * for equality comparisons.
26538     *
26539     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
26540     * to remove elements from an array by predicate.
26541     *
26542     * @static
26543     * @memberOf _
26544     * @since 2.0.0
26545     * @category Array
26546     * @param {Array} array The array to modify.
26547     * @param {...*} [values] The values to remove.
26548     * @returns {Array} Returns `array`.
26549     * @example
26550     *
26551     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
26552     *
26553     * _.pull(array, 'a', 'c');
26554     * console.log(array);
26555     * // => ['b', 'b']
26556     */
26557    var pull = baseRest(pullAll);
26558
26559    /**
26560     * This method is like `_.pull` except that it accepts an array of values to remove.
26561     *
26562     * **Note:** Unlike `_.difference`, this method mutates `array`.
26563     *
26564     * @static
26565     * @memberOf _
26566     * @since 4.0.0
26567     * @category Array
26568     * @param {Array} array The array to modify.
26569     * @param {Array} values The values to remove.
26570     * @returns {Array} Returns `array`.
26571     * @example
26572     *
26573     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
26574     *
26575     * _.pullAll(array, ['a', 'c']);
26576     * console.log(array);
26577     * // => ['b', 'b']
26578     */
26579    function pullAll(array, values) {
26580      return (array && array.length && values && values.length)
26581        ? basePullAll(array, values)
26582        : array;
26583    }
26584
26585    /**
26586     * This method is like `_.pullAll` except that it accepts `iteratee` which is
26587     * invoked for each element of `array` and `values` to generate the criterion
26588     * by which they're compared. The iteratee is invoked with one argument: (value).
26589     *
26590     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
26591     *
26592     * @static
26593     * @memberOf _
26594     * @since 4.0.0
26595     * @category Array
26596     * @param {Array} array The array to modify.
26597     * @param {Array} values The values to remove.
26598     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
26599     * @returns {Array} Returns `array`.
26600     * @example
26601     *
26602     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
26603     *
26604     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
26605     * console.log(array);
26606     * // => [{ 'x': 2 }]
26607     */
26608    function pullAllBy(array, values, iteratee) {
26609      return (array && array.length && values && values.length)
26610        ? basePullAll(array, values, getIteratee(iteratee, 2))
26611        : array;
26612    }
26613
26614    /**
26615     * This method is like `_.pullAll` except that it accepts `comparator` which
26616     * is invoked to compare elements of `array` to `values`. The comparator is
26617     * invoked with two arguments: (arrVal, othVal).
26618     *
26619     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
26620     *
26621     * @static
26622     * @memberOf _
26623     * @since 4.6.0
26624     * @category Array
26625     * @param {Array} array The array to modify.
26626     * @param {Array} values The values to remove.
26627     * @param {Function} [comparator] The comparator invoked per element.
26628     * @returns {Array} Returns `array`.
26629     * @example
26630     *
26631     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
26632     *
26633     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
26634     * console.log(array);
26635     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
26636     */
26637    function pullAllWith(array, values, comparator) {
26638      return (array && array.length && values && values.length)
26639        ? basePullAll(array, values, undefined, comparator)
26640        : array;
26641    }
26642
26643    /**
26644     * Removes elements from `array` corresponding to `indexes` and returns an
26645     * array of removed elements.
26646     *
26647     * **Note:** Unlike `_.at`, this method mutates `array`.
26648     *
26649     * @static
26650     * @memberOf _
26651     * @since 3.0.0
26652     * @category Array
26653     * @param {Array} array The array to modify.
26654     * @param {...(number|number[])} [indexes] The indexes of elements to remove.
26655     * @returns {Array} Returns the new array of removed elements.
26656     * @example
26657     *
26658     * var array = ['a', 'b', 'c', 'd'];
26659     * var pulled = _.pullAt(array, [1, 3]);
26660     *
26661     * console.log(array);
26662     * // => ['a', 'c']
26663     *
26664     * console.log(pulled);
26665     * // => ['b', 'd']
26666     */
26667    var pullAt = flatRest(function(array, indexes) {
26668      var length = array == null ? 0 : array.length,
26669          result = baseAt(array, indexes);
26670
26671      basePullAt(array, arrayMap(indexes, function(index) {
26672        return isIndex(index, length) ? +index : index;
26673      }).sort(compareAscending));
26674
26675      return result;
26676    });
26677
26678    /**
26679     * Removes all elements from `array` that `predicate` returns truthy for
26680     * and returns an array of the removed elements. The predicate is invoked
26681     * with three arguments: (value, index, array).
26682     *
26683     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
26684     * to pull elements from an array by value.
26685     *
26686     * @static
26687     * @memberOf _
26688     * @since 2.0.0
26689     * @category Array
26690     * @param {Array} array The array to modify.
26691     * @param {Function} [predicate=_.identity] The function invoked per iteration.
26692     * @returns {Array} Returns the new array of removed elements.
26693     * @example
26694     *
26695     * var array = [1, 2, 3, 4];
26696     * var evens = _.remove(array, function(n) {
26697     *   return n % 2 == 0;
26698     * });
26699     *
26700     * console.log(array);
26701     * // => [1, 3]
26702     *
26703     * console.log(evens);
26704     * // => [2, 4]
26705     */
26706    function remove(array, predicate) {
26707      var result = [];
26708      if (!(array && array.length)) {
26709        return result;
26710      }
26711      var index = -1,
26712          indexes = [],
26713          length = array.length;
26714
26715      predicate = getIteratee(predicate, 3);
26716      while (++index < length) {
26717        var value = array[index];
26718        if (predicate(value, index, array)) {
26719          result.push(value);
26720          indexes.push(index);
26721        }
26722      }
26723      basePullAt(array, indexes);
26724      return result;
26725    }
26726
26727    /**
26728     * Reverses `array` so that the first element becomes the last, the second
26729     * element becomes the second to last, and so on.
26730     *
26731     * **Note:** This method mutates `array` and is based on
26732     * [`Array#reverse`](https://mdn.io/Array/reverse).
26733     *
26734     * @static
26735     * @memberOf _
26736     * @since 4.0.0
26737     * @category Array
26738     * @param {Array} array The array to modify.
26739     * @returns {Array} Returns `array`.
26740     * @example
26741     *
26742     * var array = [1, 2, 3];
26743     *
26744     * _.reverse(array);
26745     * // => [3, 2, 1]
26746     *
26747     * console.log(array);
26748     * // => [3, 2, 1]
26749     */
26750    function reverse(array) {
26751      return array == null ? array : nativeReverse.call(array);
26752    }
26753
26754    /**
26755     * Creates a slice of `array` from `start` up to, but not including, `end`.
26756     *
26757     * **Note:** This method is used instead of
26758     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
26759     * returned.
26760     *
26761     * @static
26762     * @memberOf _
26763     * @since 3.0.0
26764     * @category Array
26765     * @param {Array} array The array to slice.
26766     * @param {number} [start=0] The start position.
26767     * @param {number} [end=array.length] The end position.
26768     * @returns {Array} Returns the slice of `array`.
26769     */
26770    function slice(array, start, end) {
26771      var length = array == null ? 0 : array.length;
26772      if (!length) {
26773        return [];
26774      }
26775      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
26776        start = 0;
26777        end = length;
26778      }
26779      else {
26780        start = start == null ? 0 : toInteger(start);
26781        end = end === undefined ? length : toInteger(end);
26782      }
26783      return baseSlice(array, start, end);
26784    }
26785
26786    /**
26787     * Uses a binary search to determine the lowest index at which `value`
26788     * should be inserted into `array` in order to maintain its sort order.
26789     *
26790     * @static
26791     * @memberOf _
26792     * @since 0.1.0
26793     * @category Array
26794     * @param {Array} array The sorted array to inspect.
26795     * @param {*} value The value to evaluate.
26796     * @returns {number} Returns the index at which `value` should be inserted
26797     *  into `array`.
26798     * @example
26799     *
26800     * _.sortedIndex([30, 50], 40);
26801     * // => 1
26802     */
26803    function sortedIndex(array, value) {
26804      return baseSortedIndex(array, value);
26805    }
26806
26807    /**
26808     * This method is like `_.sortedIndex` except that it accepts `iteratee`
26809     * which is invoked for `value` and each element of `array` to compute their
26810     * sort ranking. The iteratee is invoked with one argument: (value).
26811     *
26812     * @static
26813     * @memberOf _
26814     * @since 4.0.0
26815     * @category Array
26816     * @param {Array} array The sorted array to inspect.
26817     * @param {*} value The value to evaluate.
26818     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
26819     * @returns {number} Returns the index at which `value` should be inserted
26820     *  into `array`.
26821     * @example
26822     *
26823     * var objects = [{ 'x': 4 }, { 'x': 5 }];
26824     *
26825     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
26826     * // => 0
26827     *
26828     * // The `_.property` iteratee shorthand.
26829     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
26830     * // => 0
26831     */
26832    function sortedIndexBy(array, value, iteratee) {
26833      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
26834    }
26835
26836    /**
26837     * This method is like `_.indexOf` except that it performs a binary
26838     * search on a sorted `array`.
26839     *
26840     * @static
26841     * @memberOf _
26842     * @since 4.0.0
26843     * @category Array
26844     * @param {Array} array The array to inspect.
26845     * @param {*} value The value to search for.
26846     * @returns {number} Returns the index of the matched value, else `-1`.
26847     * @example
26848     *
26849     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
26850     * // => 1
26851     */
26852    function sortedIndexOf(array, value) {
26853      var length = array == null ? 0 : array.length;
26854      if (length) {
26855        var index = baseSortedIndex(array, value);
26856        if (index < length && eq(array[index], value)) {
26857          return index;
26858        }
26859      }
26860      return -1;
26861    }
26862
26863    /**
26864     * This method is like `_.sortedIndex` except that it returns the highest
26865     * index at which `value` should be inserted into `array` in order to
26866     * maintain its sort order.
26867     *
26868     * @static
26869     * @memberOf _
26870     * @since 3.0.0
26871     * @category Array
26872     * @param {Array} array The sorted array to inspect.
26873     * @param {*} value The value to evaluate.
26874     * @returns {number} Returns the index at which `value` should be inserted
26875     *  into `array`.
26876     * @example
26877     *
26878     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
26879     * // => 4
26880     */
26881    function sortedLastIndex(array, value) {
26882      return baseSortedIndex(array, value, true);
26883    }
26884
26885    /**
26886     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
26887     * which is invoked for `value` and each element of `array` to compute their
26888     * sort ranking. The iteratee is invoked with one argument: (value).
26889     *
26890     * @static
26891     * @memberOf _
26892     * @since 4.0.0
26893     * @category Array
26894     * @param {Array} array The sorted array to inspect.
26895     * @param {*} value The value to evaluate.
26896     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
26897     * @returns {number} Returns the index at which `value` should be inserted
26898     *  into `array`.
26899     * @example
26900     *
26901     * var objects = [{ 'x': 4 }, { 'x': 5 }];
26902     *
26903     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
26904     * // => 1
26905     *
26906     * // The `_.property` iteratee shorthand.
26907     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
26908     * // => 1
26909     */
26910    function sortedLastIndexBy(array, value, iteratee) {
26911      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
26912    }
26913
26914    /**
26915     * This method is like `_.lastIndexOf` except that it performs a binary
26916     * search on a sorted `array`.
26917     *
26918     * @static
26919     * @memberOf _
26920     * @since 4.0.0
26921     * @category Array
26922     * @param {Array} array The array to inspect.
26923     * @param {*} value The value to search for.
26924     * @returns {number} Returns the index of the matched value, else `-1`.
26925     * @example
26926     *
26927     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
26928     * // => 3
26929     */
26930    function sortedLastIndexOf(array, value) {
26931      var length = array == null ? 0 : array.length;
26932      if (length) {
26933        var index = baseSortedIndex(array, value, true) - 1;
26934        if (eq(array[index], value)) {
26935          return index;
26936        }
26937      }
26938      return -1;
26939    }
26940
26941    /**
26942     * This method is like `_.uniq` except that it's designed and optimized
26943     * for sorted arrays.
26944     *
26945     * @static
26946     * @memberOf _
26947     * @since 4.0.0
26948     * @category Array
26949     * @param {Array} array The array to inspect.
26950     * @returns {Array} Returns the new duplicate free array.
26951     * @example
26952     *
26953     * _.sortedUniq([1, 1, 2]);
26954     * // => [1, 2]
26955     */
26956    function sortedUniq(array) {
26957      return (array && array.length)
26958        ? baseSortedUniq(array)
26959        : [];
26960    }
26961
26962    /**
26963     * This method is like `_.uniqBy` except that it's designed and optimized
26964     * for sorted arrays.
26965     *
26966     * @static
26967     * @memberOf _
26968     * @since 4.0.0
26969     * @category Array
26970     * @param {Array} array The array to inspect.
26971     * @param {Function} [iteratee] The iteratee invoked per element.
26972     * @returns {Array} Returns the new duplicate free array.
26973     * @example
26974     *
26975     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
26976     * // => [1.1, 2.3]
26977     */
26978    function sortedUniqBy(array, iteratee) {
26979      return (array && array.length)
26980        ? baseSortedUniq(array, getIteratee(iteratee, 2))
26981        : [];
26982    }
26983
26984    /**
26985     * Gets all but the first element of `array`.
26986     *
26987     * @static
26988     * @memberOf _
26989     * @since 4.0.0
26990     * @category Array
26991     * @param {Array} array The array to query.
26992     * @returns {Array} Returns the slice of `array`.
26993     * @example
26994     *
26995     * _.tail([1, 2, 3]);
26996     * // => [2, 3]
26997     */
26998    function tail(array) {
26999      var length = array == null ? 0 : array.length;
27000      return length ? baseSlice(array, 1, length) : [];
27001    }
27002
27003    /**
27004     * Creates a slice of `array` with `n` elements taken from the beginning.
27005     *
27006     * @static
27007     * @memberOf _
27008     * @since 0.1.0
27009     * @category Array
27010     * @param {Array} array The array to query.
27011     * @param {number} [n=1] The number of elements to take.
27012     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
27013     * @returns {Array} Returns the slice of `array`.
27014     * @example
27015     *
27016     * _.take([1, 2, 3]);
27017     * // => [1]
27018     *
27019     * _.take([1, 2, 3], 2);
27020     * // => [1, 2]
27021     *
27022     * _.take([1, 2, 3], 5);
27023     * // => [1, 2, 3]
27024     *
27025     * _.take([1, 2, 3], 0);
27026     * // => []
27027     */
27028    function take(array, n, guard) {
27029      if (!(array && array.length)) {
27030        return [];
27031      }
27032      n = (guard || n === undefined) ? 1 : toInteger(n);
27033      return baseSlice(array, 0, n < 0 ? 0 : n);
27034    }
27035
27036    /**
27037     * Creates a slice of `array` with `n` elements taken from the end.
27038     *
27039     * @static
27040     * @memberOf _
27041     * @since 3.0.0
27042     * @category Array
27043     * @param {Array} array The array to query.
27044     * @param {number} [n=1] The number of elements to take.
27045     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
27046     * @returns {Array} Returns the slice of `array`.
27047     * @example
27048     *
27049     * _.takeRight([1, 2, 3]);
27050     * // => [3]
27051     *
27052     * _.takeRight([1, 2, 3], 2);
27053     * // => [2, 3]
27054     *
27055     * _.takeRight([1, 2, 3], 5);
27056     * // => [1, 2, 3]
27057     *
27058     * _.takeRight([1, 2, 3], 0);
27059     * // => []
27060     */
27061    function takeRight(array, n, guard) {
27062      var length = array == null ? 0 : array.length;
27063      if (!length) {
27064        return [];
27065      }
27066      n = (guard || n === undefined) ? 1 : toInteger(n);
27067      n = length - n;
27068      return baseSlice(array, n < 0 ? 0 : n, length);
27069    }
27070
27071    /**
27072     * Creates a slice of `array` with elements taken from the end. Elements are
27073     * taken until `predicate` returns falsey. The predicate is invoked with
27074     * three arguments: (value, index, array).
27075     *
27076     * @static
27077     * @memberOf _
27078     * @since 3.0.0
27079     * @category Array
27080     * @param {Array} array The array to query.
27081     * @param {Function} [predicate=_.identity] The function invoked per iteration.
27082     * @returns {Array} Returns the slice of `array`.
27083     * @example
27084     *
27085     * var users = [
27086     *   { 'user': 'barney',  'active': true },
27087     *   { 'user': 'fred',    'active': false },
27088     *   { 'user': 'pebbles', 'active': false }
27089     * ];
27090     *
27091     * _.takeRightWhile(users, function(o) { return !o.active; });
27092     * // => objects for ['fred', 'pebbles']
27093     *
27094     * // The `_.matches` iteratee shorthand.
27095     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
27096     * // => objects for ['pebbles']
27097     *
27098     * // The `_.matchesProperty` iteratee shorthand.
27099     * _.takeRightWhile(users, ['active', false]);
27100     * // => objects for ['fred', 'pebbles']
27101     *
27102     * // The `_.property` iteratee shorthand.
27103     * _.takeRightWhile(users, 'active');
27104     * // => []
27105     */
27106    function takeRightWhile(array, predicate) {
27107      return (array && array.length)
27108        ? baseWhile(array, getIteratee(predicate, 3), false, true)
27109        : [];
27110    }
27111
27112    /**
27113     * Creates a slice of `array` with elements taken from the beginning. Elements
27114     * are taken until `predicate` returns falsey. The predicate is invoked with
27115     * three arguments: (value, index, array).
27116     *
27117     * @static
27118     * @memberOf _
27119     * @since 3.0.0
27120     * @category Array
27121     * @param {Array} array The array to query.
27122     * @param {Function} [predicate=_.identity] The function invoked per iteration.
27123     * @returns {Array} Returns the slice of `array`.
27124     * @example
27125     *
27126     * var users = [
27127     *   { 'user': 'barney',  'active': false },
27128     *   { 'user': 'fred',    'active': false },
27129     *   { 'user': 'pebbles', 'active': true }
27130     * ];
27131     *
27132     * _.takeWhile(users, function(o) { return !o.active; });
27133     * // => objects for ['barney', 'fred']
27134     *
27135     * // The `_.matches` iteratee shorthand.
27136     * _.takeWhile(users, { 'user': 'barney', 'active': false });
27137     * // => objects for ['barney']
27138     *
27139     * // The `_.matchesProperty` iteratee shorthand.
27140     * _.takeWhile(users, ['active', false]);
27141     * // => objects for ['barney', 'fred']
27142     *
27143     * // The `_.property` iteratee shorthand.
27144     * _.takeWhile(users, 'active');
27145     * // => []
27146     */
27147    function takeWhile(array, predicate) {
27148      return (array && array.length)
27149        ? baseWhile(array, getIteratee(predicate, 3))
27150        : [];
27151    }
27152
27153    /**
27154     * Creates an array of unique values, in order, from all given arrays using
27155     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
27156     * for equality comparisons.
27157     *
27158     * @static
27159     * @memberOf _
27160     * @since 0.1.0
27161     * @category Array
27162     * @param {...Array} [arrays] The arrays to inspect.
27163     * @returns {Array} Returns the new array of combined values.
27164     * @example
27165     *
27166     * _.union([2], [1, 2]);
27167     * // => [2, 1]
27168     */
27169    var union = baseRest(function(arrays) {
27170      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
27171    });
27172
27173    /**
27174     * This method is like `_.union` except that it accepts `iteratee` which is
27175     * invoked for each element of each `arrays` to generate the criterion by
27176     * which uniqueness is computed. Result values are chosen from the first
27177     * array in which the value occurs. The iteratee is invoked with one argument:
27178     * (value).
27179     *
27180     * @static
27181     * @memberOf _
27182     * @since 4.0.0
27183     * @category Array
27184     * @param {...Array} [arrays] The arrays to inspect.
27185     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
27186     * @returns {Array} Returns the new array of combined values.
27187     * @example
27188     *
27189     * _.unionBy([2.1], [1.2, 2.3], Math.floor);
27190     * // => [2.1, 1.2]
27191     *
27192     * // The `_.property` iteratee shorthand.
27193     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
27194     * // => [{ 'x': 1 }, { 'x': 2 }]
27195     */
27196    var unionBy = baseRest(function(arrays) {
27197      var iteratee = last(arrays);
27198      if (isArrayLikeObject(iteratee)) {
27199        iteratee = undefined;
27200      }
27201      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
27202    });
27203
27204    /**
27205     * This method is like `_.union` except that it accepts `comparator` which
27206     * is invoked to compare elements of `arrays`. Result values are chosen from
27207     * the first array in which the value occurs. The comparator is invoked
27208     * with two arguments: (arrVal, othVal).
27209     *
27210     * @static
27211     * @memberOf _
27212     * @since 4.0.0
27213     * @category Array
27214     * @param {...Array} [arrays] The arrays to inspect.
27215     * @param {Function} [comparator] The comparator invoked per element.
27216     * @returns {Array} Returns the new array of combined values.
27217     * @example
27218     *
27219     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
27220     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
27221     *
27222     * _.unionWith(objects, others, _.isEqual);
27223     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
27224     */
27225    var unionWith = baseRest(function(arrays) {
27226      var comparator = last(arrays);
27227      comparator = typeof comparator == 'function' ? comparator : undefined;
27228      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
27229    });
27230
27231    /**
27232     * Creates a duplicate-free version of an array, using
27233     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
27234     * for equality comparisons, in which only the first occurrence of each element
27235     * is kept. The order of result values is determined by the order they occur
27236     * in the array.
27237     *
27238     * @static
27239     * @memberOf _
27240     * @since 0.1.0
27241     * @category Array
27242     * @param {Array} array The array to inspect.
27243     * @returns {Array} Returns the new duplicate free array.
27244     * @example
27245     *
27246     * _.uniq([2, 1, 2]);
27247     * // => [2, 1]
27248     */
27249    function uniq(array) {
27250      return (array && array.length) ? baseUniq(array) : [];
27251    }
27252
27253    /**
27254     * This method is like `_.uniq` except that it accepts `iteratee` which is
27255     * invoked for each element in `array` to generate the criterion by which
27256     * uniqueness is computed. The order of result values is determined by the
27257     * order they occur in the array. The iteratee is invoked with one argument:
27258     * (value).
27259     *
27260     * @static
27261     * @memberOf _
27262     * @since 4.0.0
27263     * @category Array
27264     * @param {Array} array The array to inspect.
27265     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
27266     * @returns {Array} Returns the new duplicate free array.
27267     * @example
27268     *
27269     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
27270     * // => [2.1, 1.2]
27271     *
27272     * // The `_.property` iteratee shorthand.
27273     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
27274     * // => [{ 'x': 1 }, { 'x': 2 }]
27275     */
27276    function uniqBy(array, iteratee) {
27277      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];
27278    }
27279
27280    /**
27281     * This method is like `_.uniq` except that it accepts `comparator` which
27282     * is invoked to compare elements of `array`. The order of result values is
27283     * determined by the order they occur in the array.The comparator is invoked
27284     * with two arguments: (arrVal, othVal).
27285     *
27286     * @static
27287     * @memberOf _
27288     * @since 4.0.0
27289     * @category Array
27290     * @param {Array} array The array to inspect.
27291     * @param {Function} [comparator] The comparator invoked per element.
27292     * @returns {Array} Returns the new duplicate free array.
27293     * @example
27294     *
27295     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
27296     *
27297     * _.uniqWith(objects, _.isEqual);
27298     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
27299     */
27300    function uniqWith(array, comparator) {
27301      comparator = typeof comparator == 'function' ? comparator : undefined;
27302      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
27303    }
27304
27305    /**
27306     * This method is like `_.zip` except that it accepts an array of grouped
27307     * elements and creates an array regrouping the elements to their pre-zip
27308     * configuration.
27309     *
27310     * @static
27311     * @memberOf _
27312     * @since 1.2.0
27313     * @category Array
27314     * @param {Array} array The array of grouped elements to process.
27315     * @returns {Array} Returns the new array of regrouped elements.
27316     * @example
27317     *
27318     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
27319     * // => [['a', 1, true], ['b', 2, false]]
27320     *
27321     * _.unzip(zipped);
27322     * // => [['a', 'b'], [1, 2], [true, false]]
27323     */
27324    function unzip(array) {
27325      if (!(array && array.length)) {
27326        return [];
27327      }
27328      var length = 0;
27329      array = arrayFilter(array, function(group) {
27330        if (isArrayLikeObject(group)) {
27331          length = nativeMax(group.length, length);
27332          return true;
27333        }
27334      });
27335      return baseTimes(length, function(index) {
27336        return arrayMap(array, baseProperty(index));
27337      });
27338    }
27339
27340    /**
27341     * This method is like `_.unzip` except that it accepts `iteratee` to specify
27342     * how regrouped values should be combined. The iteratee is invoked with the
27343     * elements of each group: (...group).
27344     *
27345     * @static
27346     * @memberOf _
27347     * @since 3.8.0
27348     * @category Array
27349     * @param {Array} array The array of grouped elements to process.
27350     * @param {Function} [iteratee=_.identity] The function to combine
27351     *  regrouped values.
27352     * @returns {Array} Returns the new array of regrouped elements.
27353     * @example
27354     *
27355     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
27356     * // => [[1, 10, 100], [2, 20, 200]]
27357     *
27358     * _.unzipWith(zipped, _.add);
27359     * // => [3, 30, 300]
27360     */
27361    function unzipWith(array, iteratee) {
27362      if (!(array && array.length)) {
27363        return [];
27364      }
27365      var result = unzip(array);
27366      if (iteratee == null) {
27367        return result;
27368      }
27369      return arrayMap(result, function(group) {
27370        return apply(iteratee, undefined, group);
27371      });
27372    }
27373
27374    /**
27375     * Creates an array excluding all given values using
27376     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
27377     * for equality comparisons.
27378     *
27379     * **Note:** Unlike `_.pull`, this method returns a new array.
27380     *
27381     * @static
27382     * @memberOf _
27383     * @since 0.1.0
27384     * @category Array
27385     * @param {Array} array The array to inspect.
27386     * @param {...*} [values] The values to exclude.
27387     * @returns {Array} Returns the new array of filtered values.
27388     * @see _.difference, _.xor
27389     * @example
27390     *
27391     * _.without([2, 1, 2, 3], 1, 2);
27392     * // => [3]
27393     */
27394    var without = baseRest(function(array, values) {
27395      return isArrayLikeObject(array)
27396        ? baseDifference(array, values)
27397        : [];
27398    });
27399
27400    /**
27401     * Creates an array of unique values that is the
27402     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
27403     * of the given arrays. The order of result values is determined by the order
27404     * they occur in the arrays.
27405     *
27406     * @static
27407     * @memberOf _
27408     * @since 2.4.0
27409     * @category Array
27410     * @param {...Array} [arrays] The arrays to inspect.
27411     * @returns {Array} Returns the new array of filtered values.
27412     * @see _.difference, _.without
27413     * @example
27414     *
27415     * _.xor([2, 1], [2, 3]);
27416     * // => [1, 3]
27417     */
27418    var xor = baseRest(function(arrays) {
27419      return baseXor(arrayFilter(arrays, isArrayLikeObject));
27420    });
27421
27422    /**
27423     * This method is like `_.xor` except that it accepts `iteratee` which is
27424     * invoked for each element of each `arrays` to generate the criterion by
27425     * which by which they're compared. The order of result values is determined
27426     * by the order they occur in the arrays. The iteratee is invoked with one
27427     * argument: (value).
27428     *
27429     * @static
27430     * @memberOf _
27431     * @since 4.0.0
27432     * @category Array
27433     * @param {...Array} [arrays] The arrays to inspect.
27434     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
27435     * @returns {Array} Returns the new array of filtered values.
27436     * @example
27437     *
27438     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
27439     * // => [1.2, 3.4]
27440     *
27441     * // The `_.property` iteratee shorthand.
27442     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
27443     * // => [{ 'x': 2 }]
27444     */
27445    var xorBy = baseRest(function(arrays) {
27446      var iteratee = last(arrays);
27447      if (isArrayLikeObject(iteratee)) {
27448        iteratee = undefined;
27449      }
27450      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
27451    });
27452
27453    /**
27454     * This method is like `_.xor` except that it accepts `comparator` which is
27455     * invoked to compare elements of `arrays`. The order of result values is
27456     * determined by the order they occur in the arrays. The comparator is invoked
27457     * with two arguments: (arrVal, othVal).
27458     *
27459     * @static
27460     * @memberOf _
27461     * @since 4.0.0
27462     * @category Array
27463     * @param {...Array} [arrays] The arrays to inspect.
27464     * @param {Function} [comparator] The comparator invoked per element.
27465     * @returns {Array} Returns the new array of filtered values.
27466     * @example
27467     *
27468     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
27469     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
27470     *
27471     * _.xorWith(objects, others, _.isEqual);
27472     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
27473     */
27474    var xorWith = baseRest(function(arrays) {
27475      var comparator = last(arrays);
27476      comparator = typeof comparator == 'function' ? comparator : undefined;
27477      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
27478    });
27479
27480    /**
27481     * Creates an array of grouped elements, the first of which contains the
27482     * first elements of the given arrays, the second of which contains the
27483     * second elements of the given arrays, and so on.
27484     *
27485     * @static
27486     * @memberOf _
27487     * @since 0.1.0
27488     * @category Array
27489     * @param {...Array} [arrays] The arrays to process.
27490     * @returns {Array} Returns the new array of grouped elements.
27491     * @example
27492     *
27493     * _.zip(['a', 'b'], [1, 2], [true, false]);
27494     * // => [['a', 1, true], ['b', 2, false]]
27495     */
27496    var zip = baseRest(unzip);
27497
27498    /**
27499     * This method is like `_.fromPairs` except that it accepts two arrays,
27500     * one of property identifiers and one of corresponding values.
27501     *
27502     * @static
27503     * @memberOf _
27504     * @since 0.4.0
27505     * @category Array
27506     * @param {Array} [props=[]] The property identifiers.
27507     * @param {Array} [values=[]] The property values.
27508     * @returns {Object} Returns the new object.
27509     * @example
27510     *
27511     * _.zipObject(['a', 'b'], [1, 2]);
27512     * // => { 'a': 1, 'b': 2 }
27513     */
27514    function zipObject(props, values) {
27515      return baseZipObject(props || [], values || [], assignValue);
27516    }
27517
27518    /**
27519     * This method is like `_.zipObject` except that it supports property paths.
27520     *
27521     * @static
27522     * @memberOf _
27523     * @since 4.1.0
27524     * @category Array
27525     * @param {Array} [props=[]] The property identifiers.
27526     * @param {Array} [values=[]] The property values.
27527     * @returns {Object} Returns the new object.
27528     * @example
27529     *
27530     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
27531     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
27532     */
27533    function zipObjectDeep(props, values) {
27534      return baseZipObject(props || [], values || [], baseSet);
27535    }
27536
27537    /**
27538     * This method is like `_.zip` except that it accepts `iteratee` to specify
27539     * how grouped values should be combined. The iteratee is invoked with the
27540     * elements of each group: (...group).
27541     *
27542     * @static
27543     * @memberOf _
27544     * @since 3.8.0
27545     * @category Array
27546     * @param {...Array} [arrays] The arrays to process.
27547     * @param {Function} [iteratee=_.identity] The function to combine
27548     *  grouped values.
27549     * @returns {Array} Returns the new array of grouped elements.
27550     * @example
27551     *
27552     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
27553     *   return a + b + c;
27554     * });
27555     * // => [111, 222]
27556     */
27557    var zipWith = baseRest(function(arrays) {
27558      var length = arrays.length,
27559          iteratee = length > 1 ? arrays[length - 1] : undefined;
27560
27561      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
27562      return unzipWith(arrays, iteratee);
27563    });
27564
27565    /*------------------------------------------------------------------------*/
27566
27567    /**
27568     * Creates a `lodash` wrapper instance that wraps `value` with explicit method
27569     * chain sequences enabled. The result of such sequences must be unwrapped
27570     * with `_#value`.
27571     *
27572     * @static
27573     * @memberOf _
27574     * @since 1.3.0
27575     * @category Seq
27576     * @param {*} value The value to wrap.
27577     * @returns {Object} Returns the new `lodash` wrapper instance.
27578     * @example
27579     *
27580     * var users = [
27581     *   { 'user': 'barney',  'age': 36 },
27582     *   { 'user': 'fred',    'age': 40 },
27583     *   { 'user': 'pebbles', 'age': 1 }
27584     * ];
27585     *
27586     * var youngest = _
27587     *   .chain(users)
27588     *   .sortBy('age')
27589     *   .map(function(o) {
27590     *     return o.user + ' is ' + o.age;
27591     *   })
27592     *   .head()
27593     *   .value();
27594     * // => 'pebbles is 1'
27595     */
27596    function chain(value) {
27597      var result = lodash(value);
27598      result.__chain__ = true;
27599      return result;
27600    }
27601
27602    /**
27603     * This method invokes `interceptor` and returns `value`. The interceptor
27604     * is invoked with one argument; (value). The purpose of this method is to
27605     * "tap into" a method chain sequence in order to modify intermediate results.
27606     *
27607     * @static
27608     * @memberOf _
27609     * @since 0.1.0
27610     * @category Seq
27611     * @param {*} value The value to provide to `interceptor`.
27612     * @param {Function} interceptor The function to invoke.
27613     * @returns {*} Returns `value`.
27614     * @example
27615     *
27616     * _([1, 2, 3])
27617     *  .tap(function(array) {
27618     *    // Mutate input array.
27619     *    array.pop();
27620     *  })
27621     *  .reverse()
27622     *  .value();
27623     * // => [2, 1]
27624     */
27625    function tap(value, interceptor) {
27626      interceptor(value);
27627      return value;
27628    }
27629
27630    /**
27631     * This method is like `_.tap` except that it returns the result of `interceptor`.
27632     * The purpose of this method is to "pass thru" values replacing intermediate
27633     * results in a method chain sequence.
27634     *
27635     * @static
27636     * @memberOf _
27637     * @since 3.0.0
27638     * @category Seq
27639     * @param {*} value The value to provide to `interceptor`.
27640     * @param {Function} interceptor The function to invoke.
27641     * @returns {*} Returns the result of `interceptor`.
27642     * @example
27643     *
27644     * _('  abc  ')
27645     *  .chain()
27646     *  .trim()
27647     *  .thru(function(value) {
27648     *    return [value];
27649     *  })
27650     *  .value();
27651     * // => ['abc']
27652     */
27653    function thru(value, interceptor) {
27654      return interceptor(value);
27655    }
27656
27657    /**
27658     * This method is the wrapper version of `_.at`.
27659     *
27660     * @name at
27661     * @memberOf _
27662     * @since 1.0.0
27663     * @category Seq
27664     * @param {...(string|string[])} [paths] The property paths to pick.
27665     * @returns {Object} Returns the new `lodash` wrapper instance.
27666     * @example
27667     *
27668     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
27669     *
27670     * _(object).at(['a[0].b.c', 'a[1]']).value();
27671     * // => [3, 4]
27672     */
27673    var wrapperAt = flatRest(function(paths) {
27674      var length = paths.length,
27675          start = length ? paths[0] : 0,
27676          value = this.__wrapped__,
27677          interceptor = function(object) { return baseAt(object, paths); };
27678
27679      if (length > 1 || this.__actions__.length ||
27680          !(value instanceof LazyWrapper) || !isIndex(start)) {
27681        return this.thru(interceptor);
27682      }
27683      value = value.slice(start, +start + (length ? 1 : 0));
27684      value.__actions__.push({
27685        'func': thru,
27686        'args': [interceptor],
27687        'thisArg': undefined
27688      });
27689      return new LodashWrapper(value, this.__chain__).thru(function(array) {
27690        if (length && !array.length) {
27691          array.push(undefined);
27692        }
27693        return array;
27694      });
27695    });
27696
27697    /**
27698     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
27699     *
27700     * @name chain
27701     * @memberOf _
27702     * @since 0.1.0
27703     * @category Seq
27704     * @returns {Object} Returns the new `lodash` wrapper instance.
27705     * @example
27706     *
27707     * var users = [
27708     *   { 'user': 'barney', 'age': 36 },
27709     *   { 'user': 'fred',   'age': 40 }
27710     * ];
27711     *
27712     * // A sequence without explicit chaining.
27713     * _(users).head();
27714     * // => { 'user': 'barney', 'age': 36 }
27715     *
27716     * // A sequence with explicit chaining.
27717     * _(users)
27718     *   .chain()
27719     *   .head()
27720     *   .pick('user')
27721     *   .value();
27722     * // => { 'user': 'barney' }
27723     */
27724    function wrapperChain() {
27725      return chain(this);
27726    }
27727
27728    /**
27729     * Executes the chain sequence and returns the wrapped result.
27730     *
27731     * @name commit
27732     * @memberOf _
27733     * @since 3.2.0
27734     * @category Seq
27735     * @returns {Object} Returns the new `lodash` wrapper instance.
27736     * @example
27737     *
27738     * var array = [1, 2];
27739     * var wrapped = _(array).push(3);
27740     *
27741     * console.log(array);
27742     * // => [1, 2]
27743     *
27744     * wrapped = wrapped.commit();
27745     * console.log(array);
27746     * // => [1, 2, 3]
27747     *
27748     * wrapped.last();
27749     * // => 3
27750     *
27751     * console.log(array);
27752     * // => [1, 2, 3]
27753     */
27754    function wrapperCommit() {
27755      return new LodashWrapper(this.value(), this.__chain__);
27756    }
27757
27758    /**
27759     * Gets the next value on a wrapped object following the
27760     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
27761     *
27762     * @name next
27763     * @memberOf _
27764     * @since 4.0.0
27765     * @category Seq
27766     * @returns {Object} Returns the next iterator value.
27767     * @example
27768     *
27769     * var wrapped = _([1, 2]);
27770     *
27771     * wrapped.next();
27772     * // => { 'done': false, 'value': 1 }
27773     *
27774     * wrapped.next();
27775     * // => { 'done': false, 'value': 2 }
27776     *
27777     * wrapped.next();
27778     * // => { 'done': true, 'value': undefined }
27779     */
27780    function wrapperNext() {
27781      if (this.__values__ === undefined) {
27782        this.__values__ = toArray(this.value());
27783      }
27784      var done = this.__index__ >= this.__values__.length,
27785          value = done ? undefined : this.__values__[this.__index__++];
27786
27787      return { 'done': done, 'value': value };
27788    }
27789
27790    /**
27791     * Enables the wrapper to be iterable.
27792     *
27793     * @name Symbol.iterator
27794     * @memberOf _
27795     * @since 4.0.0
27796     * @category Seq
27797     * @returns {Object} Returns the wrapper object.
27798     * @example
27799     *
27800     * var wrapped = _([1, 2]);
27801     *
27802     * wrapped[Symbol.iterator]() === wrapped;
27803     * // => true
27804     *
27805     * Array.from(wrapped);
27806     * // => [1, 2]
27807     */
27808    function wrapperToIterator() {
27809      return this;
27810    }
27811
27812    /**
27813     * Creates a clone of the chain sequence planting `value` as the wrapped value.
27814     *
27815     * @name plant
27816     * @memberOf _
27817     * @since 3.2.0
27818     * @category Seq
27819     * @param {*} value The value to plant.
27820     * @returns {Object} Returns the new `lodash` wrapper instance.
27821     * @example
27822     *
27823     * function square(n) {
27824     *   return n * n;
27825     * }
27826     *
27827     * var wrapped = _([1, 2]).map(square);
27828     * var other = wrapped.plant([3, 4]);
27829     *
27830     * other.value();
27831     * // => [9, 16]
27832     *
27833     * wrapped.value();
27834     * // => [1, 4]
27835     */
27836    function wrapperPlant(value) {
27837      var result,
27838          parent = this;
27839
27840      while (parent instanceof baseLodash) {
27841        var clone = wrapperClone(parent);
27842        clone.__index__ = 0;
27843        clone.__values__ = undefined;
27844        if (result) {
27845          previous.__wrapped__ = clone;
27846        } else {
27847          result = clone;
27848        }
27849        var previous = clone;
27850        parent = parent.__wrapped__;
27851      }
27852      previous.__wrapped__ = value;
27853      return result;
27854    }
27855
27856    /**
27857     * This method is the wrapper version of `_.reverse`.
27858     *
27859     * **Note:** This method mutates the wrapped array.
27860     *
27861     * @name reverse
27862     * @memberOf _
27863     * @since 0.1.0
27864     * @category Seq
27865     * @returns {Object} Returns the new `lodash` wrapper instance.
27866     * @example
27867     *
27868     * var array = [1, 2, 3];
27869     *
27870     * _(array).reverse().value()
27871     * // => [3, 2, 1]
27872     *
27873     * console.log(array);
27874     * // => [3, 2, 1]
27875     */
27876    function wrapperReverse() {
27877      var value = this.__wrapped__;
27878      if (value instanceof LazyWrapper) {
27879        var wrapped = value;
27880        if (this.__actions__.length) {
27881          wrapped = new LazyWrapper(this);
27882        }
27883        wrapped = wrapped.reverse();
27884        wrapped.__actions__.push({
27885          'func': thru,
27886          'args': [reverse],
27887          'thisArg': undefined
27888        });
27889        return new LodashWrapper(wrapped, this.__chain__);
27890      }
27891      return this.thru(reverse);
27892    }
27893
27894    /**
27895     * Executes the chain sequence to resolve the unwrapped value.
27896     *
27897     * @name value
27898     * @memberOf _
27899     * @since 0.1.0
27900     * @alias toJSON, valueOf
27901     * @category Seq
27902     * @returns {*} Returns the resolved unwrapped value.
27903     * @example
27904     *
27905     * _([1, 2, 3]).value();
27906     * // => [1, 2, 3]
27907     */
27908    function wrapperValue() {
27909      return baseWrapperValue(this.__wrapped__, this.__actions__);
27910    }
27911
27912    /*------------------------------------------------------------------------*/
27913
27914    /**
27915     * Creates an object composed of keys generated from the results of running
27916     * each element of `collection` thru `iteratee`. The corresponding value of
27917     * each key is the number of times the key was returned by `iteratee`. The
27918     * iteratee is invoked with one argument: (value).
27919     *
27920     * @static
27921     * @memberOf _
27922     * @since 0.5.0
27923     * @category Collection
27924     * @param {Array|Object} collection The collection to iterate over.
27925     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
27926     * @returns {Object} Returns the composed aggregate object.
27927     * @example
27928     *
27929     * _.countBy([6.1, 4.2, 6.3], Math.floor);
27930     * // => { '4': 1, '6': 2 }
27931     *
27932     * // The `_.property` iteratee shorthand.
27933     * _.countBy(['one', 'two', 'three'], 'length');
27934     * // => { '3': 2, '5': 1 }
27935     */
27936    var countBy = createAggregator(function(result, value, key) {
27937      if (hasOwnProperty.call(result, key)) {
27938        ++result[key];
27939      } else {
27940        baseAssignValue(result, key, 1);
27941      }
27942    });
27943
27944    /**
27945     * Checks if `predicate` returns truthy for **all** elements of `collection`.
27946     * Iteration is stopped once `predicate` returns falsey. The predicate is
27947     * invoked with three arguments: (value, index|key, collection).
27948     *
27949     * **Note:** This method returns `true` for
27950     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
27951     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
27952     * elements of empty collections.
27953     *
27954     * @static
27955     * @memberOf _
27956     * @since 0.1.0
27957     * @category Collection
27958     * @param {Array|Object} collection The collection to iterate over.
27959     * @param {Function} [predicate=_.identity] The function invoked per iteration.
27960     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
27961     * @returns {boolean} Returns `true` if all elements pass the predicate check,
27962     *  else `false`.
27963     * @example
27964     *
27965     * _.every([true, 1, null, 'yes'], Boolean);
27966     * // => false
27967     *
27968     * var users = [
27969     *   { 'user': 'barney', 'age': 36, 'active': false },
27970     *   { 'user': 'fred',   'age': 40, 'active': false }
27971     * ];
27972     *
27973     * // The `_.matches` iteratee shorthand.
27974     * _.every(users, { 'user': 'barney', 'active': false });
27975     * // => false
27976     *
27977     * // The `_.matchesProperty` iteratee shorthand.
27978     * _.every(users, ['active', false]);
27979     * // => true
27980     *
27981     * // The `_.property` iteratee shorthand.
27982     * _.every(users, 'active');
27983     * // => false
27984     */
27985    function every(collection, predicate, guard) {
27986      var func = isArray(collection) ? arrayEvery : baseEvery;
27987      if (guard && isIterateeCall(collection, predicate, guard)) {
27988        predicate = undefined;
27989      }
27990      return func(collection, getIteratee(predicate, 3));
27991    }
27992
27993    /**
27994     * Iterates over elements of `collection`, returning an array of all elements
27995     * `predicate` returns truthy for. The predicate is invoked with three
27996     * arguments: (value, index|key, collection).
27997     *
27998     * **Note:** Unlike `_.remove`, this method returns a new array.
27999     *
28000     * @static
28001     * @memberOf _
28002     * @since 0.1.0
28003     * @category Collection
28004     * @param {Array|Object} collection The collection to iterate over.
28005     * @param {Function} [predicate=_.identity] The function invoked per iteration.
28006     * @returns {Array} Returns the new filtered array.
28007     * @see _.reject
28008     * @example
28009     *
28010     * var users = [
28011     *   { 'user': 'barney', 'age': 36, 'active': true },
28012     *   { 'user': 'fred',   'age': 40, 'active': false }
28013     * ];
28014     *
28015     * _.filter(users, function(o) { return !o.active; });
28016     * // => objects for ['fred']
28017     *
28018     * // The `_.matches` iteratee shorthand.
28019     * _.filter(users, { 'age': 36, 'active': true });
28020     * // => objects for ['barney']
28021     *
28022     * // The `_.matchesProperty` iteratee shorthand.
28023     * _.filter(users, ['active', false]);
28024     * // => objects for ['fred']
28025     *
28026     * // The `_.property` iteratee shorthand.
28027     * _.filter(users, 'active');
28028     * // => objects for ['barney']
28029     *
28030     * // Combining several predicates using `_.overEvery` or `_.overSome`.
28031     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
28032     * // => objects for ['fred', 'barney']
28033     */
28034    function filter(collection, predicate) {
28035      var func = isArray(collection) ? arrayFilter : baseFilter;
28036      return func(collection, getIteratee(predicate, 3));
28037    }
28038
28039    /**
28040     * Iterates over elements of `collection`, returning the first element
28041     * `predicate` returns truthy for. The predicate is invoked with three
28042     * arguments: (value, index|key, collection).
28043     *
28044     * @static
28045     * @memberOf _
28046     * @since 0.1.0
28047     * @category Collection
28048     * @param {Array|Object} collection The collection to inspect.
28049     * @param {Function} [predicate=_.identity] The function invoked per iteration.
28050     * @param {number} [fromIndex=0] The index to search from.
28051     * @returns {*} Returns the matched element, else `undefined`.
28052     * @example
28053     *
28054     * var users = [
28055     *   { 'user': 'barney',  'age': 36, 'active': true },
28056     *   { 'user': 'fred',    'age': 40, 'active': false },
28057     *   { 'user': 'pebbles', 'age': 1,  'active': true }
28058     * ];
28059     *
28060     * _.find(users, function(o) { return o.age < 40; });
28061     * // => object for 'barney'
28062     *
28063     * // The `_.matches` iteratee shorthand.
28064     * _.find(users, { 'age': 1, 'active': true });
28065     * // => object for 'pebbles'
28066     *
28067     * // The `_.matchesProperty` iteratee shorthand.
28068     * _.find(users, ['active', false]);
28069     * // => object for 'fred'
28070     *
28071     * // The `_.property` iteratee shorthand.
28072     * _.find(users, 'active');
28073     * // => object for 'barney'
28074     */
28075    var find = createFind(findIndex);
28076
28077    /**
28078     * This method is like `_.find` except that it iterates over elements of
28079     * `collection` from right to left.
28080     *
28081     * @static
28082     * @memberOf _
28083     * @since 2.0.0
28084     * @category Collection
28085     * @param {Array|Object} collection The collection to inspect.
28086     * @param {Function} [predicate=_.identity] The function invoked per iteration.
28087     * @param {number} [fromIndex=collection.length-1] The index to search from.
28088     * @returns {*} Returns the matched element, else `undefined`.
28089     * @example
28090     *
28091     * _.findLast([1, 2, 3, 4], function(n) {
28092     *   return n % 2 == 1;
28093     * });
28094     * // => 3
28095     */
28096    var findLast = createFind(findLastIndex);
28097
28098    /**
28099     * Creates a flattened array of values by running each element in `collection`
28100     * thru `iteratee` and flattening the mapped results. The iteratee is invoked
28101     * with three arguments: (value, index|key, collection).
28102     *
28103     * @static
28104     * @memberOf _
28105     * @since 4.0.0
28106     * @category Collection
28107     * @param {Array|Object} collection The collection to iterate over.
28108     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28109     * @returns {Array} Returns the new flattened array.
28110     * @example
28111     *
28112     * function duplicate(n) {
28113     *   return [n, n];
28114     * }
28115     *
28116     * _.flatMap([1, 2], duplicate);
28117     * // => [1, 1, 2, 2]
28118     */
28119    function flatMap(collection, iteratee) {
28120      return baseFlatten(map(collection, iteratee), 1);
28121    }
28122
28123    /**
28124     * This method is like `_.flatMap` except that it recursively flattens the
28125     * mapped results.
28126     *
28127     * @static
28128     * @memberOf _
28129     * @since 4.7.0
28130     * @category Collection
28131     * @param {Array|Object} collection The collection to iterate over.
28132     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28133     * @returns {Array} Returns the new flattened array.
28134     * @example
28135     *
28136     * function duplicate(n) {
28137     *   return [[[n, n]]];
28138     * }
28139     *
28140     * _.flatMapDeep([1, 2], duplicate);
28141     * // => [1, 1, 2, 2]
28142     */
28143    function flatMapDeep(collection, iteratee) {
28144      return baseFlatten(map(collection, iteratee), INFINITY);
28145    }
28146
28147    /**
28148     * This method is like `_.flatMap` except that it recursively flattens the
28149     * mapped results up to `depth` times.
28150     *
28151     * @static
28152     * @memberOf _
28153     * @since 4.7.0
28154     * @category Collection
28155     * @param {Array|Object} collection The collection to iterate over.
28156     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28157     * @param {number} [depth=1] The maximum recursion depth.
28158     * @returns {Array} Returns the new flattened array.
28159     * @example
28160     *
28161     * function duplicate(n) {
28162     *   return [[[n, n]]];
28163     * }
28164     *
28165     * _.flatMapDepth([1, 2], duplicate, 2);
28166     * // => [[1, 1], [2, 2]]
28167     */
28168    function flatMapDepth(collection, iteratee, depth) {
28169      depth = depth === undefined ? 1 : toInteger(depth);
28170      return baseFlatten(map(collection, iteratee), depth);
28171    }
28172
28173    /**
28174     * Iterates over elements of `collection` and invokes `iteratee` for each element.
28175     * The iteratee is invoked with three arguments: (value, index|key, collection).
28176     * Iteratee functions may exit iteration early by explicitly returning `false`.
28177     *
28178     * **Note:** As with other "Collections" methods, objects with a "length"
28179     * property are iterated like arrays. To avoid this behavior use `_.forIn`
28180     * or `_.forOwn` for object iteration.
28181     *
28182     * @static
28183     * @memberOf _
28184     * @since 0.1.0
28185     * @alias each
28186     * @category Collection
28187     * @param {Array|Object} collection The collection to iterate over.
28188     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28189     * @returns {Array|Object} Returns `collection`.
28190     * @see _.forEachRight
28191     * @example
28192     *
28193     * _.forEach([1, 2], function(value) {
28194     *   console.log(value);
28195     * });
28196     * // => Logs `1` then `2`.
28197     *
28198     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
28199     *   console.log(key);
28200     * });
28201     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
28202     */
28203    function forEach(collection, iteratee) {
28204      var func = isArray(collection) ? arrayEach : baseEach;
28205      return func(collection, getIteratee(iteratee, 3));
28206    }
28207
28208    /**
28209     * This method is like `_.forEach` except that it iterates over elements of
28210     * `collection` from right to left.
28211     *
28212     * @static
28213     * @memberOf _
28214     * @since 2.0.0
28215     * @alias eachRight
28216     * @category Collection
28217     * @param {Array|Object} collection The collection to iterate over.
28218     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28219     * @returns {Array|Object} Returns `collection`.
28220     * @see _.forEach
28221     * @example
28222     *
28223     * _.forEachRight([1, 2], function(value) {
28224     *   console.log(value);
28225     * });
28226     * // => Logs `2` then `1`.
28227     */
28228    function forEachRight(collection, iteratee) {
28229      var func = isArray(collection) ? arrayEachRight : baseEachRight;
28230      return func(collection, getIteratee(iteratee, 3));
28231    }
28232
28233    /**
28234     * Creates an object composed of keys generated from the results of running
28235     * each element of `collection` thru `iteratee`. The order of grouped values
28236     * is determined by the order they occur in `collection`. The corresponding
28237     * value of each key is an array of elements responsible for generating the
28238     * key. The iteratee is invoked with one argument: (value).
28239     *
28240     * @static
28241     * @memberOf _
28242     * @since 0.1.0
28243     * @category Collection
28244     * @param {Array|Object} collection The collection to iterate over.
28245     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
28246     * @returns {Object} Returns the composed aggregate object.
28247     * @example
28248     *
28249     * _.groupBy([6.1, 4.2, 6.3], Math.floor);
28250     * // => { '4': [4.2], '6': [6.1, 6.3] }
28251     *
28252     * // The `_.property` iteratee shorthand.
28253     * _.groupBy(['one', 'two', 'three'], 'length');
28254     * // => { '3': ['one', 'two'], '5': ['three'] }
28255     */
28256    var groupBy = createAggregator(function(result, value, key) {
28257      if (hasOwnProperty.call(result, key)) {
28258        result[key].push(value);
28259      } else {
28260        baseAssignValue(result, key, [value]);
28261      }
28262    });
28263
28264    /**
28265     * Checks if `value` is in `collection`. If `collection` is a string, it's
28266     * checked for a substring of `value`, otherwise
28267     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
28268     * is used for equality comparisons. If `fromIndex` is negative, it's used as
28269     * the offset from the end of `collection`.
28270     *
28271     * @static
28272     * @memberOf _
28273     * @since 0.1.0
28274     * @category Collection
28275     * @param {Array|Object|string} collection The collection to inspect.
28276     * @param {*} value The value to search for.
28277     * @param {number} [fromIndex=0] The index to search from.
28278     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
28279     * @returns {boolean} Returns `true` if `value` is found, else `false`.
28280     * @example
28281     *
28282     * _.includes([1, 2, 3], 1);
28283     * // => true
28284     *
28285     * _.includes([1, 2, 3], 1, 2);
28286     * // => false
28287     *
28288     * _.includes({ 'a': 1, 'b': 2 }, 1);
28289     * // => true
28290     *
28291     * _.includes('abcd', 'bc');
28292     * // => true
28293     */
28294    function includes(collection, value, fromIndex, guard) {
28295      collection = isArrayLike(collection) ? collection : values(collection);
28296      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;
28297
28298      var length = collection.length;
28299      if (fromIndex < 0) {
28300        fromIndex = nativeMax(length + fromIndex, 0);
28301      }
28302      return isString(collection)
28303        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
28304        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
28305    }
28306
28307    /**
28308     * Invokes the method at `path` of each element in `collection`, returning
28309     * an array of the results of each invoked method. Any additional arguments
28310     * are provided to each invoked method. If `path` is a function, it's invoked
28311     * for, and `this` bound to, each element in `collection`.
28312     *
28313     * @static
28314     * @memberOf _
28315     * @since 4.0.0
28316     * @category Collection
28317     * @param {Array|Object} collection The collection to iterate over.
28318     * @param {Array|Function|string} path The path of the method to invoke or
28319     *  the function invoked per iteration.
28320     * @param {...*} [args] The arguments to invoke each method with.
28321     * @returns {Array} Returns the array of results.
28322     * @example
28323     *
28324     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
28325     * // => [[1, 5, 7], [1, 2, 3]]
28326     *
28327     * _.invokeMap([123, 456], String.prototype.split, '');
28328     * // => [['1', '2', '3'], ['4', '5', '6']]
28329     */
28330    var invokeMap = baseRest(function(collection, path, args) {
28331      var index = -1,
28332          isFunc = typeof path == 'function',
28333          result = isArrayLike(collection) ? Array(collection.length) : [];
28334
28335      baseEach(collection, function(value) {
28336        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
28337      });
28338      return result;
28339    });
28340
28341    /**
28342     * Creates an object composed of keys generated from the results of running
28343     * each element of `collection` thru `iteratee`. The corresponding value of
28344     * each key is the last element responsible for generating the key. The
28345     * iteratee is invoked with one argument: (value).
28346     *
28347     * @static
28348     * @memberOf _
28349     * @since 4.0.0
28350     * @category Collection
28351     * @param {Array|Object} collection The collection to iterate over.
28352     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
28353     * @returns {Object} Returns the composed aggregate object.
28354     * @example
28355     *
28356     * var array = [
28357     *   { 'dir': 'left', 'code': 97 },
28358     *   { 'dir': 'right', 'code': 100 }
28359     * ];
28360     *
28361     * _.keyBy(array, function(o) {
28362     *   return String.fromCharCode(o.code);
28363     * });
28364     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
28365     *
28366     * _.keyBy(array, 'dir');
28367     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
28368     */
28369    var keyBy = createAggregator(function(result, value, key) {
28370      baseAssignValue(result, key, value);
28371    });
28372
28373    /**
28374     * Creates an array of values by running each element in `collection` thru
28375     * `iteratee`. The iteratee is invoked with three arguments:
28376     * (value, index|key, collection).
28377     *
28378     * Many lodash methods are guarded to work as iteratees for methods like
28379     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
28380     *
28381     * The guarded methods are:
28382     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
28383     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
28384     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
28385     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
28386     *
28387     * @static
28388     * @memberOf _
28389     * @since 0.1.0
28390     * @category Collection
28391     * @param {Array|Object} collection The collection to iterate over.
28392     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28393     * @returns {Array} Returns the new mapped array.
28394     * @example
28395     *
28396     * function square(n) {
28397     *   return n * n;
28398     * }
28399     *
28400     * _.map([4, 8], square);
28401     * // => [16, 64]
28402     *
28403     * _.map({ 'a': 4, 'b': 8 }, square);
28404     * // => [16, 64] (iteration order is not guaranteed)
28405     *
28406     * var users = [
28407     *   { 'user': 'barney' },
28408     *   { 'user': 'fred' }
28409     * ];
28410     *
28411     * // The `_.property` iteratee shorthand.
28412     * _.map(users, 'user');
28413     * // => ['barney', 'fred']
28414     */
28415    function map(collection, iteratee) {
28416      var func = isArray(collection) ? arrayMap : baseMap;
28417      return func(collection, getIteratee(iteratee, 3));
28418    }
28419
28420    /**
28421     * This method is like `_.sortBy` except that it allows specifying the sort
28422     * orders of the iteratees to sort by. If `orders` is unspecified, all values
28423     * are sorted in ascending order. Otherwise, specify an order of "desc" for
28424     * descending or "asc" for ascending sort order of corresponding values.
28425     *
28426     * @static
28427     * @memberOf _
28428     * @since 4.0.0
28429     * @category Collection
28430     * @param {Array|Object} collection The collection to iterate over.
28431     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
28432     *  The iteratees to sort by.
28433     * @param {string[]} [orders] The sort orders of `iteratees`.
28434     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
28435     * @returns {Array} Returns the new sorted array.
28436     * @example
28437     *
28438     * var users = [
28439     *   { 'user': 'fred',   'age': 48 },
28440     *   { 'user': 'barney', 'age': 34 },
28441     *   { 'user': 'fred',   'age': 40 },
28442     *   { 'user': 'barney', 'age': 36 }
28443     * ];
28444     *
28445     * // Sort by `user` in ascending order and by `age` in descending order.
28446     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
28447     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
28448     */
28449    function orderBy(collection, iteratees, orders, guard) {
28450      if (collection == null) {
28451        return [];
28452      }
28453      if (!isArray(iteratees)) {
28454        iteratees = iteratees == null ? [] : [iteratees];
28455      }
28456      orders = guard ? undefined : orders;
28457      if (!isArray(orders)) {
28458        orders = orders == null ? [] : [orders];
28459      }
28460      return baseOrderBy(collection, iteratees, orders);
28461    }
28462
28463    /**
28464     * Creates an array of elements split into two groups, the first of which
28465     * contains elements `predicate` returns truthy for, the second of which
28466     * contains elements `predicate` returns falsey for. The predicate is
28467     * invoked with one argument: (value).
28468     *
28469     * @static
28470     * @memberOf _
28471     * @since 3.0.0
28472     * @category Collection
28473     * @param {Array|Object} collection The collection to iterate over.
28474     * @param {Function} [predicate=_.identity] The function invoked per iteration.
28475     * @returns {Array} Returns the array of grouped elements.
28476     * @example
28477     *
28478     * var users = [
28479     *   { 'user': 'barney',  'age': 36, 'active': false },
28480     *   { 'user': 'fred',    'age': 40, 'active': true },
28481     *   { 'user': 'pebbles', 'age': 1,  'active': false }
28482     * ];
28483     *
28484     * _.partition(users, function(o) { return o.active; });
28485     * // => objects for [['fred'], ['barney', 'pebbles']]
28486     *
28487     * // The `_.matches` iteratee shorthand.
28488     * _.partition(users, { 'age': 1, 'active': false });
28489     * // => objects for [['pebbles'], ['barney', 'fred']]
28490     *
28491     * // The `_.matchesProperty` iteratee shorthand.
28492     * _.partition(users, ['active', false]);
28493     * // => objects for [['barney', 'pebbles'], ['fred']]
28494     *
28495     * // The `_.property` iteratee shorthand.
28496     * _.partition(users, 'active');
28497     * // => objects for [['fred'], ['barney', 'pebbles']]
28498     */
28499    var partition = createAggregator(function(result, value, key) {
28500      result[key ? 0 : 1].push(value);
28501    }, function() { return [[], []]; });
28502
28503    /**
28504     * Reduces `collection` to a value which is the accumulated result of running
28505     * each element in `collection` thru `iteratee`, where each successive
28506     * invocation is supplied the return value of the previous. If `accumulator`
28507     * is not given, the first element of `collection` is used as the initial
28508     * value. The iteratee is invoked with four arguments:
28509     * (accumulator, value, index|key, collection).
28510     *
28511     * Many lodash methods are guarded to work as iteratees for methods like
28512     * `_.reduce`, `_.reduceRight`, and `_.transform`.
28513     *
28514     * The guarded methods are:
28515     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
28516     * and `sortBy`
28517     *
28518     * @static
28519     * @memberOf _
28520     * @since 0.1.0
28521     * @category Collection
28522     * @param {Array|Object} collection The collection to iterate over.
28523     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28524     * @param {*} [accumulator] The initial value.
28525     * @returns {*} Returns the accumulated value.
28526     * @see _.reduceRight
28527     * @example
28528     *
28529     * _.reduce([1, 2], function(sum, n) {
28530     *   return sum + n;
28531     * }, 0);
28532     * // => 3
28533     *
28534     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
28535     *   (result[value] || (result[value] = [])).push(key);
28536     *   return result;
28537     * }, {});
28538     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
28539     */
28540    function reduce(collection, iteratee, accumulator) {
28541      var func = isArray(collection) ? arrayReduce : baseReduce,
28542          initAccum = arguments.length < 3;
28543
28544      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
28545    }
28546
28547    /**
28548     * This method is like `_.reduce` except that it iterates over elements of
28549     * `collection` from right to left.
28550     *
28551     * @static
28552     * @memberOf _
28553     * @since 0.1.0
28554     * @category Collection
28555     * @param {Array|Object} collection The collection to iterate over.
28556     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28557     * @param {*} [accumulator] The initial value.
28558     * @returns {*} Returns the accumulated value.
28559     * @see _.reduce
28560     * @example
28561     *
28562     * var array = [[0, 1], [2, 3], [4, 5]];
28563     *
28564     * _.reduceRight(array, function(flattened, other) {
28565     *   return flattened.concat(other);
28566     * }, []);
28567     * // => [4, 5, 2, 3, 0, 1]
28568     */
28569    function reduceRight(collection, iteratee, accumulator) {
28570      var func = isArray(collection) ? arrayReduceRight : baseReduce,
28571          initAccum = arguments.length < 3;
28572
28573      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
28574    }
28575
28576    /**
28577     * The opposite of `_.filter`; this method returns the elements of `collection`
28578     * that `predicate` does **not** return truthy for.
28579     *
28580     * @static
28581     * @memberOf _
28582     * @since 0.1.0
28583     * @category Collection
28584     * @param {Array|Object} collection The collection to iterate over.
28585     * @param {Function} [predicate=_.identity] The function invoked per iteration.
28586     * @returns {Array} Returns the new filtered array.
28587     * @see _.filter
28588     * @example
28589     *
28590     * var users = [
28591     *   { 'user': 'barney', 'age': 36, 'active': false },
28592     *   { 'user': 'fred',   'age': 40, 'active': true }
28593     * ];
28594     *
28595     * _.reject(users, function(o) { return !o.active; });
28596     * // => objects for ['fred']
28597     *
28598     * // The `_.matches` iteratee shorthand.
28599     * _.reject(users, { 'age': 40, 'active': true });
28600     * // => objects for ['barney']
28601     *
28602     * // The `_.matchesProperty` iteratee shorthand.
28603     * _.reject(users, ['active', false]);
28604     * // => objects for ['fred']
28605     *
28606     * // The `_.property` iteratee shorthand.
28607     * _.reject(users, 'active');
28608     * // => objects for ['barney']
28609     */
28610    function reject(collection, predicate) {
28611      var func = isArray(collection) ? arrayFilter : baseFilter;
28612      return func(collection, negate(getIteratee(predicate, 3)));
28613    }
28614
28615    /**
28616     * Gets a random element from `collection`.
28617     *
28618     * @static
28619     * @memberOf _
28620     * @since 2.0.0
28621     * @category Collection
28622     * @param {Array|Object} collection The collection to sample.
28623     * @returns {*} Returns the random element.
28624     * @example
28625     *
28626     * _.sample([1, 2, 3, 4]);
28627     * // => 2
28628     */
28629    function sample(collection) {
28630      var func = isArray(collection) ? arraySample : baseSample;
28631      return func(collection);
28632    }
28633
28634    /**
28635     * Gets `n` random elements at unique keys from `collection` up to the
28636     * size of `collection`.
28637     *
28638     * @static
28639     * @memberOf _
28640     * @since 4.0.0
28641     * @category Collection
28642     * @param {Array|Object} collection The collection to sample.
28643     * @param {number} [n=1] The number of elements to sample.
28644     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
28645     * @returns {Array} Returns the random elements.
28646     * @example
28647     *
28648     * _.sampleSize([1, 2, 3], 2);
28649     * // => [3, 1]
28650     *
28651     * _.sampleSize([1, 2, 3], 4);
28652     * // => [2, 3, 1]
28653     */
28654    function sampleSize(collection, n, guard) {
28655      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
28656        n = 1;
28657      } else {
28658        n = toInteger(n);
28659      }
28660      var func = isArray(collection) ? arraySampleSize : baseSampleSize;
28661      return func(collection, n);
28662    }
28663
28664    /**
28665     * Creates an array of shuffled values, using a version of the
28666     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
28667     *
28668     * @static
28669     * @memberOf _
28670     * @since 0.1.0
28671     * @category Collection
28672     * @param {Array|Object} collection The collection to shuffle.
28673     * @returns {Array} Returns the new shuffled array.
28674     * @example
28675     *
28676     * _.shuffle([1, 2, 3, 4]);
28677     * // => [4, 1, 3, 2]
28678     */
28679    function shuffle(collection) {
28680      var func = isArray(collection) ? arrayShuffle : baseShuffle;
28681      return func(collection);
28682    }
28683
28684    /**
28685     * Gets the size of `collection` by returning its length for array-like
28686     * values or the number of own enumerable string keyed properties for objects.
28687     *
28688     * @static
28689     * @memberOf _
28690     * @since 0.1.0
28691     * @category Collection
28692     * @param {Array|Object|string} collection The collection to inspect.
28693     * @returns {number} Returns the collection size.
28694     * @example
28695     *
28696     * _.size([1, 2, 3]);
28697     * // => 3
28698     *
28699     * _.size({ 'a': 1, 'b': 2 });
28700     * // => 2
28701     *
28702     * _.size('pebbles');
28703     * // => 7
28704     */
28705    function size(collection) {
28706      if (collection == null) {
28707        return 0;
28708      }
28709      if (isArrayLike(collection)) {
28710        return isString(collection) ? stringSize(collection) : collection.length;
28711      }
28712      var tag = getTag(collection);
28713      if (tag == mapTag || tag == setTag) {
28714        return collection.size;
28715      }
28716      return baseKeys(collection).length;
28717    }
28718
28719    /**
28720     * Checks if `predicate` returns truthy for **any** element of `collection`.
28721     * Iteration is stopped once `predicate` returns truthy. The predicate is
28722     * invoked with three arguments: (value, index|key, collection).
28723     *
28724     * @static
28725     * @memberOf _
28726     * @since 0.1.0
28727     * @category Collection
28728     * @param {Array|Object} collection The collection to iterate over.
28729     * @param {Function} [predicate=_.identity] The function invoked per iteration.
28730     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
28731     * @returns {boolean} Returns `true` if any element passes the predicate check,
28732     *  else `false`.
28733     * @example
28734     *
28735     * _.some([null, 0, 'yes', false], Boolean);
28736     * // => true
28737     *
28738     * var users = [
28739     *   { 'user': 'barney', 'active': true },
28740     *   { 'user': 'fred',   'active': false }
28741     * ];
28742     *
28743     * // The `_.matches` iteratee shorthand.
28744     * _.some(users, { 'user': 'barney', 'active': false });
28745     * // => false
28746     *
28747     * // The `_.matchesProperty` iteratee shorthand.
28748     * _.some(users, ['active', false]);
28749     * // => true
28750     *
28751     * // The `_.property` iteratee shorthand.
28752     * _.some(users, 'active');
28753     * // => true
28754     */
28755    function some(collection, predicate, guard) {
28756      var func = isArray(collection) ? arraySome : baseSome;
28757      if (guard && isIterateeCall(collection, predicate, guard)) {
28758        predicate = undefined;
28759      }
28760      return func(collection, getIteratee(predicate, 3));
28761    }
28762
28763    /**
28764     * Creates an array of elements, sorted in ascending order by the results of
28765     * running each element in a collection thru each iteratee. This method
28766     * performs a stable sort, that is, it preserves the original sort order of
28767     * equal elements. The iteratees are invoked with one argument: (value).
28768     *
28769     * @static
28770     * @memberOf _
28771     * @since 0.1.0
28772     * @category Collection
28773     * @param {Array|Object} collection The collection to iterate over.
28774     * @param {...(Function|Function[])} [iteratees=[_.identity]]
28775     *  The iteratees to sort by.
28776     * @returns {Array} Returns the new sorted array.
28777     * @example
28778     *
28779     * var users = [
28780     *   { 'user': 'fred',   'age': 48 },
28781     *   { 'user': 'barney', 'age': 36 },
28782     *   { 'user': 'fred',   'age': 30 },
28783     *   { 'user': 'barney', 'age': 34 }
28784     * ];
28785     *
28786     * _.sortBy(users, [function(o) { return o.user; }]);
28787     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
28788     *
28789     * _.sortBy(users, ['user', 'age']);
28790     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
28791     */
28792    var sortBy = baseRest(function(collection, iteratees) {
28793      if (collection == null) {
28794        return [];
28795      }
28796      var length = iteratees.length;
28797      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
28798        iteratees = [];
28799      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
28800        iteratees = [iteratees[0]];
28801      }
28802      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
28803    });
28804
28805    /*------------------------------------------------------------------------*/
28806
28807    /**
28808     * Gets the timestamp of the number of milliseconds that have elapsed since
28809     * the Unix epoch (1 January 1970 00:00:00 UTC).
28810     *
28811     * @static
28812     * @memberOf _
28813     * @since 2.4.0
28814     * @category Date
28815     * @returns {number} Returns the timestamp.
28816     * @example
28817     *
28818     * _.defer(function(stamp) {
28819     *   console.log(_.now() - stamp);
28820     * }, _.now());
28821     * // => Logs the number of milliseconds it took for the deferred invocation.
28822     */
28823    var now = ctxNow || function() {
28824      return root.Date.now();
28825    };
28826
28827    /*------------------------------------------------------------------------*/
28828
28829    /**
28830     * The opposite of `_.before`; this method creates a function that invokes
28831     * `func` once it's called `n` or more times.
28832     *
28833     * @static
28834     * @memberOf _
28835     * @since 0.1.0
28836     * @category Function
28837     * @param {number} n The number of calls before `func` is invoked.
28838     * @param {Function} func The function to restrict.
28839     * @returns {Function} Returns the new restricted function.
28840     * @example
28841     *
28842     * var saves = ['profile', 'settings'];
28843     *
28844     * var done = _.after(saves.length, function() {
28845     *   console.log('done saving!');
28846     * });
28847     *
28848     * _.forEach(saves, function(type) {
28849     *   asyncSave({ 'type': type, 'complete': done });
28850     * });
28851     * // => Logs 'done saving!' after the two async saves have completed.
28852     */
28853    function after(n, func) {
28854      if (typeof func != 'function') {
28855        throw new TypeError(FUNC_ERROR_TEXT);
28856      }
28857      n = toInteger(n);
28858      return function() {
28859        if (--n < 1) {
28860          return func.apply(this, arguments);
28861        }
28862      };
28863    }
28864
28865    /**
28866     * Creates a function that invokes `func`, with up to `n` arguments,
28867     * ignoring any additional arguments.
28868     *
28869     * @static
28870     * @memberOf _
28871     * @since 3.0.0
28872     * @category Function
28873     * @param {Function} func The function to cap arguments for.
28874     * @param {number} [n=func.length] The arity cap.
28875     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
28876     * @returns {Function} Returns the new capped function.
28877     * @example
28878     *
28879     * _.map(['6', '8', '10'], _.ary(parseInt, 1));
28880     * // => [6, 8, 10]
28881     */
28882    function ary(func, n, guard) {
28883      n = guard ? undefined : n;
28884      n = (func && n == null) ? func.length : n;
28885      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
28886    }
28887
28888    /**
28889     * Creates a function that invokes `func`, with the `this` binding and arguments
28890     * of the created function, while it's called less than `n` times. Subsequent
28891     * calls to the created function return the result of the last `func` invocation.
28892     *
28893     * @static
28894     * @memberOf _
28895     * @since 3.0.0
28896     * @category Function
28897     * @param {number} n The number of calls at which `func` is no longer invoked.
28898     * @param {Function} func The function to restrict.
28899     * @returns {Function} Returns the new restricted function.
28900     * @example
28901     *
28902     * jQuery(element).on('click', _.before(5, addContactToList));
28903     * // => Allows adding up to 4 contacts to the list.
28904     */
28905    function before(n, func) {
28906      var result;
28907      if (typeof func != 'function') {
28908        throw new TypeError(FUNC_ERROR_TEXT);
28909      }
28910      n = toInteger(n);
28911      return function() {
28912        if (--n > 0) {
28913          result = func.apply(this, arguments);
28914        }
28915        if (n <= 1) {
28916          func = undefined;
28917        }
28918        return result;
28919      };
28920    }
28921
28922    /**
28923     * Creates a function that invokes `func` with the `this` binding of `thisArg`
28924     * and `partials` prepended to the arguments it receives.
28925     *
28926     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
28927     * may be used as a placeholder for partially applied arguments.
28928     *
28929     * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
28930     * property of bound functions.
28931     *
28932     * @static
28933     * @memberOf _
28934     * @since 0.1.0
28935     * @category Function
28936     * @param {Function} func The function to bind.
28937     * @param {*} thisArg The `this` binding of `func`.
28938     * @param {...*} [partials] The arguments to be partially applied.
28939     * @returns {Function} Returns the new bound function.
28940     * @example
28941     *
28942     * function greet(greeting, punctuation) {
28943     *   return greeting + ' ' + this.user + punctuation;
28944     * }
28945     *
28946     * var object = { 'user': 'fred' };
28947     *
28948     * var bound = _.bind(greet, object, 'hi');
28949     * bound('!');
28950     * // => 'hi fred!'
28951     *
28952     * // Bound with placeholders.
28953     * var bound = _.bind(greet, object, _, '!');
28954     * bound('hi');
28955     * // => 'hi fred!'
28956     */
28957    var bind = baseRest(function(func, thisArg, partials) {
28958      var bitmask = WRAP_BIND_FLAG;
28959      if (partials.length) {
28960        var holders = replaceHolders(partials, getHolder(bind));
28961        bitmask |= WRAP_PARTIAL_FLAG;
28962      }
28963      return createWrap(func, bitmask, thisArg, partials, holders);
28964    });
28965
28966    /**
28967     * Creates a function that invokes the method at `object[key]` with `partials`
28968     * prepended to the arguments it receives.
28969     *
28970     * This method differs from `_.bind` by allowing bound functions to reference
28971     * methods that may be redefined or don't yet exist. See
28972     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
28973     * for more details.
28974     *
28975     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
28976     * builds, may be used as a placeholder for partially applied arguments.
28977     *
28978     * @static
28979     * @memberOf _
28980     * @since 0.10.0
28981     * @category Function
28982     * @param {Object} object The object to invoke the method on.
28983     * @param {string} key The key of the method.
28984     * @param {...*} [partials] The arguments to be partially applied.
28985     * @returns {Function} Returns the new bound function.
28986     * @example
28987     *
28988     * var object = {
28989     *   'user': 'fred',
28990     *   'greet': function(greeting, punctuation) {
28991     *     return greeting + ' ' + this.user + punctuation;
28992     *   }
28993     * };
28994     *
28995     * var bound = _.bindKey(object, 'greet', 'hi');
28996     * bound('!');
28997     * // => 'hi fred!'
28998     *
28999     * object.greet = function(greeting, punctuation) {
29000     *   return greeting + 'ya ' + this.user + punctuation;
29001     * };
29002     *
29003     * bound('!');
29004     * // => 'hiya fred!'
29005     *
29006     * // Bound with placeholders.
29007     * var bound = _.bindKey(object, 'greet', _, '!');
29008     * bound('hi');
29009     * // => 'hiya fred!'
29010     */
29011    var bindKey = baseRest(function(object, key, partials) {
29012      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
29013      if (partials.length) {
29014        var holders = replaceHolders(partials, getHolder(bindKey));
29015        bitmask |= WRAP_PARTIAL_FLAG;
29016      }
29017      return createWrap(key, bitmask, object, partials, holders);
29018    });
29019
29020    /**
29021     * Creates a function that accepts arguments of `func` and either invokes
29022     * `func` returning its result, if at least `arity` number of arguments have
29023     * been provided, or returns a function that accepts the remaining `func`
29024     * arguments, and so on. The arity of `func` may be specified if `func.length`
29025     * is not sufficient.
29026     *
29027     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
29028     * may be used as a placeholder for provided arguments.
29029     *
29030     * **Note:** This method doesn't set the "length" property of curried functions.
29031     *
29032     * @static
29033     * @memberOf _
29034     * @since 2.0.0
29035     * @category Function
29036     * @param {Function} func The function to curry.
29037     * @param {number} [arity=func.length] The arity of `func`.
29038     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
29039     * @returns {Function} Returns the new curried function.
29040     * @example
29041     *
29042     * var abc = function(a, b, c) {
29043     *   return [a, b, c];
29044     * };
29045     *
29046     * var curried = _.curry(abc);
29047     *
29048     * curried(1)(2)(3);
29049     * // => [1, 2, 3]
29050     *
29051     * curried(1, 2)(3);
29052     * // => [1, 2, 3]
29053     *
29054     * curried(1, 2, 3);
29055     * // => [1, 2, 3]
29056     *
29057     * // Curried with placeholders.
29058     * curried(1)(_, 3)(2);
29059     * // => [1, 2, 3]
29060     */
29061    function curry(func, arity, guard) {
29062      arity = guard ? undefined : arity;
29063      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
29064      result.placeholder = curry.placeholder;
29065      return result;
29066    }
29067
29068    /**
29069     * This method is like `_.curry` except that arguments are applied to `func`
29070     * in the manner of `_.partialRight` instead of `_.partial`.
29071     *
29072     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
29073     * builds, may be used as a placeholder for provided arguments.
29074     *
29075     * **Note:** This method doesn't set the "length" property of curried functions.
29076     *
29077     * @static
29078     * @memberOf _
29079     * @since 3.0.0
29080     * @category Function
29081     * @param {Function} func The function to curry.
29082     * @param {number} [arity=func.length] The arity of `func`.
29083     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
29084     * @returns {Function} Returns the new curried function.
29085     * @example
29086     *
29087     * var abc = function(a, b, c) {
29088     *   return [a, b, c];
29089     * };
29090     *
29091     * var curried = _.curryRight(abc);
29092     *
29093     * curried(3)(2)(1);
29094     * // => [1, 2, 3]
29095     *
29096     * curried(2, 3)(1);
29097     * // => [1, 2, 3]
29098     *
29099     * curried(1, 2, 3);
29100     * // => [1, 2, 3]
29101     *
29102     * // Curried with placeholders.
29103     * curried(3)(1, _)(2);
29104     * // => [1, 2, 3]
29105     */
29106    function curryRight(func, arity, guard) {
29107      arity = guard ? undefined : arity;
29108      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
29109      result.placeholder = curryRight.placeholder;
29110      return result;
29111    }
29112
29113    /**
29114     * Creates a debounced function that delays invoking `func` until after `wait`
29115     * milliseconds have elapsed since the last time the debounced function was
29116     * invoked. The debounced function comes with a `cancel` method to cancel
29117     * delayed `func` invocations and a `flush` method to immediately invoke them.
29118     * Provide `options` to indicate whether `func` should be invoked on the
29119     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
29120     * with the last arguments provided to the debounced function. Subsequent
29121     * calls to the debounced function return the result of the last `func`
29122     * invocation.
29123     *
29124     * **Note:** If `leading` and `trailing` options are `true`, `func` is
29125     * invoked on the trailing edge of the timeout only if the debounced function
29126     * is invoked more than once during the `wait` timeout.
29127     *
29128     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
29129     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
29130     *
29131     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
29132     * for details over the differences between `_.debounce` and `_.throttle`.
29133     *
29134     * @static
29135     * @memberOf _
29136     * @since 0.1.0
29137     * @category Function
29138     * @param {Function} func The function to debounce.
29139     * @param {number} [wait=0] The number of milliseconds to delay.
29140     * @param {Object} [options={}] The options object.
29141     * @param {boolean} [options.leading=false]
29142     *  Specify invoking on the leading edge of the timeout.
29143     * @param {number} [options.maxWait]
29144     *  The maximum time `func` is allowed to be delayed before it's invoked.
29145     * @param {boolean} [options.trailing=true]
29146     *  Specify invoking on the trailing edge of the timeout.
29147     * @returns {Function} Returns the new debounced function.
29148     * @example
29149     *
29150     * // Avoid costly calculations while the window size is in flux.
29151     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
29152     *
29153     * // Invoke `sendMail` when clicked, debouncing subsequent calls.
29154     * jQuery(element).on('click', _.debounce(sendMail, 300, {
29155     *   'leading': true,
29156     *   'trailing': false
29157     * }));
29158     *
29159     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
29160     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
29161     * var source = new EventSource('/stream');
29162     * jQuery(source).on('message', debounced);
29163     *
29164     * // Cancel the trailing debounced invocation.
29165     * jQuery(window).on('popstate', debounced.cancel);
29166     */
29167    function debounce(func, wait, options) {
29168      var lastArgs,
29169          lastThis,
29170          maxWait,
29171          result,
29172          timerId,
29173          lastCallTime,
29174          lastInvokeTime = 0,
29175          leading = false,
29176          maxing = false,
29177          trailing = true;
29178
29179      if (typeof func != 'function') {
29180        throw new TypeError(FUNC_ERROR_TEXT);
29181      }
29182      wait = toNumber(wait) || 0;
29183      if (isObject(options)) {
29184        leading = !!options.leading;
29185        maxing = 'maxWait' in options;
29186        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
29187        trailing = 'trailing' in options ? !!options.trailing : trailing;
29188      }
29189
29190      function invokeFunc(time) {
29191        var args = lastArgs,
29192            thisArg = lastThis;
29193
29194        lastArgs = lastThis = undefined;
29195        lastInvokeTime = time;
29196        result = func.apply(thisArg, args);
29197        return result;
29198      }
29199
29200      function leadingEdge(time) {
29201        // Reset any `maxWait` timer.
29202        lastInvokeTime = time;
29203        // Start the timer for the trailing edge.
29204        timerId = setTimeout(timerExpired, wait);
29205        // Invoke the leading edge.
29206        return leading ? invokeFunc(time) : result;
29207      }
29208
29209      function remainingWait(time) {
29210        var timeSinceLastCall = time - lastCallTime,
29211            timeSinceLastInvoke = time - lastInvokeTime,
29212            timeWaiting = wait - timeSinceLastCall;
29213
29214        return maxing
29215          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
29216          : timeWaiting;
29217      }
29218
29219      function shouldInvoke(time) {
29220        var timeSinceLastCall = time - lastCallTime,
29221            timeSinceLastInvoke = time - lastInvokeTime;
29222
29223        // Either this is the first call, activity has stopped and we're at the
29224        // trailing edge, the system time has gone backwards and we're treating
29225        // it as the trailing edge, or we've hit the `maxWait` limit.
29226        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
29227          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
29228      }
29229
29230      function timerExpired() {
29231        var time = now();
29232        if (shouldInvoke(time)) {
29233          return trailingEdge(time);
29234        }
29235        // Restart the timer.
29236        timerId = setTimeout(timerExpired, remainingWait(time));
29237      }
29238
29239      function trailingEdge(time) {
29240        timerId = undefined;
29241
29242        // Only invoke if we have `lastArgs` which means `func` has been
29243        // debounced at least once.
29244        if (trailing && lastArgs) {
29245          return invokeFunc(time);
29246        }
29247        lastArgs = lastThis = undefined;
29248        return result;
29249      }
29250
29251      function cancel() {
29252        if (timerId !== undefined) {
29253          clearTimeout(timerId);
29254        }
29255        lastInvokeTime = 0;
29256        lastArgs = lastCallTime = lastThis = timerId = undefined;
29257      }
29258
29259      function flush() {
29260        return timerId === undefined ? result : trailingEdge(now());
29261      }
29262
29263      function debounced() {
29264        var time = now(),
29265            isInvoking = shouldInvoke(time);
29266
29267        lastArgs = arguments;
29268        lastThis = this;
29269        lastCallTime = time;
29270
29271        if (isInvoking) {
29272          if (timerId === undefined) {
29273            return leadingEdge(lastCallTime);
29274          }
29275          if (maxing) {
29276            // Handle invocations in a tight loop.
29277            clearTimeout(timerId);
29278            timerId = setTimeout(timerExpired, wait);
29279            return invokeFunc(lastCallTime);
29280          }
29281        }
29282        if (timerId === undefined) {
29283          timerId = setTimeout(timerExpired, wait);
29284        }
29285        return result;
29286      }
29287      debounced.cancel = cancel;
29288      debounced.flush = flush;
29289      return debounced;
29290    }
29291
29292    /**
29293     * Defers invoking the `func` until the current call stack has cleared. Any
29294     * additional arguments are provided to `func` when it's invoked.
29295     *
29296     * @static
29297     * @memberOf _
29298     * @since 0.1.0
29299     * @category Function
29300     * @param {Function} func The function to defer.
29301     * @param {...*} [args] The arguments to invoke `func` with.
29302     * @returns {number} Returns the timer id.
29303     * @example
29304     *
29305     * _.defer(function(text) {
29306     *   console.log(text);
29307     * }, 'deferred');
29308     * // => Logs 'deferred' after one millisecond.
29309     */
29310    var defer = baseRest(function(func, args) {
29311      return baseDelay(func, 1, args);
29312    });
29313
29314    /**
29315     * Invokes `func` after `wait` milliseconds. Any additional arguments are
29316     * provided to `func` when it's invoked.
29317     *
29318     * @static
29319     * @memberOf _
29320     * @since 0.1.0
29321     * @category Function
29322     * @param {Function} func The function to delay.
29323     * @param {number} wait The number of milliseconds to delay invocation.
29324     * @param {...*} [args] The arguments to invoke `func` with.
29325     * @returns {number} Returns the timer id.
29326     * @example
29327     *
29328     * _.delay(function(text) {
29329     *   console.log(text);
29330     * }, 1000, 'later');
29331     * // => Logs 'later' after one second.
29332     */
29333    var delay = baseRest(function(func, wait, args) {
29334      return baseDelay(func, toNumber(wait) || 0, args);
29335    });
29336
29337    /**
29338     * Creates a function that invokes `func` with arguments reversed.
29339     *
29340     * @static
29341     * @memberOf _
29342     * @since 4.0.0
29343     * @category Function
29344     * @param {Function} func The function to flip arguments for.
29345     * @returns {Function} Returns the new flipped function.
29346     * @example
29347     *
29348     * var flipped = _.flip(function() {
29349     *   return _.toArray(arguments);
29350     * });
29351     *
29352     * flipped('a', 'b', 'c', 'd');
29353     * // => ['d', 'c', 'b', 'a']
29354     */
29355    function flip(func) {
29356      return createWrap(func, WRAP_FLIP_FLAG);
29357    }
29358
29359    /**
29360     * Creates a function that memoizes the result of `func`. If `resolver` is
29361     * provided, it determines the cache key for storing the result based on the
29362     * arguments provided to the memoized function. By default, the first argument
29363     * provided to the memoized function is used as the map cache key. The `func`
29364     * is invoked with the `this` binding of the memoized function.
29365     *
29366     * **Note:** The cache is exposed as the `cache` property on the memoized
29367     * function. Its creation may be customized by replacing the `_.memoize.Cache`
29368     * constructor with one whose instances implement the
29369     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
29370     * method interface of `clear`, `delete`, `get`, `has`, and `set`.
29371     *
29372     * @static
29373     * @memberOf _
29374     * @since 0.1.0
29375     * @category Function
29376     * @param {Function} func The function to have its output memoized.
29377     * @param {Function} [resolver] The function to resolve the cache key.
29378     * @returns {Function} Returns the new memoized function.
29379     * @example
29380     *
29381     * var object = { 'a': 1, 'b': 2 };
29382     * var other = { 'c': 3, 'd': 4 };
29383     *
29384     * var values = _.memoize(_.values);
29385     * values(object);
29386     * // => [1, 2]
29387     *
29388     * values(other);
29389     * // => [3, 4]
29390     *
29391     * object.a = 2;
29392     * values(object);
29393     * // => [1, 2]
29394     *
29395     * // Modify the result cache.
29396     * values.cache.set(object, ['a', 'b']);
29397     * values(object);
29398     * // => ['a', 'b']
29399     *
29400     * // Replace `_.memoize.Cache`.
29401     * _.memoize.Cache = WeakMap;
29402     */
29403    function memoize(func, resolver) {
29404      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
29405        throw new TypeError(FUNC_ERROR_TEXT);
29406      }
29407      var memoized = function() {
29408        var args = arguments,
29409            key = resolver ? resolver.apply(this, args) : args[0],
29410            cache = memoized.cache;
29411
29412        if (cache.has(key)) {
29413          return cache.get(key);
29414        }
29415        var result = func.apply(this, args);
29416        memoized.cache = cache.set(key, result) || cache;
29417        return result;
29418      };
29419      memoized.cache = new (memoize.Cache || MapCache);
29420      return memoized;
29421    }
29422
29423    // Expose `MapCache`.
29424    memoize.Cache = MapCache;
29425
29426    /**
29427     * Creates a function that negates the result of the predicate `func`. The
29428     * `func` predicate is invoked with the `this` binding and arguments of the
29429     * created function.
29430     *
29431     * @static
29432     * @memberOf _
29433     * @since 3.0.0
29434     * @category Function
29435     * @param {Function} predicate The predicate to negate.
29436     * @returns {Function} Returns the new negated function.
29437     * @example
29438     *
29439     * function isEven(n) {
29440     *   return n % 2 == 0;
29441     * }
29442     *
29443     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
29444     * // => [1, 3, 5]
29445     */
29446    function negate(predicate) {
29447      if (typeof predicate != 'function') {
29448        throw new TypeError(FUNC_ERROR_TEXT);
29449      }
29450      return function() {
29451        var args = arguments;
29452        switch (args.length) {
29453          case 0: return !predicate.call(this);
29454          case 1: return !predicate.call(this, args[0]);
29455          case 2: return !predicate.call(this, args[0], args[1]);
29456          case 3: return !predicate.call(this, args[0], args[1], args[2]);
29457        }
29458        return !predicate.apply(this, args);
29459      };
29460    }
29461
29462    /**
29463     * Creates a function that is restricted to invoking `func` once. Repeat calls
29464     * to the function return the value of the first invocation. The `func` is
29465     * invoked with the `this` binding and arguments of the created function.
29466     *
29467     * @static
29468     * @memberOf _
29469     * @since 0.1.0
29470     * @category Function
29471     * @param {Function} func The function to restrict.
29472     * @returns {Function} Returns the new restricted function.
29473     * @example
29474     *
29475     * var initialize = _.once(createApplication);
29476     * initialize();
29477     * initialize();
29478     * // => `createApplication` is invoked once
29479     */
29480    function once(func) {
29481      return before(2, func);
29482    }
29483
29484    /**
29485     * Creates a function that invokes `func` with its arguments transformed.
29486     *
29487     * @static
29488     * @since 4.0.0
29489     * @memberOf _
29490     * @category Function
29491     * @param {Function} func The function to wrap.
29492     * @param {...(Function|Function[])} [transforms=[_.identity]]
29493     *  The argument transforms.
29494     * @returns {Function} Returns the new function.
29495     * @example
29496     *
29497     * function doubled(n) {
29498     *   return n * 2;
29499     * }
29500     *
29501     * function square(n) {
29502     *   return n * n;
29503     * }
29504     *
29505     * var func = _.overArgs(function(x, y) {
29506     *   return [x, y];
29507     * }, [square, doubled]);
29508     *
29509     * func(9, 3);
29510     * // => [81, 6]
29511     *
29512     * func(10, 5);
29513     * // => [100, 10]
29514     */
29515    var overArgs = castRest(function(func, transforms) {
29516      transforms = (transforms.length == 1 && isArray(transforms[0]))
29517        ? arrayMap(transforms[0], baseUnary(getIteratee()))
29518        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));
29519
29520      var funcsLength = transforms.length;
29521      return baseRest(function(args) {
29522        var index = -1,
29523            length = nativeMin(args.length, funcsLength);
29524
29525        while (++index < length) {
29526          args[index] = transforms[index].call(this, args[index]);
29527        }
29528        return apply(func, this, args);
29529      });
29530    });
29531
29532    /**
29533     * Creates a function that invokes `func` with `partials` prepended to the
29534     * arguments it receives. This method is like `_.bind` except it does **not**
29535     * alter the `this` binding.
29536     *
29537     * The `_.partial.placeholder` value, which defaults to `_` in monolithic
29538     * builds, may be used as a placeholder for partially applied arguments.
29539     *
29540     * **Note:** This method doesn't set the "length" property of partially
29541     * applied functions.
29542     *
29543     * @static
29544     * @memberOf _
29545     * @since 0.2.0
29546     * @category Function
29547     * @param {Function} func The function to partially apply arguments to.
29548     * @param {...*} [partials] The arguments to be partially applied.
29549     * @returns {Function} Returns the new partially applied function.
29550     * @example
29551     *
29552     * function greet(greeting, name) {
29553     *   return greeting + ' ' + name;
29554     * }
29555     *
29556     * var sayHelloTo = _.partial(greet, 'hello');
29557     * sayHelloTo('fred');
29558     * // => 'hello fred'
29559     *
29560     * // Partially applied with placeholders.
29561     * var greetFred = _.partial(greet, _, 'fred');
29562     * greetFred('hi');
29563     * // => 'hi fred'
29564     */
29565    var partial = baseRest(function(func, partials) {
29566      var holders = replaceHolders(partials, getHolder(partial));
29567      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
29568    });
29569
29570    /**
29571     * This method is like `_.partial` except that partially applied arguments
29572     * are appended to the arguments it receives.
29573     *
29574     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
29575     * builds, may be used as a placeholder for partially applied arguments.
29576     *
29577     * **Note:** This method doesn't set the "length" property of partially
29578     * applied functions.
29579     *
29580     * @static
29581     * @memberOf _
29582     * @since 1.0.0
29583     * @category Function
29584     * @param {Function} func The function to partially apply arguments to.
29585     * @param {...*} [partials] The arguments to be partially applied.
29586     * @returns {Function} Returns the new partially applied function.
29587     * @example
29588     *
29589     * function greet(greeting, name) {
29590     *   return greeting + ' ' + name;
29591     * }
29592     *
29593     * var greetFred = _.partialRight(greet, 'fred');
29594     * greetFred('hi');
29595     * // => 'hi fred'
29596     *
29597     * // Partially applied with placeholders.
29598     * var sayHelloTo = _.partialRight(greet, 'hello', _);
29599     * sayHelloTo('fred');
29600     * // => 'hello fred'
29601     */
29602    var partialRight = baseRest(function(func, partials) {
29603      var holders = replaceHolders(partials, getHolder(partialRight));
29604      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
29605    });
29606
29607    /**
29608     * Creates a function that invokes `func` with arguments arranged according
29609     * to the specified `indexes` where the argument value at the first index is
29610     * provided as the first argument, the argument value at the second index is
29611     * provided as the second argument, and so on.
29612     *
29613     * @static
29614     * @memberOf _
29615     * @since 3.0.0
29616     * @category Function
29617     * @param {Function} func The function to rearrange arguments for.
29618     * @param {...(number|number[])} indexes The arranged argument indexes.
29619     * @returns {Function} Returns the new function.
29620     * @example
29621     *
29622     * var rearged = _.rearg(function(a, b, c) {
29623     *   return [a, b, c];
29624     * }, [2, 0, 1]);
29625     *
29626     * rearged('b', 'c', 'a')
29627     * // => ['a', 'b', 'c']
29628     */
29629    var rearg = flatRest(function(func, indexes) {
29630      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
29631    });
29632
29633    /**
29634     * Creates a function that invokes `func` with the `this` binding of the
29635     * created function and arguments from `start` and beyond provided as
29636     * an array.
29637     *
29638     * **Note:** This method is based on the
29639     * [rest parameter](https://mdn.io/rest_parameters).
29640     *
29641     * @static
29642     * @memberOf _
29643     * @since 4.0.0
29644     * @category Function
29645     * @param {Function} func The function to apply a rest parameter to.
29646     * @param {number} [start=func.length-1] The start position of the rest parameter.
29647     * @returns {Function} Returns the new function.
29648     * @example
29649     *
29650     * var say = _.rest(function(what, names) {
29651     *   return what + ' ' + _.initial(names).join(', ') +
29652     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
29653     * });
29654     *
29655     * say('hello', 'fred', 'barney', 'pebbles');
29656     * // => 'hello fred, barney, & pebbles'
29657     */
29658    function rest(func, start) {
29659      if (typeof func != 'function') {
29660        throw new TypeError(FUNC_ERROR_TEXT);
29661      }
29662      start = start === undefined ? start : toInteger(start);
29663      return baseRest(func, start);
29664    }
29665
29666    /**
29667     * Creates a function that invokes `func` with the `this` binding of the
29668     * create function and an array of arguments much like
29669     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
29670     *
29671     * **Note:** This method is based on the
29672     * [spread operator](https://mdn.io/spread_operator).
29673     *
29674     * @static
29675     * @memberOf _
29676     * @since 3.2.0
29677     * @category Function
29678     * @param {Function} func The function to spread arguments over.
29679     * @param {number} [start=0] The start position of the spread.
29680     * @returns {Function} Returns the new function.
29681     * @example
29682     *
29683     * var say = _.spread(function(who, what) {
29684     *   return who + ' says ' + what;
29685     * });
29686     *
29687     * say(['fred', 'hello']);
29688     * // => 'fred says hello'
29689     *
29690     * var numbers = Promise.all([
29691     *   Promise.resolve(40),
29692     *   Promise.resolve(36)
29693     * ]);
29694     *
29695     * numbers.then(_.spread(function(x, y) {
29696     *   return x + y;
29697     * }));
29698     * // => a Promise of 76
29699     */
29700    function spread(func, start) {
29701      if (typeof func != 'function') {
29702        throw new TypeError(FUNC_ERROR_TEXT);
29703      }
29704      start = start == null ? 0 : nativeMax(toInteger(start), 0);
29705      return baseRest(function(args) {
29706        var array = args[start],
29707            otherArgs = castSlice(args, 0, start);
29708
29709        if (array) {
29710          arrayPush(otherArgs, array);
29711        }
29712        return apply(func, this, otherArgs);
29713      });
29714    }
29715
29716    /**
29717     * Creates a throttled function that only invokes `func` at most once per
29718     * every `wait` milliseconds. The throttled function comes with a `cancel`
29719     * method to cancel delayed `func` invocations and a `flush` method to
29720     * immediately invoke them. Provide `options` to indicate whether `func`
29721     * should be invoked on the leading and/or trailing edge of the `wait`
29722     * timeout. The `func` is invoked with the last arguments provided to the
29723     * throttled function. Subsequent calls to the throttled function return the
29724     * result of the last `func` invocation.
29725     *
29726     * **Note:** If `leading` and `trailing` options are `true`, `func` is
29727     * invoked on the trailing edge of the timeout only if the throttled function
29728     * is invoked more than once during the `wait` timeout.
29729     *
29730     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
29731     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
29732     *
29733     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
29734     * for details over the differences between `_.throttle` and `_.debounce`.
29735     *
29736     * @static
29737     * @memberOf _
29738     * @since 0.1.0
29739     * @category Function
29740     * @param {Function} func The function to throttle.
29741     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
29742     * @param {Object} [options={}] The options object.
29743     * @param {boolean} [options.leading=true]
29744     *  Specify invoking on the leading edge of the timeout.
29745     * @param {boolean} [options.trailing=true]
29746     *  Specify invoking on the trailing edge of the timeout.
29747     * @returns {Function} Returns the new throttled function.
29748     * @example
29749     *
29750     * // Avoid excessively updating the position while scrolling.
29751     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
29752     *
29753     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
29754     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
29755     * jQuery(element).on('click', throttled);
29756     *
29757     * // Cancel the trailing throttled invocation.
29758     * jQuery(window).on('popstate', throttled.cancel);
29759     */
29760    function throttle(func, wait, options) {
29761      var leading = true,
29762          trailing = true;
29763
29764      if (typeof func != 'function') {
29765        throw new TypeError(FUNC_ERROR_TEXT);
29766      }
29767      if (isObject(options)) {
29768        leading = 'leading' in options ? !!options.leading : leading;
29769        trailing = 'trailing' in options ? !!options.trailing : trailing;
29770      }
29771      return debounce(func, wait, {
29772        'leading': leading,
29773        'maxWait': wait,
29774        'trailing': trailing
29775      });
29776    }
29777
29778    /**
29779     * Creates a function that accepts up to one argument, ignoring any
29780     * additional arguments.
29781     *
29782     * @static
29783     * @memberOf _
29784     * @since 4.0.0
29785     * @category Function
29786     * @param {Function} func The function to cap arguments for.
29787     * @returns {Function} Returns the new capped function.
29788     * @example
29789     *
29790     * _.map(['6', '8', '10'], _.unary(parseInt));
29791     * // => [6, 8, 10]
29792     */
29793    function unary(func) {
29794      return ary(func, 1);
29795    }
29796
29797    /**
29798     * Creates a function that provides `value` to `wrapper` as its first
29799     * argument. Any additional arguments provided to the function are appended
29800     * to those provided to the `wrapper`. The wrapper is invoked with the `this`
29801     * binding of the created function.
29802     *
29803     * @static
29804     * @memberOf _
29805     * @since 0.1.0
29806     * @category Function
29807     * @param {*} value The value to wrap.
29808     * @param {Function} [wrapper=identity] The wrapper function.
29809     * @returns {Function} Returns the new function.
29810     * @example
29811     *
29812     * var p = _.wrap(_.escape, function(func, text) {
29813     *   return '<p>' + func(text) + '</p>';
29814     * });
29815     *
29816     * p('fred, barney, & pebbles');
29817     * // => '<p>fred, barney, &amp; pebbles</p>'
29818     */
29819    function wrap(value, wrapper) {
29820      return partial(castFunction(wrapper), value);
29821    }
29822
29823    /*------------------------------------------------------------------------*/
29824
29825    /**
29826     * Casts `value` as an array if it's not one.
29827     *
29828     * @static
29829     * @memberOf _
29830     * @since 4.4.0
29831     * @category Lang
29832     * @param {*} value The value to inspect.
29833     * @returns {Array} Returns the cast array.
29834     * @example
29835     *
29836     * _.castArray(1);
29837     * // => [1]
29838     *
29839     * _.castArray({ 'a': 1 });
29840     * // => [{ 'a': 1 }]
29841     *
29842     * _.castArray('abc');
29843     * // => ['abc']
29844     *
29845     * _.castArray(null);
29846     * // => [null]
29847     *
29848     * _.castArray(undefined);
29849     * // => [undefined]
29850     *
29851     * _.castArray();
29852     * // => []
29853     *
29854     * var array = [1, 2, 3];
29855     * console.log(_.castArray(array) === array);
29856     * // => true
29857     */
29858    function castArray() {
29859      if (!arguments.length) {
29860        return [];
29861      }
29862      var value = arguments[0];
29863      return isArray(value) ? value : [value];
29864    }
29865
29866    /**
29867     * Creates a shallow clone of `value`.
29868     *
29869     * **Note:** This method is loosely based on the
29870     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
29871     * and supports cloning arrays, array buffers, booleans, date objects, maps,
29872     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
29873     * arrays. The own enumerable properties of `arguments` objects are cloned
29874     * as plain objects. An empty object is returned for uncloneable values such
29875     * as error objects, functions, DOM nodes, and WeakMaps.
29876     *
29877     * @static
29878     * @memberOf _
29879     * @since 0.1.0
29880     * @category Lang
29881     * @param {*} value The value to clone.
29882     * @returns {*} Returns the cloned value.
29883     * @see _.cloneDeep
29884     * @example
29885     *
29886     * var objects = [{ 'a': 1 }, { 'b': 2 }];
29887     *
29888     * var shallow = _.clone(objects);
29889     * console.log(shallow[0] === objects[0]);
29890     * // => true
29891     */
29892    function clone(value) {
29893      return baseClone(value, CLONE_SYMBOLS_FLAG);
29894    }
29895
29896    /**
29897     * This method is like `_.clone` except that it accepts `customizer` which
29898     * is invoked to produce the cloned value. If `customizer` returns `undefined`,
29899     * cloning is handled by the method instead. The `customizer` is invoked with
29900     * up to four arguments; (value [, index|key, object, stack]).
29901     *
29902     * @static
29903     * @memberOf _
29904     * @since 4.0.0
29905     * @category Lang
29906     * @param {*} value The value to clone.
29907     * @param {Function} [customizer] The function to customize cloning.
29908     * @returns {*} Returns the cloned value.
29909     * @see _.cloneDeepWith
29910     * @example
29911     *
29912     * function customizer(value) {
29913     *   if (_.isElement(value)) {
29914     *     return value.cloneNode(false);
29915     *   }
29916     * }
29917     *
29918     * var el = _.cloneWith(document.body, customizer);
29919     *
29920     * console.log(el === document.body);
29921     * // => false
29922     * console.log(el.nodeName);
29923     * // => 'BODY'
29924     * console.log(el.childNodes.length);
29925     * // => 0
29926     */
29927    function cloneWith(value, customizer) {
29928      customizer = typeof customizer == 'function' ? customizer : undefined;
29929      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
29930    }
29931
29932    /**
29933     * This method is like `_.clone` except that it recursively clones `value`.
29934     *
29935     * @static
29936     * @memberOf _
29937     * @since 1.0.0
29938     * @category Lang
29939     * @param {*} value The value to recursively clone.
29940     * @returns {*} Returns the deep cloned value.
29941     * @see _.clone
29942     * @example
29943     *
29944     * var objects = [{ 'a': 1 }, { 'b': 2 }];
29945     *
29946     * var deep = _.cloneDeep(objects);
29947     * console.log(deep[0] === objects[0]);
29948     * // => false
29949     */
29950    function cloneDeep(value) {
29951      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
29952    }
29953
29954    /**
29955     * This method is like `_.cloneWith` except that it recursively clones `value`.
29956     *
29957     * @static
29958     * @memberOf _
29959     * @since 4.0.0
29960     * @category Lang
29961     * @param {*} value The value to recursively clone.
29962     * @param {Function} [customizer] The function to customize cloning.
29963     * @returns {*} Returns the deep cloned value.
29964     * @see _.cloneWith
29965     * @example
29966     *
29967     * function customizer(value) {
29968     *   if (_.isElement(value)) {
29969     *     return value.cloneNode(true);
29970     *   }
29971     * }
29972     *
29973     * var el = _.cloneDeepWith(document.body, customizer);
29974     *
29975     * console.log(el === document.body);
29976     * // => false
29977     * console.log(el.nodeName);
29978     * // => 'BODY'
29979     * console.log(el.childNodes.length);
29980     * // => 20
29981     */
29982    function cloneDeepWith(value, customizer) {
29983      customizer = typeof customizer == 'function' ? customizer : undefined;
29984      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
29985    }
29986
29987    /**
29988     * Checks if `object` conforms to `source` by invoking the predicate
29989     * properties of `source` with the corresponding property values of `object`.
29990     *
29991     * **Note:** This method is equivalent to `_.conforms` when `source` is
29992     * partially applied.
29993     *
29994     * @static
29995     * @memberOf _
29996     * @since 4.14.0
29997     * @category Lang
29998     * @param {Object} object The object to inspect.
29999     * @param {Object} source The object of property predicates to conform to.
30000     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
30001     * @example
30002     *
30003     * var object = { 'a': 1, 'b': 2 };
30004     *
30005     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
30006     * // => true
30007     *
30008     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
30009     * // => false
30010     */
30011    function conformsTo(object, source) {
30012      return source == null || baseConformsTo(object, source, keys(source));
30013    }
30014
30015    /**
30016     * Performs a
30017     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
30018     * comparison between two values to determine if they are equivalent.
30019     *
30020     * @static
30021     * @memberOf _
30022     * @since 4.0.0
30023     * @category Lang
30024     * @param {*} value The value to compare.
30025     * @param {*} other The other value to compare.
30026     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
30027     * @example
30028     *
30029     * var object = { 'a': 1 };
30030     * var other = { 'a': 1 };
30031     *
30032     * _.eq(object, object);
30033     * // => true
30034     *
30035     * _.eq(object, other);
30036     * // => false
30037     *
30038     * _.eq('a', 'a');
30039     * // => true
30040     *
30041     * _.eq('a', Object('a'));
30042     * // => false
30043     *
30044     * _.eq(NaN, NaN);
30045     * // => true
30046     */
30047    function eq(value, other) {
30048      return value === other || (value !== value && other !== other);
30049    }
30050
30051    /**
30052     * Checks if `value` is greater than `other`.
30053     *
30054     * @static
30055     * @memberOf _
30056     * @since 3.9.0
30057     * @category Lang
30058     * @param {*} value The value to compare.
30059     * @param {*} other The other value to compare.
30060     * @returns {boolean} Returns `true` if `value` is greater than `other`,
30061     *  else `false`.
30062     * @see _.lt
30063     * @example
30064     *
30065     * _.gt(3, 1);
30066     * // => true
30067     *
30068     * _.gt(3, 3);
30069     * // => false
30070     *
30071     * _.gt(1, 3);
30072     * // => false
30073     */
30074    var gt = createRelationalOperation(baseGt);
30075
30076    /**
30077     * Checks if `value` is greater than or equal to `other`.
30078     *
30079     * @static
30080     * @memberOf _
30081     * @since 3.9.0
30082     * @category Lang
30083     * @param {*} value The value to compare.
30084     * @param {*} other The other value to compare.
30085     * @returns {boolean} Returns `true` if `value` is greater than or equal to
30086     *  `other`, else `false`.
30087     * @see _.lte
30088     * @example
30089     *
30090     * _.gte(3, 1);
30091     * // => true
30092     *
30093     * _.gte(3, 3);
30094     * // => true
30095     *
30096     * _.gte(1, 3);
30097     * // => false
30098     */
30099    var gte = createRelationalOperation(function(value, other) {
30100      return value >= other;
30101    });
30102
30103    /**
30104     * Checks if `value` is likely an `arguments` object.
30105     *
30106     * @static
30107     * @memberOf _
30108     * @since 0.1.0
30109     * @category Lang
30110     * @param {*} value The value to check.
30111     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
30112     *  else `false`.
30113     * @example
30114     *
30115     * _.isArguments(function() { return arguments; }());
30116     * // => true
30117     *
30118     * _.isArguments([1, 2, 3]);
30119     * // => false
30120     */
30121    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
30122      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
30123        !propertyIsEnumerable.call(value, 'callee');
30124    };
30125
30126    /**
30127     * Checks if `value` is classified as an `Array` object.
30128     *
30129     * @static
30130     * @memberOf _
30131     * @since 0.1.0
30132     * @category Lang
30133     * @param {*} value The value to check.
30134     * @returns {boolean} Returns `true` if `value` is an array, else `false`.
30135     * @example
30136     *
30137     * _.isArray([1, 2, 3]);
30138     * // => true
30139     *
30140     * _.isArray(document.body.children);
30141     * // => false
30142     *
30143     * _.isArray('abc');
30144     * // => false
30145     *
30146     * _.isArray(_.noop);
30147     * // => false
30148     */
30149    var isArray = Array.isArray;
30150
30151    /**
30152     * Checks if `value` is classified as an `ArrayBuffer` object.
30153     *
30154     * @static
30155     * @memberOf _
30156     * @since 4.3.0
30157     * @category Lang
30158     * @param {*} value The value to check.
30159     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
30160     * @example
30161     *
30162     * _.isArrayBuffer(new ArrayBuffer(2));
30163     * // => true
30164     *
30165     * _.isArrayBuffer(new Array(2));
30166     * // => false
30167     */
30168    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;
30169
30170    /**
30171     * Checks if `value` is array-like. A value is considered array-like if it's
30172     * not a function and has a `value.length` that's an integer greater than or
30173     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
30174     *
30175     * @static
30176     * @memberOf _
30177     * @since 4.0.0
30178     * @category Lang
30179     * @param {*} value The value to check.
30180     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
30181     * @example
30182     *
30183     * _.isArrayLike([1, 2, 3]);
30184     * // => true
30185     *
30186     * _.isArrayLike(document.body.children);
30187     * // => true
30188     *
30189     * _.isArrayLike('abc');
30190     * // => true
30191     *
30192     * _.isArrayLike(_.noop);
30193     * // => false
30194     */
30195    function isArrayLike(value) {
30196      return value != null && isLength(value.length) && !isFunction(value);
30197    }
30198
30199    /**
30200     * This method is like `_.isArrayLike` except that it also checks if `value`
30201     * is an object.
30202     *
30203     * @static
30204     * @memberOf _
30205     * @since 4.0.0
30206     * @category Lang
30207     * @param {*} value The value to check.
30208     * @returns {boolean} Returns `true` if `value` is an array-like object,
30209     *  else `false`.
30210     * @example
30211     *
30212     * _.isArrayLikeObject([1, 2, 3]);
30213     * // => true
30214     *
30215     * _.isArrayLikeObject(document.body.children);
30216     * // => true
30217     *
30218     * _.isArrayLikeObject('abc');
30219     * // => false
30220     *
30221     * _.isArrayLikeObject(_.noop);
30222     * // => false
30223     */
30224    function isArrayLikeObject(value) {
30225      return isObjectLike(value) && isArrayLike(value);
30226    }
30227
30228    /**
30229     * Checks if `value` is classified as a boolean primitive or object.
30230     *
30231     * @static
30232     * @memberOf _
30233     * @since 0.1.0
30234     * @category Lang
30235     * @param {*} value The value to check.
30236     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
30237     * @example
30238     *
30239     * _.isBoolean(false);
30240     * // => true
30241     *
30242     * _.isBoolean(null);
30243     * // => false
30244     */
30245    function isBoolean(value) {
30246      return value === true || value === false ||
30247        (isObjectLike(value) && baseGetTag(value) == boolTag);
30248    }
30249
30250    /**
30251     * Checks if `value` is a buffer.
30252     *
30253     * @static
30254     * @memberOf _
30255     * @since 4.3.0
30256     * @category Lang
30257     * @param {*} value The value to check.
30258     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
30259     * @example
30260     *
30261     * _.isBuffer(new Buffer(2));
30262     * // => true
30263     *
30264     * _.isBuffer(new Uint8Array(2));
30265     * // => false
30266     */
30267    var isBuffer = nativeIsBuffer || stubFalse;
30268
30269    /**
30270     * Checks if `value` is classified as a `Date` object.
30271     *
30272     * @static
30273     * @memberOf _
30274     * @since 0.1.0
30275     * @category Lang
30276     * @param {*} value The value to check.
30277     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
30278     * @example
30279     *
30280     * _.isDate(new Date);
30281     * // => true
30282     *
30283     * _.isDate('Mon April 23 2012');
30284     * // => false
30285     */
30286    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;
30287
30288    /**
30289     * Checks if `value` is likely a DOM element.
30290     *
30291     * @static
30292     * @memberOf _
30293     * @since 0.1.0
30294     * @category Lang
30295     * @param {*} value The value to check.
30296     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
30297     * @example
30298     *
30299     * _.isElement(document.body);
30300     * // => true
30301     *
30302     * _.isElement('<body>');
30303     * // => false
30304     */
30305    function isElement(value) {
30306      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
30307    }
30308
30309    /**
30310     * Checks if `value` is an empty object, collection, map, or set.
30311     *
30312     * Objects are considered empty if they have no own enumerable string keyed
30313     * properties.
30314     *
30315     * Array-like values such as `arguments` objects, arrays, buffers, strings, or
30316     * jQuery-like collections are considered empty if they have a `length` of `0`.
30317     * Similarly, maps and sets are considered empty if they have a `size` of `0`.
30318     *
30319     * @static
30320     * @memberOf _
30321     * @since 0.1.0
30322     * @category Lang
30323     * @param {*} value The value to check.
30324     * @returns {boolean} Returns `true` if `value` is empty, else `false`.
30325     * @example
30326     *
30327     * _.isEmpty(null);
30328     * // => true
30329     *
30330     * _.isEmpty(true);
30331     * // => true
30332     *
30333     * _.isEmpty(1);
30334     * // => true
30335     *
30336     * _.isEmpty([1, 2, 3]);
30337     * // => false
30338     *
30339     * _.isEmpty({ 'a': 1 });
30340     * // => false
30341     */
30342    function isEmpty(value) {
30343      if (value == null) {
30344        return true;
30345      }
30346      if (isArrayLike(value) &&
30347          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
30348            isBuffer(value) || isTypedArray(value) || isArguments(value))) {
30349        return !value.length;
30350      }
30351      var tag = getTag(value);
30352      if (tag == mapTag || tag == setTag) {
30353        return !value.size;
30354      }
30355      if (isPrototype(value)) {
30356        return !baseKeys(value).length;
30357      }
30358      for (var key in value) {
30359        if (hasOwnProperty.call(value, key)) {
30360          return false;
30361        }
30362      }
30363      return true;
30364    }
30365
30366    /**
30367     * Performs a deep comparison between two values to determine if they are
30368     * equivalent.
30369     *
30370     * **Note:** This method supports comparing arrays, array buffers, booleans,
30371     * date objects, error objects, maps, numbers, `Object` objects, regexes,
30372     * sets, strings, symbols, and typed arrays. `Object` objects are compared
30373     * by their own, not inherited, enumerable properties. Functions and DOM
30374     * nodes are compared by strict equality, i.e. `===`.
30375     *
30376     * @static
30377     * @memberOf _
30378     * @since 0.1.0
30379     * @category Lang
30380     * @param {*} value The value to compare.
30381     * @param {*} other The other value to compare.
30382     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
30383     * @example
30384     *
30385     * var object = { 'a': 1 };
30386     * var other = { 'a': 1 };
30387     *
30388     * _.isEqual(object, other);
30389     * // => true
30390     *
30391     * object === other;
30392     * // => false
30393     */
30394    function isEqual(value, other) {
30395      return baseIsEqual(value, other);
30396    }
30397
30398    /**
30399     * This method is like `_.isEqual` except that it accepts `customizer` which
30400     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
30401     * are handled by the method instead. The `customizer` is invoked with up to
30402     * six arguments: (objValue, othValue [, index|key, object, other, stack]).
30403     *
30404     * @static
30405     * @memberOf _
30406     * @since 4.0.0
30407     * @category Lang
30408     * @param {*} value The value to compare.
30409     * @param {*} other The other value to compare.
30410     * @param {Function} [customizer] The function to customize comparisons.
30411     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
30412     * @example
30413     *
30414     * function isGreeting(value) {
30415     *   return /^h(?:i|ello)$/.test(value);
30416     * }
30417     *
30418     * function customizer(objValue, othValue) {
30419     *   if (isGreeting(objValue) && isGreeting(othValue)) {
30420     *     return true;
30421     *   }
30422     * }
30423     *
30424     * var array = ['hello', 'goodbye'];
30425     * var other = ['hi', 'goodbye'];
30426     *
30427     * _.isEqualWith(array, other, customizer);
30428     * // => true
30429     */
30430    function isEqualWith(value, other, customizer) {
30431      customizer = typeof customizer == 'function' ? customizer : undefined;
30432      var result = customizer ? customizer(value, other) : undefined;
30433      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
30434    }
30435
30436    /**
30437     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
30438     * `SyntaxError`, `TypeError`, or `URIError` object.
30439     *
30440     * @static
30441     * @memberOf _
30442     * @since 3.0.0
30443     * @category Lang
30444     * @param {*} value The value to check.
30445     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
30446     * @example
30447     *
30448     * _.isError(new Error);
30449     * // => true
30450     *
30451     * _.isError(Error);
30452     * // => false
30453     */
30454    function isError(value) {
30455      if (!isObjectLike(value)) {
30456        return false;
30457      }
30458      var tag = baseGetTag(value);
30459      return tag == errorTag || tag == domExcTag ||
30460        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
30461    }
30462
30463    /**
30464     * Checks if `value` is a finite primitive number.
30465     *
30466     * **Note:** This method is based on
30467     * [`Number.isFinite`](https://mdn.io/Number/isFinite).
30468     *
30469     * @static
30470     * @memberOf _
30471     * @since 0.1.0
30472     * @category Lang
30473     * @param {*} value The value to check.
30474     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
30475     * @example
30476     *
30477     * _.isFinite(3);
30478     * // => true
30479     *
30480     * _.isFinite(Number.MIN_VALUE);
30481     * // => true
30482     *
30483     * _.isFinite(Infinity);
30484     * // => false
30485     *
30486     * _.isFinite('3');
30487     * // => false
30488     */
30489    function isFinite(value) {
30490      return typeof value == 'number' && nativeIsFinite(value);
30491    }
30492
30493    /**
30494     * Checks if `value` is classified as a `Function` object.
30495     *
30496     * @static
30497     * @memberOf _
30498     * @since 0.1.0
30499     * @category Lang
30500     * @param {*} value The value to check.
30501     * @returns {boolean} Returns `true` if `value` is a function, else `false`.
30502     * @example
30503     *
30504     * _.isFunction(_);
30505     * // => true
30506     *
30507     * _.isFunction(/abc/);
30508     * // => false
30509     */
30510    function isFunction(value) {
30511      if (!isObject(value)) {
30512        return false;
30513      }
30514      // The use of `Object#toString` avoids issues with the `typeof` operator
30515      // in Safari 9 which returns 'object' for typed arrays and other constructors.
30516      var tag = baseGetTag(value);
30517      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
30518    }
30519
30520    /**
30521     * Checks if `value` is an integer.
30522     *
30523     * **Note:** This method is based on
30524     * [`Number.isInteger`](https://mdn.io/Number/isInteger).
30525     *
30526     * @static
30527     * @memberOf _
30528     * @since 4.0.0
30529     * @category Lang
30530     * @param {*} value The value to check.
30531     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
30532     * @example
30533     *
30534     * _.isInteger(3);
30535     * // => true
30536     *
30537     * _.isInteger(Number.MIN_VALUE);
30538     * // => false
30539     *
30540     * _.isInteger(Infinity);
30541     * // => false
30542     *
30543     * _.isInteger('3');
30544     * // => false
30545     */
30546    function isInteger(value) {
30547      return typeof value == 'number' && value == toInteger(value);
30548    }
30549
30550    /**
30551     * Checks if `value` is a valid array-like length.
30552     *
30553     * **Note:** This method is loosely based on
30554     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
30555     *
30556     * @static
30557     * @memberOf _
30558     * @since 4.0.0
30559     * @category Lang
30560     * @param {*} value The value to check.
30561     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
30562     * @example
30563     *
30564     * _.isLength(3);
30565     * // => true
30566     *
30567     * _.isLength(Number.MIN_VALUE);
30568     * // => false
30569     *
30570     * _.isLength(Infinity);
30571     * // => false
30572     *
30573     * _.isLength('3');
30574     * // => false
30575     */
30576    function isLength(value) {
30577      return typeof value == 'number' &&
30578        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
30579    }
30580
30581    /**
30582     * Checks if `value` is the
30583     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
30584     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
30585     *
30586     * @static
30587     * @memberOf _
30588     * @since 0.1.0
30589     * @category Lang
30590     * @param {*} value The value to check.
30591     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
30592     * @example
30593     *
30594     * _.isObject({});
30595     * // => true
30596     *
30597     * _.isObject([1, 2, 3]);
30598     * // => true
30599     *
30600     * _.isObject(_.noop);
30601     * // => true
30602     *
30603     * _.isObject(null);
30604     * // => false
30605     */
30606    function isObject(value) {
30607      var type = typeof value;
30608      return value != null && (type == 'object' || type == 'function');
30609    }
30610
30611    /**
30612     * Checks if `value` is object-like. A value is object-like if it's not `null`
30613     * and has a `typeof` result of "object".
30614     *
30615     * @static
30616     * @memberOf _
30617     * @since 4.0.0
30618     * @category Lang
30619     * @param {*} value The value to check.
30620     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
30621     * @example
30622     *
30623     * _.isObjectLike({});
30624     * // => true
30625     *
30626     * _.isObjectLike([1, 2, 3]);
30627     * // => true
30628     *
30629     * _.isObjectLike(_.noop);
30630     * // => false
30631     *
30632     * _.isObjectLike(null);
30633     * // => false
30634     */
30635    function isObjectLike(value) {
30636      return value != null && typeof value == 'object';
30637    }
30638
30639    /**
30640     * Checks if `value` is classified as a `Map` object.
30641     *
30642     * @static
30643     * @memberOf _
30644     * @since 4.3.0
30645     * @category Lang
30646     * @param {*} value The value to check.
30647     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
30648     * @example
30649     *
30650     * _.isMap(new Map);
30651     * // => true
30652     *
30653     * _.isMap(new WeakMap);
30654     * // => false
30655     */
30656    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
30657
30658    /**
30659     * Performs a partial deep comparison between `object` and `source` to
30660     * determine if `object` contains equivalent property values.
30661     *
30662     * **Note:** This method is equivalent to `_.matches` when `source` is
30663     * partially applied.
30664     *
30665     * Partial comparisons will match empty array and empty object `source`
30666     * values against any array or object value, respectively. See `_.isEqual`
30667     * for a list of supported value comparisons.
30668     *
30669     * @static
30670     * @memberOf _
30671     * @since 3.0.0
30672     * @category Lang
30673     * @param {Object} object The object to inspect.
30674     * @param {Object} source The object of property values to match.
30675     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
30676     * @example
30677     *
30678     * var object = { 'a': 1, 'b': 2 };
30679     *
30680     * _.isMatch(object, { 'b': 2 });
30681     * // => true
30682     *
30683     * _.isMatch(object, { 'b': 1 });
30684     * // => false
30685     */
30686    function isMatch(object, source) {
30687      return object === source || baseIsMatch(object, source, getMatchData(source));
30688    }
30689
30690    /**
30691     * This method is like `_.isMatch` except that it accepts `customizer` which
30692     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
30693     * are handled by the method instead. The `customizer` is invoked with five
30694     * arguments: (objValue, srcValue, index|key, object, source).
30695     *
30696     * @static
30697     * @memberOf _
30698     * @since 4.0.0
30699     * @category Lang
30700     * @param {Object} object The object to inspect.
30701     * @param {Object} source The object of property values to match.
30702     * @param {Function} [customizer] The function to customize comparisons.
30703     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
30704     * @example
30705     *
30706     * function isGreeting(value) {
30707     *   return /^h(?:i|ello)$/.test(value);
30708     * }
30709     *
30710     * function customizer(objValue, srcValue) {
30711     *   if (isGreeting(objValue) && isGreeting(srcValue)) {
30712     *     return true;
30713     *   }
30714     * }
30715     *
30716     * var object = { 'greeting': 'hello' };
30717     * var source = { 'greeting': 'hi' };
30718     *
30719     * _.isMatchWith(object, source, customizer);
30720     * // => true
30721     */
30722    function isMatchWith(object, source, customizer) {
30723      customizer = typeof customizer == 'function' ? customizer : undefined;
30724      return baseIsMatch(object, source, getMatchData(source), customizer);
30725    }
30726
30727    /**
30728     * Checks if `value` is `NaN`.
30729     *
30730     * **Note:** This method is based on
30731     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
30732     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
30733     * `undefined` and other non-number values.
30734     *
30735     * @static
30736     * @memberOf _
30737     * @since 0.1.0
30738     * @category Lang
30739     * @param {*} value The value to check.
30740     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
30741     * @example
30742     *
30743     * _.isNaN(NaN);
30744     * // => true
30745     *
30746     * _.isNaN(new Number(NaN));
30747     * // => true
30748     *
30749     * isNaN(undefined);
30750     * // => true
30751     *
30752     * _.isNaN(undefined);
30753     * // => false
30754     */
30755    function isNaN(value) {
30756      // An `NaN` primitive is the only value that is not equal to itself.
30757      // Perform the `toStringTag` check first to avoid errors with some
30758      // ActiveX objects in IE.
30759      return isNumber(value) && value != +value;
30760    }
30761
30762    /**
30763     * Checks if `value` is a pristine native function.
30764     *
30765     * **Note:** This method can't reliably detect native functions in the presence
30766     * of the core-js package because core-js circumvents this kind of detection.
30767     * Despite multiple requests, the core-js maintainer has made it clear: any
30768     * attempt to fix the detection will be obstructed. As a result, we're left
30769     * with little choice but to throw an error. Unfortunately, this also affects
30770     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
30771     * which rely on core-js.
30772     *
30773     * @static
30774     * @memberOf _
30775     * @since 3.0.0
30776     * @category Lang
30777     * @param {*} value The value to check.
30778     * @returns {boolean} Returns `true` if `value` is a native function,
30779     *  else `false`.
30780     * @example
30781     *
30782     * _.isNative(Array.prototype.push);
30783     * // => true
30784     *
30785     * _.isNative(_);
30786     * // => false
30787     */
30788    function isNative(value) {
30789      if (isMaskable(value)) {
30790        throw new Error(CORE_ERROR_TEXT);
30791      }
30792      return baseIsNative(value);
30793    }
30794
30795    /**
30796     * Checks if `value` is `null`.
30797     *
30798     * @static
30799     * @memberOf _
30800     * @since 0.1.0
30801     * @category Lang
30802     * @param {*} value The value to check.
30803     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
30804     * @example
30805     *
30806     * _.isNull(null);
30807     * // => true
30808     *
30809     * _.isNull(void 0);
30810     * // => false
30811     */
30812    function isNull(value) {
30813      return value === null;
30814    }
30815
30816    /**
30817     * Checks if `value` is `null` or `undefined`.
30818     *
30819     * @static
30820     * @memberOf _
30821     * @since 4.0.0
30822     * @category Lang
30823     * @param {*} value The value to check.
30824     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
30825     * @example
30826     *
30827     * _.isNil(null);
30828     * // => true
30829     *
30830     * _.isNil(void 0);
30831     * // => true
30832     *
30833     * _.isNil(NaN);
30834     * // => false
30835     */
30836    function isNil(value) {
30837      return value == null;
30838    }
30839
30840    /**
30841     * Checks if `value` is classified as a `Number` primitive or object.
30842     *
30843     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
30844     * classified as numbers, use the `_.isFinite` method.
30845     *
30846     * @static
30847     * @memberOf _
30848     * @since 0.1.0
30849     * @category Lang
30850     * @param {*} value The value to check.
30851     * @returns {boolean} Returns `true` if `value` is a number, else `false`.
30852     * @example
30853     *
30854     * _.isNumber(3);
30855     * // => true
30856     *
30857     * _.isNumber(Number.MIN_VALUE);
30858     * // => true
30859     *
30860     * _.isNumber(Infinity);
30861     * // => true
30862     *
30863     * _.isNumber('3');
30864     * // => false
30865     */
30866    function isNumber(value) {
30867      return typeof value == 'number' ||
30868        (isObjectLike(value) && baseGetTag(value) == numberTag);
30869    }
30870
30871    /**
30872     * Checks if `value` is a plain object, that is, an object created by the
30873     * `Object` constructor or one with a `[[Prototype]]` of `null`.
30874     *
30875     * @static
30876     * @memberOf _
30877     * @since 0.8.0
30878     * @category Lang
30879     * @param {*} value The value to check.
30880     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
30881     * @example
30882     *
30883     * function Foo() {
30884     *   this.a = 1;
30885     * }
30886     *
30887     * _.isPlainObject(new Foo);
30888     * // => false
30889     *
30890     * _.isPlainObject([1, 2, 3]);
30891     * // => false
30892     *
30893     * _.isPlainObject({ 'x': 0, 'y': 0 });
30894     * // => true
30895     *
30896     * _.isPlainObject(Object.create(null));
30897     * // => true
30898     */
30899    function isPlainObject(value) {
30900      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
30901        return false;
30902      }
30903      var proto = getPrototype(value);
30904      if (proto === null) {
30905        return true;
30906      }
30907      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
30908      return typeof Ctor == 'function' && Ctor instanceof Ctor &&
30909        funcToString.call(Ctor) == objectCtorString;
30910    }
30911
30912    /**
30913     * Checks if `value` is classified as a `RegExp` object.
30914     *
30915     * @static
30916     * @memberOf _
30917     * @since 0.1.0
30918     * @category Lang
30919     * @param {*} value The value to check.
30920     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
30921     * @example
30922     *
30923     * _.isRegExp(/abc/);
30924     * // => true
30925     *
30926     * _.isRegExp('/abc/');
30927     * // => false
30928     */
30929    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
30930
30931    /**
30932     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
30933     * double precision number which isn't the result of a rounded unsafe integer.
30934     *
30935     * **Note:** This method is based on
30936     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
30937     *
30938     * @static
30939     * @memberOf _
30940     * @since 4.0.0
30941     * @category Lang
30942     * @param {*} value The value to check.
30943     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
30944     * @example
30945     *
30946     * _.isSafeInteger(3);
30947     * // => true
30948     *
30949     * _.isSafeInteger(Number.MIN_VALUE);
30950     * // => false
30951     *
30952     * _.isSafeInteger(Infinity);
30953     * // => false
30954     *
30955     * _.isSafeInteger('3');
30956     * // => false
30957     */
30958    function isSafeInteger(value) {
30959      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
30960    }
30961
30962    /**
30963     * Checks if `value` is classified as a `Set` object.
30964     *
30965     * @static
30966     * @memberOf _
30967     * @since 4.3.0
30968     * @category Lang
30969     * @param {*} value The value to check.
30970     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
30971     * @example
30972     *
30973     * _.isSet(new Set);
30974     * // => true
30975     *
30976     * _.isSet(new WeakSet);
30977     * // => false
30978     */
30979    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
30980
30981    /**
30982     * Checks if `value` is classified as a `String` primitive or object.
30983     *
30984     * @static
30985     * @since 0.1.0
30986     * @memberOf _
30987     * @category Lang
30988     * @param {*} value The value to check.
30989     * @returns {boolean} Returns `true` if `value` is a string, else `false`.
30990     * @example
30991     *
30992     * _.isString('abc');
30993     * // => true
30994     *
30995     * _.isString(1);
30996     * // => false
30997     */
30998    function isString(value) {
30999      return typeof value == 'string' ||
31000        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
31001    }
31002
31003    /**
31004     * Checks if `value` is classified as a `Symbol` primitive or object.
31005     *
31006     * @static
31007     * @memberOf _
31008     * @since 4.0.0
31009     * @category Lang
31010     * @param {*} value The value to check.
31011     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
31012     * @example
31013     *
31014     * _.isSymbol(Symbol.iterator);
31015     * // => true
31016     *
31017     * _.isSymbol('abc');
31018     * // => false
31019     */
31020    function isSymbol(value) {
31021      return typeof value == 'symbol' ||
31022        (isObjectLike(value) && baseGetTag(value) == symbolTag);
31023    }
31024
31025    /**
31026     * Checks if `value` is classified as a typed array.
31027     *
31028     * @static
31029     * @memberOf _
31030     * @since 3.0.0
31031     * @category Lang
31032     * @param {*} value The value to check.
31033     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
31034     * @example
31035     *
31036     * _.isTypedArray(new Uint8Array);
31037     * // => true
31038     *
31039     * _.isTypedArray([]);
31040     * // => false
31041     */
31042    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
31043
31044    /**
31045     * Checks if `value` is `undefined`.
31046     *
31047     * @static
31048     * @since 0.1.0
31049     * @memberOf _
31050     * @category Lang
31051     * @param {*} value The value to check.
31052     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
31053     * @example
31054     *
31055     * _.isUndefined(void 0);
31056     * // => true
31057     *
31058     * _.isUndefined(null);
31059     * // => false
31060     */
31061    function isUndefined(value) {
31062      return value === undefined;
31063    }
31064
31065    /**
31066     * Checks if `value` is classified as a `WeakMap` object.
31067     *
31068     * @static
31069     * @memberOf _
31070     * @since 4.3.0
31071     * @category Lang
31072     * @param {*} value The value to check.
31073     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
31074     * @example
31075     *
31076     * _.isWeakMap(new WeakMap);
31077     * // => true
31078     *
31079     * _.isWeakMap(new Map);
31080     * // => false
31081     */
31082    function isWeakMap(value) {
31083      return isObjectLike(value) && getTag(value) == weakMapTag;
31084    }
31085
31086    /**
31087     * Checks if `value` is classified as a `WeakSet` object.
31088     *
31089     * @static
31090     * @memberOf _
31091     * @since 4.3.0
31092     * @category Lang
31093     * @param {*} value The value to check.
31094     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
31095     * @example
31096     *
31097     * _.isWeakSet(new WeakSet);
31098     * // => true
31099     *
31100     * _.isWeakSet(new Set);
31101     * // => false
31102     */
31103    function isWeakSet(value) {
31104      return isObjectLike(value) && baseGetTag(value) == weakSetTag;
31105    }
31106
31107    /**
31108     * Checks if `value` is less than `other`.
31109     *
31110     * @static
31111     * @memberOf _
31112     * @since 3.9.0
31113     * @category Lang
31114     * @param {*} value The value to compare.
31115     * @param {*} other The other value to compare.
31116     * @returns {boolean} Returns `true` if `value` is less than `other`,
31117     *  else `false`.
31118     * @see _.gt
31119     * @example
31120     *
31121     * _.lt(1, 3);
31122     * // => true
31123     *
31124     * _.lt(3, 3);
31125     * // => false
31126     *
31127     * _.lt(3, 1);
31128     * // => false
31129     */
31130    var lt = createRelationalOperation(baseLt);
31131
31132    /**
31133     * Checks if `value` is less than or equal to `other`.
31134     *
31135     * @static
31136     * @memberOf _
31137     * @since 3.9.0
31138     * @category Lang
31139     * @param {*} value The value to compare.
31140     * @param {*} other The other value to compare.
31141     * @returns {boolean} Returns `true` if `value` is less than or equal to
31142     *  `other`, else `false`.
31143     * @see _.gte
31144     * @example
31145     *
31146     * _.lte(1, 3);
31147     * // => true
31148     *
31149     * _.lte(3, 3);
31150     * // => true
31151     *
31152     * _.lte(3, 1);
31153     * // => false
31154     */
31155    var lte = createRelationalOperation(function(value, other) {
31156      return value <= other;
31157    });
31158
31159    /**
31160     * Converts `value` to an array.
31161     *
31162     * @static
31163     * @since 0.1.0
31164     * @memberOf _
31165     * @category Lang
31166     * @param {*} value The value to convert.
31167     * @returns {Array} Returns the converted array.
31168     * @example
31169     *
31170     * _.toArray({ 'a': 1, 'b': 2 });
31171     * // => [1, 2]
31172     *
31173     * _.toArray('abc');
31174     * // => ['a', 'b', 'c']
31175     *
31176     * _.toArray(1);
31177     * // => []
31178     *
31179     * _.toArray(null);
31180     * // => []
31181     */
31182    function toArray(value) {
31183      if (!value) {
31184        return [];
31185      }
31186      if (isArrayLike(value)) {
31187        return isString(value) ? stringToArray(value) : copyArray(value);
31188      }
31189      if (symIterator && value[symIterator]) {
31190        return iteratorToArray(value[symIterator]());
31191      }
31192      var tag = getTag(value),
31193          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);
31194
31195      return func(value);
31196    }
31197
31198    /**
31199     * Converts `value` to a finite number.
31200     *
31201     * @static
31202     * @memberOf _
31203     * @since 4.12.0
31204     * @category Lang
31205     * @param {*} value The value to convert.
31206     * @returns {number} Returns the converted number.
31207     * @example
31208     *
31209     * _.toFinite(3.2);
31210     * // => 3.2
31211     *
31212     * _.toFinite(Number.MIN_VALUE);
31213     * // => 5e-324
31214     *
31215     * _.toFinite(Infinity);
31216     * // => 1.7976931348623157e+308
31217     *
31218     * _.toFinite('3.2');
31219     * // => 3.2
31220     */
31221    function toFinite(value) {
31222      if (!value) {
31223        return value === 0 ? value : 0;
31224      }
31225      value = toNumber(value);
31226      if (value === INFINITY || value === -INFINITY) {
31227        var sign = (value < 0 ? -1 : 1);
31228        return sign * MAX_INTEGER;
31229      }
31230      return value === value ? value : 0;
31231    }
31232
31233    /**
31234     * Converts `value` to an integer.
31235     *
31236     * **Note:** This method is loosely based on
31237     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
31238     *
31239     * @static
31240     * @memberOf _
31241     * @since 4.0.0
31242     * @category Lang
31243     * @param {*} value The value to convert.
31244     * @returns {number} Returns the converted integer.
31245     * @example
31246     *
31247     * _.toInteger(3.2);
31248     * // => 3
31249     *
31250     * _.toInteger(Number.MIN_VALUE);
31251     * // => 0
31252     *
31253     * _.toInteger(Infinity);
31254     * // => 1.7976931348623157e+308
31255     *
31256     * _.toInteger('3.2');
31257     * // => 3
31258     */
31259    function toInteger(value) {
31260      var result = toFinite(value),
31261          remainder = result % 1;
31262
31263      return result === result ? (remainder ? result - remainder : result) : 0;
31264    }
31265
31266    /**
31267     * Converts `value` to an integer suitable for use as the length of an
31268     * array-like object.
31269     *
31270     * **Note:** This method is based on
31271     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
31272     *
31273     * @static
31274     * @memberOf _
31275     * @since 4.0.0
31276     * @category Lang
31277     * @param {*} value The value to convert.
31278     * @returns {number} Returns the converted integer.
31279     * @example
31280     *
31281     * _.toLength(3.2);
31282     * // => 3
31283     *
31284     * _.toLength(Number.MIN_VALUE);
31285     * // => 0
31286     *
31287     * _.toLength(Infinity);
31288     * // => 4294967295
31289     *
31290     * _.toLength('3.2');
31291     * // => 3
31292     */
31293    function toLength(value) {
31294      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
31295    }
31296
31297    /**
31298     * Converts `value` to a number.
31299     *
31300     * @static
31301     * @memberOf _
31302     * @since 4.0.0
31303     * @category Lang
31304     * @param {*} value The value to process.
31305     * @returns {number} Returns the number.
31306     * @example
31307     *
31308     * _.toNumber(3.2);
31309     * // => 3.2
31310     *
31311     * _.toNumber(Number.MIN_VALUE);
31312     * // => 5e-324
31313     *
31314     * _.toNumber(Infinity);
31315     * // => Infinity
31316     *
31317     * _.toNumber('3.2');
31318     * // => 3.2
31319     */
31320    function toNumber(value) {
31321      if (typeof value == 'number') {
31322        return value;
31323      }
31324      if (isSymbol(value)) {
31325        return NAN;
31326      }
31327      if (isObject(value)) {
31328        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
31329        value = isObject(other) ? (other + '') : other;
31330      }
31331      if (typeof value != 'string') {
31332        return value === 0 ? value : +value;
31333      }
31334      value = baseTrim(value);
31335      var isBinary = reIsBinary.test(value);
31336      return (isBinary || reIsOctal.test(value))
31337        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
31338        : (reIsBadHex.test(value) ? NAN : +value);
31339    }
31340
31341    /**
31342     * Converts `value` to a plain object flattening inherited enumerable string
31343     * keyed properties of `value` to own properties of the plain object.
31344     *
31345     * @static
31346     * @memberOf _
31347     * @since 3.0.0
31348     * @category Lang
31349     * @param {*} value The value to convert.
31350     * @returns {Object} Returns the converted plain object.
31351     * @example
31352     *
31353     * function Foo() {
31354     *   this.b = 2;
31355     * }
31356     *
31357     * Foo.prototype.c = 3;
31358     *
31359     * _.assign({ 'a': 1 }, new Foo);
31360     * // => { 'a': 1, 'b': 2 }
31361     *
31362     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
31363     * // => { 'a': 1, 'b': 2, 'c': 3 }
31364     */
31365    function toPlainObject(value) {
31366      return copyObject(value, keysIn(value));
31367    }
31368
31369    /**
31370     * Converts `value` to a safe integer. A safe integer can be compared and
31371     * represented correctly.
31372     *
31373     * @static
31374     * @memberOf _
31375     * @since 4.0.0
31376     * @category Lang
31377     * @param {*} value The value to convert.
31378     * @returns {number} Returns the converted integer.
31379     * @example
31380     *
31381     * _.toSafeInteger(3.2);
31382     * // => 3
31383     *
31384     * _.toSafeInteger(Number.MIN_VALUE);
31385     * // => 0
31386     *
31387     * _.toSafeInteger(Infinity);
31388     * // => 9007199254740991
31389     *
31390     * _.toSafeInteger('3.2');
31391     * // => 3
31392     */
31393    function toSafeInteger(value) {
31394      return value
31395        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
31396        : (value === 0 ? value : 0);
31397    }
31398
31399    /**
31400     * Converts `value` to a string. An empty string is returned for `null`
31401     * and `undefined` values. The sign of `-0` is preserved.
31402     *
31403     * @static
31404     * @memberOf _
31405     * @since 4.0.0
31406     * @category Lang
31407     * @param {*} value The value to convert.
31408     * @returns {string} Returns the converted string.
31409     * @example
31410     *
31411     * _.toString(null);
31412     * // => ''
31413     *
31414     * _.toString(-0);
31415     * // => '-0'
31416     *
31417     * _.toString([1, 2, 3]);
31418     * // => '1,2,3'
31419     */
31420    function toString(value) {
31421      return value == null ? '' : baseToString(value);
31422    }
31423
31424    /*------------------------------------------------------------------------*/
31425
31426    /**
31427     * Assigns own enumerable string keyed properties of source objects to the
31428     * destination object. Source objects are applied from left to right.
31429     * Subsequent sources overwrite property assignments of previous sources.
31430     *
31431     * **Note:** This method mutates `object` and is loosely based on
31432     * [`Object.assign`](https://mdn.io/Object/assign).
31433     *
31434     * @static
31435     * @memberOf _
31436     * @since 0.10.0
31437     * @category Object
31438     * @param {Object} object The destination object.
31439     * @param {...Object} [sources] The source objects.
31440     * @returns {Object} Returns `object`.
31441     * @see _.assignIn
31442     * @example
31443     *
31444     * function Foo() {
31445     *   this.a = 1;
31446     * }
31447     *
31448     * function Bar() {
31449     *   this.c = 3;
31450     * }
31451     *
31452     * Foo.prototype.b = 2;
31453     * Bar.prototype.d = 4;
31454     *
31455     * _.assign({ 'a': 0 }, new Foo, new Bar);
31456     * // => { 'a': 1, 'c': 3 }
31457     */
31458    var assign = createAssigner(function(object, source) {
31459      if (isPrototype(source) || isArrayLike(source)) {
31460        copyObject(source, keys(source), object);
31461        return;
31462      }
31463      for (var key in source) {
31464        if (hasOwnProperty.call(source, key)) {
31465          assignValue(object, key, source[key]);
31466        }
31467      }
31468    });
31469
31470    /**
31471     * This method is like `_.assign` except that it iterates over own and
31472     * inherited source properties.
31473     *
31474     * **Note:** This method mutates `object`.
31475     *
31476     * @static
31477     * @memberOf _
31478     * @since 4.0.0
31479     * @alias extend
31480     * @category Object
31481     * @param {Object} object The destination object.
31482     * @param {...Object} [sources] The source objects.
31483     * @returns {Object} Returns `object`.
31484     * @see _.assign
31485     * @example
31486     *
31487     * function Foo() {
31488     *   this.a = 1;
31489     * }
31490     *
31491     * function Bar() {
31492     *   this.c = 3;
31493     * }
31494     *
31495     * Foo.prototype.b = 2;
31496     * Bar.prototype.d = 4;
31497     *
31498     * _.assignIn({ 'a': 0 }, new Foo, new Bar);
31499     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
31500     */
31501    var assignIn = createAssigner(function(object, source) {
31502      copyObject(source, keysIn(source), object);
31503    });
31504
31505    /**
31506     * This method is like `_.assignIn` except that it accepts `customizer`
31507     * which is invoked to produce the assigned values. If `customizer` returns
31508     * `undefined`, assignment is handled by the method instead. The `customizer`
31509     * is invoked with five arguments: (objValue, srcValue, key, object, source).
31510     *
31511     * **Note:** This method mutates `object`.
31512     *
31513     * @static
31514     * @memberOf _
31515     * @since 4.0.0
31516     * @alias extendWith
31517     * @category Object
31518     * @param {Object} object The destination object.
31519     * @param {...Object} sources The source objects.
31520     * @param {Function} [customizer] The function to customize assigned values.
31521     * @returns {Object} Returns `object`.
31522     * @see _.assignWith
31523     * @example
31524     *
31525     * function customizer(objValue, srcValue) {
31526     *   return _.isUndefined(objValue) ? srcValue : objValue;
31527     * }
31528     *
31529     * var defaults = _.partialRight(_.assignInWith, customizer);
31530     *
31531     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
31532     * // => { 'a': 1, 'b': 2 }
31533     */
31534    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
31535      copyObject(source, keysIn(source), object, customizer);
31536    });
31537
31538    /**
31539     * This method is like `_.assign` except that it accepts `customizer`
31540     * which is invoked to produce the assigned values. If `customizer` returns
31541     * `undefined`, assignment is handled by the method instead. The `customizer`
31542     * is invoked with five arguments: (objValue, srcValue, key, object, source).
31543     *
31544     * **Note:** This method mutates `object`.
31545     *
31546     * @static
31547     * @memberOf _
31548     * @since 4.0.0
31549     * @category Object
31550     * @param {Object} object The destination object.
31551     * @param {...Object} sources The source objects.
31552     * @param {Function} [customizer] The function to customize assigned values.
31553     * @returns {Object} Returns `object`.
31554     * @see _.assignInWith
31555     * @example
31556     *
31557     * function customizer(objValue, srcValue) {
31558     *   return _.isUndefined(objValue) ? srcValue : objValue;
31559     * }
31560     *
31561     * var defaults = _.partialRight(_.assignWith, customizer);
31562     *
31563     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
31564     * // => { 'a': 1, 'b': 2 }
31565     */
31566    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
31567      copyObject(source, keys(source), object, customizer);
31568    });
31569
31570    /**
31571     * Creates an array of values corresponding to `paths` of `object`.
31572     *
31573     * @static
31574     * @memberOf _
31575     * @since 1.0.0
31576     * @category Object
31577     * @param {Object} object The object to iterate over.
31578     * @param {...(string|string[])} [paths] The property paths to pick.
31579     * @returns {Array} Returns the picked values.
31580     * @example
31581     *
31582     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
31583     *
31584     * _.at(object, ['a[0].b.c', 'a[1]']);
31585     * // => [3, 4]
31586     */
31587    var at = flatRest(baseAt);
31588
31589    /**
31590     * Creates an object that inherits from the `prototype` object. If a
31591     * `properties` object is given, its own enumerable string keyed properties
31592     * are assigned to the created object.
31593     *
31594     * @static
31595     * @memberOf _
31596     * @since 2.3.0
31597     * @category Object
31598     * @param {Object} prototype The object to inherit from.
31599     * @param {Object} [properties] The properties to assign to the object.
31600     * @returns {Object} Returns the new object.
31601     * @example
31602     *
31603     * function Shape() {
31604     *   this.x = 0;
31605     *   this.y = 0;
31606     * }
31607     *
31608     * function Circle() {
31609     *   Shape.call(this);
31610     * }
31611     *
31612     * Circle.prototype = _.create(Shape.prototype, {
31613     *   'constructor': Circle
31614     * });
31615     *
31616     * var circle = new Circle;
31617     * circle instanceof Circle;
31618     * // => true
31619     *
31620     * circle instanceof Shape;
31621     * // => true
31622     */
31623    function create(prototype, properties) {
31624      var result = baseCreate(prototype);
31625      return properties == null ? result : baseAssign(result, properties);
31626    }
31627
31628    /**
31629     * Assigns own and inherited enumerable string keyed properties of source
31630     * objects to the destination object for all destination properties that
31631     * resolve to `undefined`. Source objects are applied from left to right.
31632     * Once a property is set, additional values of the same property are ignored.
31633     *
31634     * **Note:** This method mutates `object`.
31635     *
31636     * @static
31637     * @since 0.1.0
31638     * @memberOf _
31639     * @category Object
31640     * @param {Object} object The destination object.
31641     * @param {...Object} [sources] The source objects.
31642     * @returns {Object} Returns `object`.
31643     * @see _.defaultsDeep
31644     * @example
31645     *
31646     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
31647     * // => { 'a': 1, 'b': 2 }
31648     */
31649    var defaults = baseRest(function(object, sources) {
31650      object = Object(object);
31651
31652      var index = -1;
31653      var length = sources.length;
31654      var guard = length > 2 ? sources[2] : undefined;
31655
31656      if (guard && isIterateeCall(sources[0], sources[1], guard)) {
31657        length = 1;
31658      }
31659
31660      while (++index < length) {
31661        var source = sources[index];
31662        var props = keysIn(source);
31663        var propsIndex = -1;
31664        var propsLength = props.length;
31665
31666        while (++propsIndex < propsLength) {
31667          var key = props[propsIndex];
31668          var value = object[key];
31669
31670          if (value === undefined ||
31671              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
31672            object[key] = source[key];
31673          }
31674        }
31675      }
31676
31677      return object;
31678    });
31679
31680    /**
31681     * This method is like `_.defaults` except that it recursively assigns
31682     * default properties.
31683     *
31684     * **Note:** This method mutates `object`.
31685     *
31686     * @static
31687     * @memberOf _
31688     * @since 3.10.0
31689     * @category Object
31690     * @param {Object} object The destination object.
31691     * @param {...Object} [sources] The source objects.
31692     * @returns {Object} Returns `object`.
31693     * @see _.defaults
31694     * @example
31695     *
31696     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
31697     * // => { 'a': { 'b': 2, 'c': 3 } }
31698     */
31699    var defaultsDeep = baseRest(function(args) {
31700      args.push(undefined, customDefaultsMerge);
31701      return apply(mergeWith, undefined, args);
31702    });
31703
31704    /**
31705     * This method is like `_.find` except that it returns the key of the first
31706     * element `predicate` returns truthy for instead of the element itself.
31707     *
31708     * @static
31709     * @memberOf _
31710     * @since 1.1.0
31711     * @category Object
31712     * @param {Object} object The object to inspect.
31713     * @param {Function} [predicate=_.identity] The function invoked per iteration.
31714     * @returns {string|undefined} Returns the key of the matched element,
31715     *  else `undefined`.
31716     * @example
31717     *
31718     * var users = {
31719     *   'barney':  { 'age': 36, 'active': true },
31720     *   'fred':    { 'age': 40, 'active': false },
31721     *   'pebbles': { 'age': 1,  'active': true }
31722     * };
31723     *
31724     * _.findKey(users, function(o) { return o.age < 40; });
31725     * // => 'barney' (iteration order is not guaranteed)
31726     *
31727     * // The `_.matches` iteratee shorthand.
31728     * _.findKey(users, { 'age': 1, 'active': true });
31729     * // => 'pebbles'
31730     *
31731     * // The `_.matchesProperty` iteratee shorthand.
31732     * _.findKey(users, ['active', false]);
31733     * // => 'fred'
31734     *
31735     * // The `_.property` iteratee shorthand.
31736     * _.findKey(users, 'active');
31737     * // => 'barney'
31738     */
31739    function findKey(object, predicate) {
31740      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
31741    }
31742
31743    /**
31744     * This method is like `_.findKey` except that it iterates over elements of
31745     * a collection in the opposite order.
31746     *
31747     * @static
31748     * @memberOf _
31749     * @since 2.0.0
31750     * @category Object
31751     * @param {Object} object The object to inspect.
31752     * @param {Function} [predicate=_.identity] The function invoked per iteration.
31753     * @returns {string|undefined} Returns the key of the matched element,
31754     *  else `undefined`.
31755     * @example
31756     *
31757     * var users = {
31758     *   'barney':  { 'age': 36, 'active': true },
31759     *   'fred':    { 'age': 40, 'active': false },
31760     *   'pebbles': { 'age': 1,  'active': true }
31761     * };
31762     *
31763     * _.findLastKey(users, function(o) { return o.age < 40; });
31764     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
31765     *
31766     * // The `_.matches` iteratee shorthand.
31767     * _.findLastKey(users, { 'age': 36, 'active': true });
31768     * // => 'barney'
31769     *
31770     * // The `_.matchesProperty` iteratee shorthand.
31771     * _.findLastKey(users, ['active', false]);
31772     * // => 'fred'
31773     *
31774     * // The `_.property` iteratee shorthand.
31775     * _.findLastKey(users, 'active');
31776     * // => 'pebbles'
31777     */
31778    function findLastKey(object, predicate) {
31779      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
31780    }
31781
31782    /**
31783     * Iterates over own and inherited enumerable string keyed properties of an
31784     * object and invokes `iteratee` for each property. The iteratee is invoked
31785     * with three arguments: (value, key, object). Iteratee functions may exit
31786     * iteration early by explicitly returning `false`.
31787     *
31788     * @static
31789     * @memberOf _
31790     * @since 0.3.0
31791     * @category Object
31792     * @param {Object} object The object to iterate over.
31793     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
31794     * @returns {Object} Returns `object`.
31795     * @see _.forInRight
31796     * @example
31797     *
31798     * function Foo() {
31799     *   this.a = 1;
31800     *   this.b = 2;
31801     * }
31802     *
31803     * Foo.prototype.c = 3;
31804     *
31805     * _.forIn(new Foo, function(value, key) {
31806     *   console.log(key);
31807     * });
31808     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
31809     */
31810    function forIn(object, iteratee) {
31811      return object == null
31812        ? object
31813        : baseFor(object, getIteratee(iteratee, 3), keysIn);
31814    }
31815
31816    /**
31817     * This method is like `_.forIn` except that it iterates over properties of
31818     * `object` in the opposite order.
31819     *
31820     * @static
31821     * @memberOf _
31822     * @since 2.0.0
31823     * @category Object
31824     * @param {Object} object The object to iterate over.
31825     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
31826     * @returns {Object} Returns `object`.
31827     * @see _.forIn
31828     * @example
31829     *
31830     * function Foo() {
31831     *   this.a = 1;
31832     *   this.b = 2;
31833     * }
31834     *
31835     * Foo.prototype.c = 3;
31836     *
31837     * _.forInRight(new Foo, function(value, key) {
31838     *   console.log(key);
31839     * });
31840     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
31841     */
31842    function forInRight(object, iteratee) {
31843      return object == null
31844        ? object
31845        : baseForRight(object, getIteratee(iteratee, 3), keysIn);
31846    }
31847
31848    /**
31849     * Iterates over own enumerable string keyed properties of an object and
31850     * invokes `iteratee` for each property. The iteratee is invoked with three
31851     * arguments: (value, key, object). Iteratee functions may exit iteration
31852     * early by explicitly returning `false`.
31853     *
31854     * @static
31855     * @memberOf _
31856     * @since 0.3.0
31857     * @category Object
31858     * @param {Object} object The object to iterate over.
31859     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
31860     * @returns {Object} Returns `object`.
31861     * @see _.forOwnRight
31862     * @example
31863     *
31864     * function Foo() {
31865     *   this.a = 1;
31866     *   this.b = 2;
31867     * }
31868     *
31869     * Foo.prototype.c = 3;
31870     *
31871     * _.forOwn(new Foo, function(value, key) {
31872     *   console.log(key);
31873     * });
31874     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
31875     */
31876    function forOwn(object, iteratee) {
31877      return object && baseForOwn(object, getIteratee(iteratee, 3));
31878    }
31879
31880    /**
31881     * This method is like `_.forOwn` except that it iterates over properties of
31882     * `object` in the opposite order.
31883     *
31884     * @static
31885     * @memberOf _
31886     * @since 2.0.0
31887     * @category Object
31888     * @param {Object} object The object to iterate over.
31889     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
31890     * @returns {Object} Returns `object`.
31891     * @see _.forOwn
31892     * @example
31893     *
31894     * function Foo() {
31895     *   this.a = 1;
31896     *   this.b = 2;
31897     * }
31898     *
31899     * Foo.prototype.c = 3;
31900     *
31901     * _.forOwnRight(new Foo, function(value, key) {
31902     *   console.log(key);
31903     * });
31904     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
31905     */
31906    function forOwnRight(object, iteratee) {
31907      return object && baseForOwnRight(object, getIteratee(iteratee, 3));
31908    }
31909
31910    /**
31911     * Creates an array of function property names from own enumerable properties
31912     * of `object`.
31913     *
31914     * @static
31915     * @since 0.1.0
31916     * @memberOf _
31917     * @category Object
31918     * @param {Object} object The object to inspect.
31919     * @returns {Array} Returns the function names.
31920     * @see _.functionsIn
31921     * @example
31922     *
31923     * function Foo() {
31924     *   this.a = _.constant('a');
31925     *   this.b = _.constant('b');
31926     * }
31927     *
31928     * Foo.prototype.c = _.constant('c');
31929     *
31930     * _.functions(new Foo);
31931     * // => ['a', 'b']
31932     */
31933    function functions(object) {
31934      return object == null ? [] : baseFunctions(object, keys(object));
31935    }
31936
31937    /**
31938     * Creates an array of function property names from own and inherited
31939     * enumerable properties of `object`.
31940     *
31941     * @static
31942     * @memberOf _
31943     * @since 4.0.0
31944     * @category Object
31945     * @param {Object} object The object to inspect.
31946     * @returns {Array} Returns the function names.
31947     * @see _.functions
31948     * @example
31949     *
31950     * function Foo() {
31951     *   this.a = _.constant('a');
31952     *   this.b = _.constant('b');
31953     * }
31954     *
31955     * Foo.prototype.c = _.constant('c');
31956     *
31957     * _.functionsIn(new Foo);
31958     * // => ['a', 'b', 'c']
31959     */
31960    function functionsIn(object) {
31961      return object == null ? [] : baseFunctions(object, keysIn(object));
31962    }
31963
31964    /**
31965     * Gets the value at `path` of `object`. If the resolved value is
31966     * `undefined`, the `defaultValue` is returned in its place.
31967     *
31968     * @static
31969     * @memberOf _
31970     * @since 3.7.0
31971     * @category Object
31972     * @param {Object} object The object to query.
31973     * @param {Array|string} path The path of the property to get.
31974     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
31975     * @returns {*} Returns the resolved value.
31976     * @example
31977     *
31978     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
31979     *
31980     * _.get(object, 'a[0].b.c');
31981     * // => 3
31982     *
31983     * _.get(object, ['a', '0', 'b', 'c']);
31984     * // => 3
31985     *
31986     * _.get(object, 'a.b.c', 'default');
31987     * // => 'default'
31988     */
31989    function get(object, path, defaultValue) {
31990      var result = object == null ? undefined : baseGet(object, path);
31991      return result === undefined ? defaultValue : result;
31992    }
31993
31994    /**
31995     * Checks if `path` is a direct property of `object`.
31996     *
31997     * @static
31998     * @since 0.1.0
31999     * @memberOf _
32000     * @category Object
32001     * @param {Object} object The object to query.
32002     * @param {Array|string} path The path to check.
32003     * @returns {boolean} Returns `true` if `path` exists, else `false`.
32004     * @example
32005     *
32006     * var object = { 'a': { 'b': 2 } };
32007     * var other = _.create({ 'a': _.create({ 'b': 2 }) });
32008     *
32009     * _.has(object, 'a');
32010     * // => true
32011     *
32012     * _.has(object, 'a.b');
32013     * // => true
32014     *
32015     * _.has(object, ['a', 'b']);
32016     * // => true
32017     *
32018     * _.has(other, 'a');
32019     * // => false
32020     */
32021    function has(object, path) {
32022      return object != null && hasPath(object, path, baseHas);
32023    }
32024
32025    /**
32026     * Checks if `path` is a direct or inherited property of `object`.
32027     *
32028     * @static
32029     * @memberOf _
32030     * @since 4.0.0
32031     * @category Object
32032     * @param {Object} object The object to query.
32033     * @param {Array|string} path The path to check.
32034     * @returns {boolean} Returns `true` if `path` exists, else `false`.
32035     * @example
32036     *
32037     * var object = _.create({ 'a': _.create({ 'b': 2 }) });
32038     *
32039     * _.hasIn(object, 'a');
32040     * // => true
32041     *
32042     * _.hasIn(object, 'a.b');
32043     * // => true
32044     *
32045     * _.hasIn(object, ['a', 'b']);
32046     * // => true
32047     *
32048     * _.hasIn(object, 'b');
32049     * // => false
32050     */
32051    function hasIn(object, path) {
32052      return object != null && hasPath(object, path, baseHasIn);
32053    }
32054
32055    /**
32056     * Creates an object composed of the inverted keys and values of `object`.
32057     * If `object` contains duplicate values, subsequent values overwrite
32058     * property assignments of previous values.
32059     *
32060     * @static
32061     * @memberOf _
32062     * @since 0.7.0
32063     * @category Object
32064     * @param {Object} object The object to invert.
32065     * @returns {Object} Returns the new inverted object.
32066     * @example
32067     *
32068     * var object = { 'a': 1, 'b': 2, 'c': 1 };
32069     *
32070     * _.invert(object);
32071     * // => { '1': 'c', '2': 'b' }
32072     */
32073    var invert = createInverter(function(result, value, key) {
32074      if (value != null &&
32075          typeof value.toString != 'function') {
32076        value = nativeObjectToString.call(value);
32077      }
32078
32079      result[value] = key;
32080    }, constant(identity));
32081
32082    /**
32083     * This method is like `_.invert` except that the inverted object is generated
32084     * from the results of running each element of `object` thru `iteratee`. The
32085     * corresponding inverted value of each inverted key is an array of keys
32086     * responsible for generating the inverted value. The iteratee is invoked
32087     * with one argument: (value).
32088     *
32089     * @static
32090     * @memberOf _
32091     * @since 4.1.0
32092     * @category Object
32093     * @param {Object} object The object to invert.
32094     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
32095     * @returns {Object} Returns the new inverted object.
32096     * @example
32097     *
32098     * var object = { 'a': 1, 'b': 2, 'c': 1 };
32099     *
32100     * _.invertBy(object);
32101     * // => { '1': ['a', 'c'], '2': ['b'] }
32102     *
32103     * _.invertBy(object, function(value) {
32104     *   return 'group' + value;
32105     * });
32106     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
32107     */
32108    var invertBy = createInverter(function(result, value, key) {
32109      if (value != null &&
32110          typeof value.toString != 'function') {
32111        value = nativeObjectToString.call(value);
32112      }
32113
32114      if (hasOwnProperty.call(result, value)) {
32115        result[value].push(key);
32116      } else {
32117        result[value] = [key];
32118      }
32119    }, getIteratee);
32120
32121    /**
32122     * Invokes the method at `path` of `object`.
32123     *
32124     * @static
32125     * @memberOf _
32126     * @since 4.0.0
32127     * @category Object
32128     * @param {Object} object The object to query.
32129     * @param {Array|string} path The path of the method to invoke.
32130     * @param {...*} [args] The arguments to invoke the method with.
32131     * @returns {*} Returns the result of the invoked method.
32132     * @example
32133     *
32134     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
32135     *
32136     * _.invoke(object, 'a[0].b.c.slice', 1, 3);
32137     * // => [2, 3]
32138     */
32139    var invoke = baseRest(baseInvoke);
32140
32141    /**
32142     * Creates an array of the own enumerable property names of `object`.
32143     *
32144     * **Note:** Non-object values are coerced to objects. See the
32145     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
32146     * for more details.
32147     *
32148     * @static
32149     * @since 0.1.0
32150     * @memberOf _
32151     * @category Object
32152     * @param {Object} object The object to query.
32153     * @returns {Array} Returns the array of property names.
32154     * @example
32155     *
32156     * function Foo() {
32157     *   this.a = 1;
32158     *   this.b = 2;
32159     * }
32160     *
32161     * Foo.prototype.c = 3;
32162     *
32163     * _.keys(new Foo);
32164     * // => ['a', 'b'] (iteration order is not guaranteed)
32165     *
32166     * _.keys('hi');
32167     * // => ['0', '1']
32168     */
32169    function keys(object) {
32170      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
32171    }
32172
32173    /**
32174     * Creates an array of the own and inherited enumerable property names of `object`.
32175     *
32176     * **Note:** Non-object values are coerced to objects.
32177     *
32178     * @static
32179     * @memberOf _
32180     * @since 3.0.0
32181     * @category Object
32182     * @param {Object} object The object to query.
32183     * @returns {Array} Returns the array of property names.
32184     * @example
32185     *
32186     * function Foo() {
32187     *   this.a = 1;
32188     *   this.b = 2;
32189     * }
32190     *
32191     * Foo.prototype.c = 3;
32192     *
32193     * _.keysIn(new Foo);
32194     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
32195     */
32196    function keysIn(object) {
32197      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
32198    }
32199
32200    /**
32201     * The opposite of `_.mapValues`; this method creates an object with the
32202     * same values as `object` and keys generated by running each own enumerable
32203     * string keyed property of `object` thru `iteratee`. The iteratee is invoked
32204     * with three arguments: (value, key, object).
32205     *
32206     * @static
32207     * @memberOf _
32208     * @since 3.8.0
32209     * @category Object
32210     * @param {Object} object The object to iterate over.
32211     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
32212     * @returns {Object} Returns the new mapped object.
32213     * @see _.mapValues
32214     * @example
32215     *
32216     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
32217     *   return key + value;
32218     * });
32219     * // => { 'a1': 1, 'b2': 2 }
32220     */
32221    function mapKeys(object, iteratee) {
32222      var result = {};
32223      iteratee = getIteratee(iteratee, 3);
32224
32225      baseForOwn(object, function(value, key, object) {
32226        baseAssignValue(result, iteratee(value, key, object), value);
32227      });
32228      return result;
32229    }
32230
32231    /**
32232     * Creates an object with the same keys as `object` and values generated
32233     * by running each own enumerable string keyed property of `object` thru
32234     * `iteratee`. The iteratee is invoked with three arguments:
32235     * (value, key, object).
32236     *
32237     * @static
32238     * @memberOf _
32239     * @since 2.4.0
32240     * @category Object
32241     * @param {Object} object The object to iterate over.
32242     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
32243     * @returns {Object} Returns the new mapped object.
32244     * @see _.mapKeys
32245     * @example
32246     *
32247     * var users = {
32248     *   'fred':    { 'user': 'fred',    'age': 40 },
32249     *   'pebbles': { 'user': 'pebbles', 'age': 1 }
32250     * };
32251     *
32252     * _.mapValues(users, function(o) { return o.age; });
32253     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
32254     *
32255     * // The `_.property` iteratee shorthand.
32256     * _.mapValues(users, 'age');
32257     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
32258     */
32259    function mapValues(object, iteratee) {
32260      var result = {};
32261      iteratee = getIteratee(iteratee, 3);
32262
32263      baseForOwn(object, function(value, key, object) {
32264        baseAssignValue(result, key, iteratee(value, key, object));
32265      });
32266      return result;
32267    }
32268
32269    /**
32270     * This method is like `_.assign` except that it recursively merges own and
32271     * inherited enumerable string keyed properties of source objects into the
32272     * destination object. Source properties that resolve to `undefined` are
32273     * skipped if a destination value exists. Array and plain object properties
32274     * are merged recursively. Other objects and value types are overridden by
32275     * assignment. Source objects are applied from left to right. Subsequent
32276     * sources overwrite property assignments of previous sources.
32277     *
32278     * **Note:** This method mutates `object`.
32279     *
32280     * @static
32281     * @memberOf _
32282     * @since 0.5.0
32283     * @category Object
32284     * @param {Object} object The destination object.
32285     * @param {...Object} [sources] The source objects.
32286     * @returns {Object} Returns `object`.
32287     * @example
32288     *
32289     * var object = {
32290     *   'a': [{ 'b': 2 }, { 'd': 4 }]
32291     * };
32292     *
32293     * var other = {
32294     *   'a': [{ 'c': 3 }, { 'e': 5 }]
32295     * };
32296     *
32297     * _.merge(object, other);
32298     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
32299     */
32300    var merge = createAssigner(function(object, source, srcIndex) {
32301      baseMerge(object, source, srcIndex);
32302    });
32303
32304    /**
32305     * This method is like `_.merge` except that it accepts `customizer` which
32306     * is invoked to produce the merged values of the destination and source
32307     * properties. If `customizer` returns `undefined`, merging is handled by the
32308     * method instead. The `customizer` is invoked with six arguments:
32309     * (objValue, srcValue, key, object, source, stack).
32310     *
32311     * **Note:** This method mutates `object`.
32312     *
32313     * @static
32314     * @memberOf _
32315     * @since 4.0.0
32316     * @category Object
32317     * @param {Object} object The destination object.
32318     * @param {...Object} sources The source objects.
32319     * @param {Function} customizer The function to customize assigned values.
32320     * @returns {Object} Returns `object`.
32321     * @example
32322     *
32323     * function customizer(objValue, srcValue) {
32324     *   if (_.isArray(objValue)) {
32325     *     return objValue.concat(srcValue);
32326     *   }
32327     * }
32328     *
32329     * var object = { 'a': [1], 'b': [2] };
32330     * var other = { 'a': [3], 'b': [4] };
32331     *
32332     * _.mergeWith(object, other, customizer);
32333     * // => { 'a': [1, 3], 'b': [2, 4] }
32334     */
32335    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
32336      baseMerge(object, source, srcIndex, customizer);
32337    });
32338
32339    /**
32340     * The opposite of `_.pick`; this method creates an object composed of the
32341     * own and inherited enumerable property paths of `object` that are not omitted.
32342     *
32343     * **Note:** This method is considerably slower than `_.pick`.
32344     *
32345     * @static
32346     * @since 0.1.0
32347     * @memberOf _
32348     * @category Object
32349     * @param {Object} object The source object.
32350     * @param {...(string|string[])} [paths] The property paths to omit.
32351     * @returns {Object} Returns the new object.
32352     * @example
32353     *
32354     * var object = { 'a': 1, 'b': '2', 'c': 3 };
32355     *
32356     * _.omit(object, ['a', 'c']);
32357     * // => { 'b': '2' }
32358     */
32359    var omit = flatRest(function(object, paths) {
32360      var result = {};
32361      if (object == null) {
32362        return result;
32363      }
32364      var isDeep = false;
32365      paths = arrayMap(paths, function(path) {
32366        path = castPath(path, object);
32367        isDeep || (isDeep = path.length > 1);
32368        return path;
32369      });
32370      copyObject(object, getAllKeysIn(object), result);
32371      if (isDeep) {
32372        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
32373      }
32374      var length = paths.length;
32375      while (length--) {
32376        baseUnset(result, paths[length]);
32377      }
32378      return result;
32379    });
32380
32381    /**
32382     * The opposite of `_.pickBy`; this method creates an object composed of
32383     * the own and inherited enumerable string keyed properties of `object` that
32384     * `predicate` doesn't return truthy for. The predicate is invoked with two
32385     * arguments: (value, key).
32386     *
32387     * @static
32388     * @memberOf _
32389     * @since 4.0.0
32390     * @category Object
32391     * @param {Object} object The source object.
32392     * @param {Function} [predicate=_.identity] The function invoked per property.
32393     * @returns {Object} Returns the new object.
32394     * @example
32395     *
32396     * var object = { 'a': 1, 'b': '2', 'c': 3 };
32397     *
32398     * _.omitBy(object, _.isNumber);
32399     * // => { 'b': '2' }
32400     */
32401    function omitBy(object, predicate) {
32402      return pickBy(object, negate(getIteratee(predicate)));
32403    }
32404
32405    /**
32406     * Creates an object composed of the picked `object` properties.
32407     *
32408     * @static
32409     * @since 0.1.0
32410     * @memberOf _
32411     * @category Object
32412     * @param {Object} object The source object.
32413     * @param {...(string|string[])} [paths] The property paths to pick.
32414     * @returns {Object} Returns the new object.
32415     * @example
32416     *
32417     * var object = { 'a': 1, 'b': '2', 'c': 3 };
32418     *
32419     * _.pick(object, ['a', 'c']);
32420     * // => { 'a': 1, 'c': 3 }
32421     */
32422    var pick = flatRest(function(object, paths) {
32423      return object == null ? {} : basePick(object, paths);
32424    });
32425
32426    /**
32427     * Creates an object composed of the `object` properties `predicate` returns
32428     * truthy for. The predicate is invoked with two arguments: (value, key).
32429     *
32430     * @static
32431     * @memberOf _
32432     * @since 4.0.0
32433     * @category Object
32434     * @param {Object} object The source object.
32435     * @param {Function} [predicate=_.identity] The function invoked per property.
32436     * @returns {Object} Returns the new object.
32437     * @example
32438     *
32439     * var object = { 'a': 1, 'b': '2', 'c': 3 };
32440     *
32441     * _.pickBy(object, _.isNumber);
32442     * // => { 'a': 1, 'c': 3 }
32443     */
32444    function pickBy(object, predicate) {
32445      if (object == null) {
32446        return {};
32447      }
32448      var props = arrayMap(getAllKeysIn(object), function(prop) {
32449        return [prop];
32450      });
32451      predicate = getIteratee(predicate);
32452      return basePickBy(object, props, function(value, path) {
32453        return predicate(value, path[0]);
32454      });
32455    }
32456
32457    /**
32458     * This method is like `_.get` except that if the resolved value is a
32459     * function it's invoked with the `this` binding of its parent object and
32460     * its result is returned.
32461     *
32462     * @static
32463     * @since 0.1.0
32464     * @memberOf _
32465     * @category Object
32466     * @param {Object} object The object to query.
32467     * @param {Array|string} path The path of the property to resolve.
32468     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
32469     * @returns {*} Returns the resolved value.
32470     * @example
32471     *
32472     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
32473     *
32474     * _.result(object, 'a[0].b.c1');
32475     * // => 3
32476     *
32477     * _.result(object, 'a[0].b.c2');
32478     * // => 4
32479     *
32480     * _.result(object, 'a[0].b.c3', 'default');
32481     * // => 'default'
32482     *
32483     * _.result(object, 'a[0].b.c3', _.constant('default'));
32484     * // => 'default'
32485     */
32486    function result(object, path, defaultValue) {
32487      path = castPath(path, object);
32488
32489      var index = -1,
32490          length = path.length;
32491
32492      // Ensure the loop is entered when path is empty.
32493      if (!length) {
32494        length = 1;
32495        object = undefined;
32496      }
32497      while (++index < length) {
32498        var value = object == null ? undefined : object[toKey(path[index])];
32499        if (value === undefined) {
32500          index = length;
32501          value = defaultValue;
32502        }
32503        object = isFunction(value) ? value.call(object) : value;
32504      }
32505      return object;
32506    }
32507
32508    /**
32509     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
32510     * it's created. Arrays are created for missing index properties while objects
32511     * are created for all other missing properties. Use `_.setWith` to customize
32512     * `path` creation.
32513     *
32514     * **Note:** This method mutates `object`.
32515     *
32516     * @static
32517     * @memberOf _
32518     * @since 3.7.0
32519     * @category Object
32520     * @param {Object} object The object to modify.
32521     * @param {Array|string} path The path of the property to set.
32522     * @param {*} value The value to set.
32523     * @returns {Object} Returns `object`.
32524     * @example
32525     *
32526     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
32527     *
32528     * _.set(object, 'a[0].b.c', 4);
32529     * console.log(object.a[0].b.c);
32530     * // => 4
32531     *
32532     * _.set(object, ['x', '0', 'y', 'z'], 5);
32533     * console.log(object.x[0].y.z);
32534     * // => 5
32535     */
32536    function set(object, path, value) {
32537      return object == null ? object : baseSet(object, path, value);
32538    }
32539
32540    /**
32541     * This method is like `_.set` except that it accepts `customizer` which is
32542     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
32543     * path creation is handled by the method instead. The `customizer` is invoked
32544     * with three arguments: (nsValue, key, nsObject).
32545     *
32546     * **Note:** This method mutates `object`.
32547     *
32548     * @static
32549     * @memberOf _
32550     * @since 4.0.0
32551     * @category Object
32552     * @param {Object} object The object to modify.
32553     * @param {Array|string} path The path of the property to set.
32554     * @param {*} value The value to set.
32555     * @param {Function} [customizer] The function to customize assigned values.
32556     * @returns {Object} Returns `object`.
32557     * @example
32558     *
32559     * var object = {};
32560     *
32561     * _.setWith(object, '[0][1]', 'a', Object);
32562     * // => { '0': { '1': 'a' } }
32563     */
32564    function setWith(object, path, value, customizer) {
32565      customizer = typeof customizer == 'function' ? customizer : undefined;
32566      return object == null ? object : baseSet(object, path, value, customizer);
32567    }
32568
32569    /**
32570     * Creates an array of own enumerable string keyed-value pairs for `object`
32571     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
32572     * entries are returned.
32573     *
32574     * @static
32575     * @memberOf _
32576     * @since 4.0.0
32577     * @alias entries
32578     * @category Object
32579     * @param {Object} object The object to query.
32580     * @returns {Array} Returns the key-value pairs.
32581     * @example
32582     *
32583     * function Foo() {
32584     *   this.a = 1;
32585     *   this.b = 2;
32586     * }
32587     *
32588     * Foo.prototype.c = 3;
32589     *
32590     * _.toPairs(new Foo);
32591     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
32592     */
32593    var toPairs = createToPairs(keys);
32594
32595    /**
32596     * Creates an array of own and inherited enumerable string keyed-value pairs
32597     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
32598     * or set, its entries are returned.
32599     *
32600     * @static
32601     * @memberOf _
32602     * @since 4.0.0
32603     * @alias entriesIn
32604     * @category Object
32605     * @param {Object} object The object to query.
32606     * @returns {Array} Returns the key-value pairs.
32607     * @example
32608     *
32609     * function Foo() {
32610     *   this.a = 1;
32611     *   this.b = 2;
32612     * }
32613     *
32614     * Foo.prototype.c = 3;
32615     *
32616     * _.toPairsIn(new Foo);
32617     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
32618     */
32619    var toPairsIn = createToPairs(keysIn);
32620
32621    /**
32622     * An alternative to `_.reduce`; this method transforms `object` to a new
32623     * `accumulator` object which is the result of running each of its own
32624     * enumerable string keyed properties thru `iteratee`, with each invocation
32625     * potentially mutating the `accumulator` object. If `accumulator` is not
32626     * provided, a new object with the same `[[Prototype]]` will be used. The
32627     * iteratee is invoked with four arguments: (accumulator, value, key, object).
32628     * Iteratee functions may exit iteration early by explicitly returning `false`.
32629     *
32630     * @static
32631     * @memberOf _
32632     * @since 1.3.0
32633     * @category Object
32634     * @param {Object} object The object to iterate over.
32635     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
32636     * @param {*} [accumulator] The custom accumulator value.
32637     * @returns {*} Returns the accumulated value.
32638     * @example
32639     *
32640     * _.transform([2, 3, 4], function(result, n) {
32641     *   result.push(n *= n);
32642     *   return n % 2 == 0;
32643     * }, []);
32644     * // => [4, 9]
32645     *
32646     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
32647     *   (result[value] || (result[value] = [])).push(key);
32648     * }, {});
32649     * // => { '1': ['a', 'c'], '2': ['b'] }
32650     */
32651    function transform(object, iteratee, accumulator) {
32652      var isArr = isArray(object),
32653          isArrLike = isArr || isBuffer(object) || isTypedArray(object);
32654
32655      iteratee = getIteratee(iteratee, 4);
32656      if (accumulator == null) {
32657        var Ctor = object && object.constructor;
32658        if (isArrLike) {
32659          accumulator = isArr ? new Ctor : [];
32660        }
32661        else if (isObject(object)) {
32662          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
32663        }
32664        else {
32665          accumulator = {};
32666        }
32667      }
32668      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
32669        return iteratee(accumulator, value, index, object);
32670      });
32671      return accumulator;
32672    }
32673
32674    /**
32675     * Removes the property at `path` of `object`.
32676     *
32677     * **Note:** This method mutates `object`.
32678     *
32679     * @static
32680     * @memberOf _
32681     * @since 4.0.0
32682     * @category Object
32683     * @param {Object} object The object to modify.
32684     * @param {Array|string} path The path of the property to unset.
32685     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
32686     * @example
32687     *
32688     * var object = { 'a': [{ 'b': { 'c': 7 } }] };
32689     * _.unset(object, 'a[0].b.c');
32690     * // => true
32691     *
32692     * console.log(object);
32693     * // => { 'a': [{ 'b': {} }] };
32694     *
32695     * _.unset(object, ['a', '0', 'b', 'c']);
32696     * // => true
32697     *
32698     * console.log(object);
32699     * // => { 'a': [{ 'b': {} }] };
32700     */
32701    function unset(object, path) {
32702      return object == null ? true : baseUnset(object, path);
32703    }
32704
32705    /**
32706     * This method is like `_.set` except that accepts `updater` to produce the
32707     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
32708     * is invoked with one argument: (value).
32709     *
32710     * **Note:** This method mutates `object`.
32711     *
32712     * @static
32713     * @memberOf _
32714     * @since 4.6.0
32715     * @category Object
32716     * @param {Object} object The object to modify.
32717     * @param {Array|string} path The path of the property to set.
32718     * @param {Function} updater The function to produce the updated value.
32719     * @returns {Object} Returns `object`.
32720     * @example
32721     *
32722     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
32723     *
32724     * _.update(object, 'a[0].b.c', function(n) { return n * n; });
32725     * console.log(object.a[0].b.c);
32726     * // => 9
32727     *
32728     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
32729     * console.log(object.x[0].y.z);
32730     * // => 0
32731     */
32732    function update(object, path, updater) {
32733      return object == null ? object : baseUpdate(object, path, castFunction(updater));
32734    }
32735
32736    /**
32737     * This method is like `_.update` except that it accepts `customizer` which is
32738     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
32739     * path creation is handled by the method instead. The `customizer` is invoked
32740     * with three arguments: (nsValue, key, nsObject).
32741     *
32742     * **Note:** This method mutates `object`.
32743     *
32744     * @static
32745     * @memberOf _
32746     * @since 4.6.0
32747     * @category Object
32748     * @param {Object} object The object to modify.
32749     * @param {Array|string} path The path of the property to set.
32750     * @param {Function} updater The function to produce the updated value.
32751     * @param {Function} [customizer] The function to customize assigned values.
32752     * @returns {Object} Returns `object`.
32753     * @example
32754     *
32755     * var object = {};
32756     *
32757     * _.updateWith(object, '[0][1]', _.constant('a'), Object);
32758     * // => { '0': { '1': 'a' } }
32759     */
32760    function updateWith(object, path, updater, customizer) {
32761      customizer = typeof customizer == 'function' ? customizer : undefined;
32762      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
32763    }
32764
32765    /**
32766     * Creates an array of the own enumerable string keyed property values of `object`.
32767     *
32768     * **Note:** Non-object values are coerced to objects.
32769     *
32770     * @static
32771     * @since 0.1.0
32772     * @memberOf _
32773     * @category Object
32774     * @param {Object} object The object to query.
32775     * @returns {Array} Returns the array of property values.
32776     * @example
32777     *
32778     * function Foo() {
32779     *   this.a = 1;
32780     *   this.b = 2;
32781     * }
32782     *
32783     * Foo.prototype.c = 3;
32784     *
32785     * _.values(new Foo);
32786     * // => [1, 2] (iteration order is not guaranteed)
32787     *
32788     * _.values('hi');
32789     * // => ['h', 'i']
32790     */
32791    function values(object) {
32792      return object == null ? [] : baseValues(object, keys(object));
32793    }
32794
32795    /**
32796     * Creates an array of the own and inherited enumerable string keyed property
32797     * values of `object`.
32798     *
32799     * **Note:** Non-object values are coerced to objects.
32800     *
32801     * @static
32802     * @memberOf _
32803     * @since 3.0.0
32804     * @category Object
32805     * @param {Object} object The object to query.
32806     * @returns {Array} Returns the array of property values.
32807     * @example
32808     *
32809     * function Foo() {
32810     *   this.a = 1;
32811     *   this.b = 2;
32812     * }
32813     *
32814     * Foo.prototype.c = 3;
32815     *
32816     * _.valuesIn(new Foo);
32817     * // => [1, 2, 3] (iteration order is not guaranteed)
32818     */
32819    function valuesIn(object) {
32820      return object == null ? [] : baseValues(object, keysIn(object));
32821    }
32822
32823    /*------------------------------------------------------------------------*/
32824
32825    /**
32826     * Clamps `number` within the inclusive `lower` and `upper` bounds.
32827     *
32828     * @static
32829     * @memberOf _
32830     * @since 4.0.0
32831     * @category Number
32832     * @param {number} number The number to clamp.
32833     * @param {number} [lower] The lower bound.
32834     * @param {number} upper The upper bound.
32835     * @returns {number} Returns the clamped number.
32836     * @example
32837     *
32838     * _.clamp(-10, -5, 5);
32839     * // => -5
32840     *
32841     * _.clamp(10, -5, 5);
32842     * // => 5
32843     */
32844    function clamp(number, lower, upper) {
32845      if (upper === undefined) {
32846        upper = lower;
32847        lower = undefined;
32848      }
32849      if (upper !== undefined) {
32850        upper = toNumber(upper);
32851        upper = upper === upper ? upper : 0;
32852      }
32853      if (lower !== undefined) {
32854        lower = toNumber(lower);
32855        lower = lower === lower ? lower : 0;
32856      }
32857      return baseClamp(toNumber(number), lower, upper);
32858    }
32859
32860    /**
32861     * Checks if `n` is between `start` and up to, but not including, `end`. If
32862     * `end` is not specified, it's set to `start` with `start` then set to `0`.
32863     * If `start` is greater than `end` the params are swapped to support
32864     * negative ranges.
32865     *
32866     * @static
32867     * @memberOf _
32868     * @since 3.3.0
32869     * @category Number
32870     * @param {number} number The number to check.
32871     * @param {number} [start=0] The start of the range.
32872     * @param {number} end The end of the range.
32873     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
32874     * @see _.range, _.rangeRight
32875     * @example
32876     *
32877     * _.inRange(3, 2, 4);
32878     * // => true
32879     *
32880     * _.inRange(4, 8);
32881     * // => true
32882     *
32883     * _.inRange(4, 2);
32884     * // => false
32885     *
32886     * _.inRange(2, 2);
32887     * // => false
32888     *
32889     * _.inRange(1.2, 2);
32890     * // => true
32891     *
32892     * _.inRange(5.2, 4);
32893     * // => false
32894     *
32895     * _.inRange(-3, -2, -6);
32896     * // => true
32897     */
32898    function inRange(number, start, end) {
32899      start = toFinite(start);
32900      if (end === undefined) {
32901        end = start;
32902        start = 0;
32903      } else {
32904        end = toFinite(end);
32905      }
32906      number = toNumber(number);
32907      return baseInRange(number, start, end);
32908    }
32909
32910    /**
32911     * Produces a random number between the inclusive `lower` and `upper` bounds.
32912     * If only one argument is provided a number between `0` and the given number
32913     * is returned. If `floating` is `true`, or either `lower` or `upper` are
32914     * floats, a floating-point number is returned instead of an integer.
32915     *
32916     * **Note:** JavaScript follows the IEEE-754 standard for resolving
32917     * floating-point values which can produce unexpected results.
32918     *
32919     * @static
32920     * @memberOf _
32921     * @since 0.7.0
32922     * @category Number
32923     * @param {number} [lower=0] The lower bound.
32924     * @param {number} [upper=1] The upper bound.
32925     * @param {boolean} [floating] Specify returning a floating-point number.
32926     * @returns {number} Returns the random number.
32927     * @example
32928     *
32929     * _.random(0, 5);
32930     * // => an integer between 0 and 5
32931     *
32932     * _.random(5);
32933     * // => also an integer between 0 and 5
32934     *
32935     * _.random(5, true);
32936     * // => a floating-point number between 0 and 5
32937     *
32938     * _.random(1.2, 5.2);
32939     * // => a floating-point number between 1.2 and 5.2
32940     */
32941    function random(lower, upper, floating) {
32942      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
32943        upper = floating = undefined;
32944      }
32945      if (floating === undefined) {
32946        if (typeof upper == 'boolean') {
32947          floating = upper;
32948          upper = undefined;
32949        }
32950        else if (typeof lower == 'boolean') {
32951          floating = lower;
32952          lower = undefined;
32953        }
32954      }
32955      if (lower === undefined && upper === undefined) {
32956        lower = 0;
32957        upper = 1;
32958      }
32959      else {
32960        lower = toFinite(lower);
32961        if (upper === undefined) {
32962          upper = lower;
32963          lower = 0;
32964        } else {
32965          upper = toFinite(upper);
32966        }
32967      }
32968      if (lower > upper) {
32969        var temp = lower;
32970        lower = upper;
32971        upper = temp;
32972      }
32973      if (floating || lower % 1 || upper % 1) {
32974        var rand = nativeRandom();
32975        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
32976      }
32977      return baseRandom(lower, upper);
32978    }
32979
32980    /*------------------------------------------------------------------------*/
32981
32982    /**
32983     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
32984     *
32985     * @static
32986     * @memberOf _
32987     * @since 3.0.0
32988     * @category String
32989     * @param {string} [string=''] The string to convert.
32990     * @returns {string} Returns the camel cased string.
32991     * @example
32992     *
32993     * _.camelCase('Foo Bar');
32994     * // => 'fooBar'
32995     *
32996     * _.camelCase('--foo-bar--');
32997     * // => 'fooBar'
32998     *
32999     * _.camelCase('__FOO_BAR__');
33000     * // => 'fooBar'
33001     */
33002    var camelCase = createCompounder(function(result, word, index) {
33003      word = word.toLowerCase();
33004      return result + (index ? capitalize(word) : word);
33005    });
33006
33007    /**
33008     * Converts the first character of `string` to upper case and the remaining
33009     * to lower case.
33010     *
33011     * @static
33012     * @memberOf _
33013     * @since 3.0.0
33014     * @category String
33015     * @param {string} [string=''] The string to capitalize.
33016     * @returns {string} Returns the capitalized string.
33017     * @example
33018     *
33019     * _.capitalize('FRED');
33020     * // => 'Fred'
33021     */
33022    function capitalize(string) {
33023      return upperFirst(toString(string).toLowerCase());
33024    }
33025
33026    /**
33027     * Deburrs `string` by converting
33028     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
33029     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
33030     * letters to basic Latin letters and removing
33031     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
33032     *
33033     * @static
33034     * @memberOf _
33035     * @since 3.0.0
33036     * @category String
33037     * @param {string} [string=''] The string to deburr.
33038     * @returns {string} Returns the deburred string.
33039     * @example
33040     *
33041     * _.deburr('déjà vu');
33042     * // => 'deja vu'
33043     */
33044    function deburr(string) {
33045      string = toString(string);
33046      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
33047    }
33048
33049    /**
33050     * Checks if `string` ends with the given target string.
33051     *
33052     * @static
33053     * @memberOf _
33054     * @since 3.0.0
33055     * @category String
33056     * @param {string} [string=''] The string to inspect.
33057     * @param {string} [target] The string to search for.
33058     * @param {number} [position=string.length] The position to search up to.
33059     * @returns {boolean} Returns `true` if `string` ends with `target`,
33060     *  else `false`.
33061     * @example
33062     *
33063     * _.endsWith('abc', 'c');
33064     * // => true
33065     *
33066     * _.endsWith('abc', 'b');
33067     * // => false
33068     *
33069     * _.endsWith('abc', 'b', 2);
33070     * // => true
33071     */
33072    function endsWith(string, target, position) {
33073      string = toString(string);
33074      target = baseToString(target);
33075
33076      var length = string.length;
33077      position = position === undefined
33078        ? length
33079        : baseClamp(toInteger(position), 0, length);
33080
33081      var end = position;
33082      position -= target.length;
33083      return position >= 0 && string.slice(position, end) == target;
33084    }
33085
33086    /**
33087     * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
33088     * corresponding HTML entities.
33089     *
33090     * **Note:** No other characters are escaped. To escape additional
33091     * characters use a third-party library like [_he_](https://mths.be/he).
33092     *
33093     * Though the ">" character is escaped for symmetry, characters like
33094     * ">" and "/" don't need escaping in HTML and have no special meaning
33095     * unless they're part of a tag or unquoted attribute value. See
33096     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
33097     * (under "semi-related fun fact") for more details.
33098     *
33099     * When working with HTML you should always
33100     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
33101     * XSS vectors.
33102     *
33103     * @static
33104     * @since 0.1.0
33105     * @memberOf _
33106     * @category String
33107     * @param {string} [string=''] The string to escape.
33108     * @returns {string} Returns the escaped string.
33109     * @example
33110     *
33111     * _.escape('fred, barney, & pebbles');
33112     * // => 'fred, barney, &amp; pebbles'
33113     */
33114    function escape(string) {
33115      string = toString(string);
33116      return (string && reHasUnescapedHtml.test(string))
33117        ? string.replace(reUnescapedHtml, escapeHtmlChar)
33118        : string;
33119    }
33120
33121    /**
33122     * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
33123     * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
33124     *
33125     * @static
33126     * @memberOf _
33127     * @since 3.0.0
33128     * @category String
33129     * @param {string} [string=''] The string to escape.
33130     * @returns {string} Returns the escaped string.
33131     * @example
33132     *
33133     * _.escapeRegExp('[lodash](https://lodash.com/)');
33134     * // => '\[lodash\]\(https://lodash\.com/\)'
33135     */
33136    function escapeRegExp(string) {
33137      string = toString(string);
33138      return (string && reHasRegExpChar.test(string))
33139        ? string.replace(reRegExpChar, '\\$&')
33140        : string;
33141    }
33142
33143    /**
33144     * Converts `string` to
33145     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
33146     *
33147     * @static
33148     * @memberOf _
33149     * @since 3.0.0
33150     * @category String
33151     * @param {string} [string=''] The string to convert.
33152     * @returns {string} Returns the kebab cased string.
33153     * @example
33154     *
33155     * _.kebabCase('Foo Bar');
33156     * // => 'foo-bar'
33157     *
33158     * _.kebabCase('fooBar');
33159     * // => 'foo-bar'
33160     *
33161     * _.kebabCase('__FOO_BAR__');
33162     * // => 'foo-bar'
33163     */
33164    var kebabCase = createCompounder(function(result, word, index) {
33165      return result + (index ? '-' : '') + word.toLowerCase();
33166    });
33167
33168    /**
33169     * Converts `string`, as space separated words, to lower case.
33170     *
33171     * @static
33172     * @memberOf _
33173     * @since 4.0.0
33174     * @category String
33175     * @param {string} [string=''] The string to convert.
33176     * @returns {string} Returns the lower cased string.
33177     * @example
33178     *
33179     * _.lowerCase('--Foo-Bar--');
33180     * // => 'foo bar'
33181     *
33182     * _.lowerCase('fooBar');
33183     * // => 'foo bar'
33184     *
33185     * _.lowerCase('__FOO_BAR__');
33186     * // => 'foo bar'
33187     */
33188    var lowerCase = createCompounder(function(result, word, index) {
33189      return result + (index ? ' ' : '') + word.toLowerCase();
33190    });
33191
33192    /**
33193     * Converts the first character of `string` to lower case.
33194     *
33195     * @static
33196     * @memberOf _
33197     * @since 4.0.0
33198     * @category String
33199     * @param {string} [string=''] The string to convert.
33200     * @returns {string} Returns the converted string.
33201     * @example
33202     *
33203     * _.lowerFirst('Fred');
33204     * // => 'fred'
33205     *
33206     * _.lowerFirst('FRED');
33207     * // => 'fRED'
33208     */
33209    var lowerFirst = createCaseFirst('toLowerCase');
33210
33211    /**
33212     * Pads `string` on the left and right sides if it's shorter than `length`.
33213     * Padding characters are truncated if they can't be evenly divided by `length`.
33214     *
33215     * @static
33216     * @memberOf _
33217     * @since 3.0.0
33218     * @category String
33219     * @param {string} [string=''] The string to pad.
33220     * @param {number} [length=0] The padding length.
33221     * @param {string} [chars=' '] The string used as padding.
33222     * @returns {string} Returns the padded string.
33223     * @example
33224     *
33225     * _.pad('abc', 8);
33226     * // => '  abc   '
33227     *
33228     * _.pad('abc', 8, '_-');
33229     * // => '_-abc_-_'
33230     *
33231     * _.pad('abc', 3);
33232     * // => 'abc'
33233     */
33234    function pad(string, length, chars) {
33235      string = toString(string);
33236      length = toInteger(length);
33237
33238      var strLength = length ? stringSize(string) : 0;
33239      if (!length || strLength >= length) {
33240        return string;
33241      }
33242      var mid = (length - strLength) / 2;
33243      return (
33244        createPadding(nativeFloor(mid), chars) +
33245        string +
33246        createPadding(nativeCeil(mid), chars)
33247      );
33248    }
33249
33250    /**
33251     * Pads `string` on the right side if it's shorter than `length`. Padding
33252     * characters are truncated if they exceed `length`.
33253     *
33254     * @static
33255     * @memberOf _
33256     * @since 4.0.0
33257     * @category String
33258     * @param {string} [string=''] The string to pad.
33259     * @param {number} [length=0] The padding length.
33260     * @param {string} [chars=' '] The string used as padding.
33261     * @returns {string} Returns the padded string.
33262     * @example
33263     *
33264     * _.padEnd('abc', 6);
33265     * // => 'abc   '
33266     *
33267     * _.padEnd('abc', 6, '_-');
33268     * // => 'abc_-_'
33269     *
33270     * _.padEnd('abc', 3);
33271     * // => 'abc'
33272     */
33273    function padEnd(string, length, chars) {
33274      string = toString(string);
33275      length = toInteger(length);
33276
33277      var strLength = length ? stringSize(string) : 0;
33278      return (length && strLength < length)
33279        ? (string + createPadding(length - strLength, chars))
33280        : string;
33281    }
33282
33283    /**
33284     * Pads `string` on the left side if it's shorter than `length`. Padding
33285     * characters are truncated if they exceed `length`.
33286     *
33287     * @static
33288     * @memberOf _
33289     * @since 4.0.0
33290     * @category String
33291     * @param {string} [string=''] The string to pad.
33292     * @param {number} [length=0] The padding length.
33293     * @param {string} [chars=' '] The string used as padding.
33294     * @returns {string} Returns the padded string.
33295     * @example
33296     *
33297     * _.padStart('abc', 6);
33298     * // => '   abc'
33299     *
33300     * _.padStart('abc', 6, '_-');
33301     * // => '_-_abc'
33302     *
33303     * _.padStart('abc', 3);
33304     * // => 'abc'
33305     */
33306    function padStart(string, length, chars) {
33307      string = toString(string);
33308      length = toInteger(length);
33309
33310      var strLength = length ? stringSize(string) : 0;
33311      return (length && strLength < length)
33312        ? (createPadding(length - strLength, chars) + string)
33313        : string;
33314    }
33315
33316    /**
33317     * Converts `string` to an integer of the specified radix. If `radix` is
33318     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
33319     * hexadecimal, in which case a `radix` of `16` is used.
33320     *
33321     * **Note:** This method aligns with the
33322     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
33323     *
33324     * @static
33325     * @memberOf _
33326     * @since 1.1.0
33327     * @category String
33328     * @param {string} string The string to convert.
33329     * @param {number} [radix=10] The radix to interpret `value` by.
33330     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
33331     * @returns {number} Returns the converted integer.
33332     * @example
33333     *
33334     * _.parseInt('08');
33335     * // => 8
33336     *
33337     * _.map(['6', '08', '10'], _.parseInt);
33338     * // => [6, 8, 10]
33339     */
33340    function parseInt(string, radix, guard) {
33341      if (guard || radix == null) {
33342        radix = 0;
33343      } else if (radix) {
33344        radix = +radix;
33345      }
33346      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
33347    }
33348
33349    /**
33350     * Repeats the given string `n` times.
33351     *
33352     * @static
33353     * @memberOf _
33354     * @since 3.0.0
33355     * @category String
33356     * @param {string} [string=''] The string to repeat.
33357     * @param {number} [n=1] The number of times to repeat the string.
33358     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
33359     * @returns {string} Returns the repeated string.
33360     * @example
33361     *
33362     * _.repeat('*', 3);
33363     * // => '***'
33364     *
33365     * _.repeat('abc', 2);
33366     * // => 'abcabc'
33367     *
33368     * _.repeat('abc', 0);
33369     * // => ''
33370     */
33371    function repeat(string, n, guard) {
33372      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
33373        n = 1;
33374      } else {
33375        n = toInteger(n);
33376      }
33377      return baseRepeat(toString(string), n);
33378    }
33379
33380    /**
33381     * Replaces matches for `pattern` in `string` with `replacement`.
33382     *
33383     * **Note:** This method is based on
33384     * [`String#replace`](https://mdn.io/String/replace).
33385     *
33386     * @static
33387     * @memberOf _
33388     * @since 4.0.0
33389     * @category String
33390     * @param {string} [string=''] The string to modify.
33391     * @param {RegExp|string} pattern The pattern to replace.
33392     * @param {Function|string} replacement The match replacement.
33393     * @returns {string} Returns the modified string.
33394     * @example
33395     *
33396     * _.replace('Hi Fred', 'Fred', 'Barney');
33397     * // => 'Hi Barney'
33398     */
33399    function replace() {
33400      var args = arguments,
33401          string = toString(args[0]);
33402
33403      return args.length < 3 ? string : string.replace(args[1], args[2]);
33404    }
33405
33406    /**
33407     * Converts `string` to
33408     * [snake case](https://en.wikipedia.org/wiki/Snake_case).
33409     *
33410     * @static
33411     * @memberOf _
33412     * @since 3.0.0
33413     * @category String
33414     * @param {string} [string=''] The string to convert.
33415     * @returns {string} Returns the snake cased string.
33416     * @example
33417     *
33418     * _.snakeCase('Foo Bar');
33419     * // => 'foo_bar'
33420     *
33421     * _.snakeCase('fooBar');
33422     * // => 'foo_bar'
33423     *
33424     * _.snakeCase('--FOO-BAR--');
33425     * // => 'foo_bar'
33426     */
33427    var snakeCase = createCompounder(function(result, word, index) {
33428      return result + (index ? '_' : '') + word.toLowerCase();
33429    });
33430
33431    /**
33432     * Splits `string` by `separator`.
33433     *
33434     * **Note:** This method is based on
33435     * [`String#split`](https://mdn.io/String/split).
33436     *
33437     * @static
33438     * @memberOf _
33439     * @since 4.0.0
33440     * @category String
33441     * @param {string} [string=''] The string to split.
33442     * @param {RegExp|string} separator The separator pattern to split by.
33443     * @param {number} [limit] The length to truncate results to.
33444     * @returns {Array} Returns the string segments.
33445     * @example
33446     *
33447     * _.split('a-b-c', '-', 2);
33448     * // => ['a', 'b']
33449     */
33450    function split(string, separator, limit) {
33451      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
33452        separator = limit = undefined;
33453      }
33454      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
33455      if (!limit) {
33456        return [];
33457      }
33458      string = toString(string);
33459      if (string && (
33460            typeof separator == 'string' ||
33461            (separator != null && !isRegExp(separator))
33462          )) {
33463        separator = baseToString(separator);
33464        if (!separator && hasUnicode(string)) {
33465          return castSlice(stringToArray(string), 0, limit);
33466        }
33467      }
33468      return string.split(separator, limit);
33469    }
33470
33471    /**
33472     * Converts `string` to
33473     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
33474     *
33475     * @static
33476     * @memberOf _
33477     * @since 3.1.0
33478     * @category String
33479     * @param {string} [string=''] The string to convert.
33480     * @returns {string} Returns the start cased string.
33481     * @example
33482     *
33483     * _.startCase('--foo-bar--');
33484     * // => 'Foo Bar'
33485     *
33486     * _.startCase('fooBar');
33487     * // => 'Foo Bar'
33488     *
33489     * _.startCase('__FOO_BAR__');
33490     * // => 'FOO BAR'
33491     */
33492    var startCase = createCompounder(function(result, word, index) {
33493      return result + (index ? ' ' : '') + upperFirst(word);
33494    });
33495
33496    /**
33497     * Checks if `string` starts with the given target string.
33498     *
33499     * @static
33500     * @memberOf _
33501     * @since 3.0.0
33502     * @category String
33503     * @param {string} [string=''] The string to inspect.
33504     * @param {string} [target] The string to search for.
33505     * @param {number} [position=0] The position to search from.
33506     * @returns {boolean} Returns `true` if `string` starts with `target`,
33507     *  else `false`.
33508     * @example
33509     *
33510     * _.startsWith('abc', 'a');
33511     * // => true
33512     *
33513     * _.startsWith('abc', 'b');
33514     * // => false
33515     *
33516     * _.startsWith('abc', 'b', 1);
33517     * // => true
33518     */
33519    function startsWith(string, target, position) {
33520      string = toString(string);
33521      position = position == null
33522        ? 0
33523        : baseClamp(toInteger(position), 0, string.length);
33524
33525      target = baseToString(target);
33526      return string.slice(position, position + target.length) == target;
33527    }
33528
33529    /**
33530     * Creates a compiled template function that can interpolate data properties
33531     * in "interpolate" delimiters, HTML-escape interpolated data properties in
33532     * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
33533     * properties may be accessed as free variables in the template. If a setting
33534     * object is given, it takes precedence over `_.templateSettings` values.
33535     *
33536     * **Note:** In the development build `_.template` utilizes
33537     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
33538     * for easier debugging.
33539     *
33540     * For more information on precompiling templates see
33541     * [lodash's custom builds documentation](https://lodash.com/custom-builds).
33542     *
33543     * For more information on Chrome extension sandboxes see
33544     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
33545     *
33546     * @static
33547     * @since 0.1.0
33548     * @memberOf _
33549     * @category String
33550     * @param {string} [string=''] The template string.
33551     * @param {Object} [options={}] The options object.
33552     * @param {RegExp} [options.escape=_.templateSettings.escape]
33553     *  The HTML "escape" delimiter.
33554     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
33555     *  The "evaluate" delimiter.
33556     * @param {Object} [options.imports=_.templateSettings.imports]
33557     *  An object to import into the template as free variables.
33558     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
33559     *  The "interpolate" delimiter.
33560     * @param {string} [options.sourceURL='lodash.templateSources[n]']
33561     *  The sourceURL of the compiled template.
33562     * @param {string} [options.variable='obj']
33563     *  The data object variable name.
33564     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
33565     * @returns {Function} Returns the compiled template function.
33566     * @example
33567     *
33568     * // Use the "interpolate" delimiter to create a compiled template.
33569     * var compiled = _.template('hello <%= user %>!');
33570     * compiled({ 'user': 'fred' });
33571     * // => 'hello fred!'
33572     *
33573     * // Use the HTML "escape" delimiter to escape data property values.
33574     * var compiled = _.template('<b><%- value %></b>');
33575     * compiled({ 'value': '<script>' });
33576     * // => '<b>&lt;script&gt;</b>'
33577     *
33578     * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
33579     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
33580     * compiled({ 'users': ['fred', 'barney'] });
33581     * // => '<li>fred</li><li>barney</li>'
33582     *
33583     * // Use the internal `print` function in "evaluate" delimiters.
33584     * var compiled = _.template('<% print("hello " + user); %>!');
33585     * compiled({ 'user': 'barney' });
33586     * // => 'hello barney!'
33587     *
33588     * // Use the ES template literal delimiter as an "interpolate" delimiter.
33589     * // Disable support by replacing the "interpolate" delimiter.
33590     * var compiled = _.template('hello ${ user }!');
33591     * compiled({ 'user': 'pebbles' });
33592     * // => 'hello pebbles!'
33593     *
33594     * // Use backslashes to treat delimiters as plain text.
33595     * var compiled = _.template('<%= "\\<%- value %\\>" %>');
33596     * compiled({ 'value': 'ignored' });
33597     * // => '<%- value %>'
33598     *
33599     * // Use the `imports` option to import `jQuery` as `jq`.
33600     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
33601     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
33602     * compiled({ 'users': ['fred', 'barney'] });
33603     * // => '<li>fred</li><li>barney</li>'
33604     *
33605     * // Use the `sourceURL` option to specify a custom sourceURL for the template.
33606     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
33607     * compiled(data);
33608     * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
33609     *
33610     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
33611     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
33612     * compiled.source;
33613     * // => function(data) {
33614     * //   var __t, __p = '';
33615     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
33616     * //   return __p;
33617     * // }
33618     *
33619     * // Use custom template delimiters.
33620     * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
33621     * var compiled = _.template('hello {{ user }}!');
33622     * compiled({ 'user': 'mustache' });
33623     * // => 'hello mustache!'
33624     *
33625     * // Use the `source` property to inline compiled templates for meaningful
33626     * // line numbers in error messages and stack traces.
33627     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
33628     *   var JST = {\
33629     *     "main": ' + _.template(mainText).source + '\
33630     *   };\
33631     * ');
33632     */
33633    function template(string, options, guard) {
33634      // Based on John Resig's `tmpl` implementation
33635      // (http://ejohn.org/blog/javascript-micro-templating/)
33636      // and Laura Doktorova's doT.js (https://github.com/olado/doT).
33637      var settings = lodash.templateSettings;
33638
33639      if (guard && isIterateeCall(string, options, guard)) {
33640        options = undefined;
33641      }
33642      string = toString(string);
33643      options = assignInWith({}, options, settings, customDefaultsAssignIn);
33644
33645      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
33646          importsKeys = keys(imports),
33647          importsValues = baseValues(imports, importsKeys);
33648
33649      var isEscaping,
33650          isEvaluating,
33651          index = 0,
33652          interpolate = options.interpolate || reNoMatch,
33653          source = "__p += '";
33654
33655      // Compile the regexp to match each delimiter.
33656      var reDelimiters = RegExp(
33657        (options.escape || reNoMatch).source + '|' +
33658        interpolate.source + '|' +
33659        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
33660        (options.evaluate || reNoMatch).source + '|$'
33661      , 'g');
33662
33663      // Use a sourceURL for easier debugging.
33664      // The sourceURL gets injected into the source that's eval-ed, so be careful
33665      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in
33666      // and escape the comment, thus injecting code that gets evaled.
33667      var sourceURL = '//# sourceURL=' +
33668        (hasOwnProperty.call(options, 'sourceURL')
33669          ? (options.sourceURL + '').replace(/\s/g, ' ')
33670          : ('lodash.templateSources[' + (++templateCounter) + ']')
33671        ) + '\n';
33672
33673      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
33674        interpolateValue || (interpolateValue = esTemplateValue);
33675
33676        // Escape characters that can't be included in string literals.
33677        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
33678
33679        // Replace delimiters with snippets.
33680        if (escapeValue) {
33681          isEscaping = true;
33682          source += "' +\n__e(" + escapeValue + ") +\n'";
33683        }
33684        if (evaluateValue) {
33685          isEvaluating = true;
33686          source += "';\n" + evaluateValue + ";\n__p += '";
33687        }
33688        if (interpolateValue) {
33689          source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
33690        }
33691        index = offset + match.length;
33692
33693        // The JS engine embedded in Adobe products needs `match` returned in
33694        // order to produce the correct `offset` value.
33695        return match;
33696      });
33697
33698      source += "';\n";
33699
33700      // If `variable` is not specified wrap a with-statement around the generated
33701      // code to add the data object to the top of the scope chain.
33702      var variable = hasOwnProperty.call(options, 'variable') && options.variable;
33703      if (!variable) {
33704        source = 'with (obj) {\n' + source + '\n}\n';
33705      }
33706      // Throw an error if a forbidden character was found in `variable`, to prevent
33707      // potential command injection attacks.
33708      else if (reForbiddenIdentifierChars.test(variable)) {
33709        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);
33710      }
33711
33712      // Cleanup code by stripping empty strings.
33713      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
33714        .replace(reEmptyStringMiddle, '$1')
33715        .replace(reEmptyStringTrailing, '$1;');
33716
33717      // Frame code as the function body.
33718      source = 'function(' + (variable || 'obj') + ') {\n' +
33719        (variable
33720          ? ''
33721          : 'obj || (obj = {});\n'
33722        ) +
33723        "var __t, __p = ''" +
33724        (isEscaping
33725           ? ', __e = _.escape'
33726           : ''
33727        ) +
33728        (isEvaluating
33729          ? ', __j = Array.prototype.join;\n' +
33730            "function print() { __p += __j.call(arguments, '') }\n"
33731          : ';\n'
33732        ) +
33733        source +
33734        'return __p\n}';
33735
33736      var result = attempt(function() {
33737        return Function(importsKeys, sourceURL + 'return ' + source)
33738          .apply(undefined, importsValues);
33739      });
33740
33741      // Provide the compiled function's source by its `toString` method or
33742      // the `source` property as a convenience for inlining compiled templates.
33743      result.source = source;
33744      if (isError(result)) {
33745        throw result;
33746      }
33747      return result;
33748    }
33749
33750    /**
33751     * Converts `string`, as a whole, to lower case just like
33752     * [String#toLowerCase](https://mdn.io/toLowerCase).
33753     *
33754     * @static
33755     * @memberOf _
33756     * @since 4.0.0
33757     * @category String
33758     * @param {string} [string=''] The string to convert.
33759     * @returns {string} Returns the lower cased string.
33760     * @example
33761     *
33762     * _.toLower('--Foo-Bar--');
33763     * // => '--foo-bar--'
33764     *
33765     * _.toLower('fooBar');
33766     * // => 'foobar'
33767     *
33768     * _.toLower('__FOO_BAR__');
33769     * // => '__foo_bar__'
33770     */
33771    function toLower(value) {
33772      return toString(value).toLowerCase();
33773    }
33774
33775    /**
33776     * Converts `string`, as a whole, to upper case just like
33777     * [String#toUpperCase](https://mdn.io/toUpperCase).
33778     *
33779     * @static
33780     * @memberOf _
33781     * @since 4.0.0
33782     * @category String
33783     * @param {string} [string=''] The string to convert.
33784     * @returns {string} Returns the upper cased string.
33785     * @example
33786     *
33787     * _.toUpper('--foo-bar--');
33788     * // => '--FOO-BAR--'
33789     *
33790     * _.toUpper('fooBar');
33791     * // => 'FOOBAR'
33792     *
33793     * _.toUpper('__foo_bar__');
33794     * // => '__FOO_BAR__'
33795     */
33796    function toUpper(value) {
33797      return toString(value).toUpperCase();
33798    }
33799
33800    /**
33801     * Removes leading and trailing whitespace or specified characters from `string`.
33802     *
33803     * @static
33804     * @memberOf _
33805     * @since 3.0.0
33806     * @category String
33807     * @param {string} [string=''] The string to trim.
33808     * @param {string} [chars=whitespace] The characters to trim.
33809     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
33810     * @returns {string} Returns the trimmed string.
33811     * @example
33812     *
33813     * _.trim('  abc  ');
33814     * // => 'abc'
33815     *
33816     * _.trim('-_-abc-_-', '_-');
33817     * // => 'abc'
33818     *
33819     * _.map(['  foo  ', '  bar  '], _.trim);
33820     * // => ['foo', 'bar']
33821     */
33822    function trim(string, chars, guard) {
33823      string = toString(string);
33824      if (string && (guard || chars === undefined)) {
33825        return baseTrim(string);
33826      }
33827      if (!string || !(chars = baseToString(chars))) {
33828        return string;
33829      }
33830      var strSymbols = stringToArray(string),
33831          chrSymbols = stringToArray(chars),
33832          start = charsStartIndex(strSymbols, chrSymbols),
33833          end = charsEndIndex(strSymbols, chrSymbols) + 1;
33834
33835      return castSlice(strSymbols, start, end).join('');
33836    }
33837
33838    /**
33839     * Removes trailing whitespace or specified characters from `string`.
33840     *
33841     * @static
33842     * @memberOf _
33843     * @since 4.0.0
33844     * @category String
33845     * @param {string} [string=''] The string to trim.
33846     * @param {string} [chars=whitespace] The characters to trim.
33847     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
33848     * @returns {string} Returns the trimmed string.
33849     * @example
33850     *
33851     * _.trimEnd('  abc  ');
33852     * // => '  abc'
33853     *
33854     * _.trimEnd('-_-abc-_-', '_-');
33855     * // => '-_-abc'
33856     */
33857    function trimEnd(string, chars, guard) {
33858      string = toString(string);
33859      if (string && (guard || chars === undefined)) {
33860        return string.slice(0, trimmedEndIndex(string) + 1);
33861      }
33862      if (!string || !(chars = baseToString(chars))) {
33863        return string;
33864      }
33865      var strSymbols = stringToArray(string),
33866          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
33867
33868      return castSlice(strSymbols, 0, end).join('');
33869    }
33870
33871    /**
33872     * Removes leading whitespace or specified characters from `string`.
33873     *
33874     * @static
33875     * @memberOf _
33876     * @since 4.0.0
33877     * @category String
33878     * @param {string} [string=''] The string to trim.
33879     * @param {string} [chars=whitespace] The characters to trim.
33880     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
33881     * @returns {string} Returns the trimmed string.
33882     * @example
33883     *
33884     * _.trimStart('  abc  ');
33885     * // => 'abc  '
33886     *
33887     * _.trimStart('-_-abc-_-', '_-');
33888     * // => 'abc-_-'
33889     */
33890    function trimStart(string, chars, guard) {
33891      string = toString(string);
33892      if (string && (guard || chars === undefined)) {
33893        return string.replace(reTrimStart, '');
33894      }
33895      if (!string || !(chars = baseToString(chars))) {
33896        return string;
33897      }
33898      var strSymbols = stringToArray(string),
33899          start = charsStartIndex(strSymbols, stringToArray(chars));
33900
33901      return castSlice(strSymbols, start).join('');
33902    }
33903
33904    /**
33905     * Truncates `string` if it's longer than the given maximum string length.
33906     * The last characters of the truncated string are replaced with the omission
33907     * string which defaults to "...".
33908     *
33909     * @static
33910     * @memberOf _
33911     * @since 4.0.0
33912     * @category String
33913     * @param {string} [string=''] The string to truncate.
33914     * @param {Object} [options={}] The options object.
33915     * @param {number} [options.length=30] The maximum string length.
33916     * @param {string} [options.omission='...'] The string to indicate text is omitted.
33917     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
33918     * @returns {string} Returns the truncated string.
33919     * @example
33920     *
33921     * _.truncate('hi-diddly-ho there, neighborino');
33922     * // => 'hi-diddly-ho there, neighbo...'
33923     *
33924     * _.truncate('hi-diddly-ho there, neighborino', {
33925     *   'length': 24,
33926     *   'separator': ' '
33927     * });
33928     * // => 'hi-diddly-ho there,...'
33929     *
33930     * _.truncate('hi-diddly-ho there, neighborino', {
33931     *   'length': 24,
33932     *   'separator': /,? +/
33933     * });
33934     * // => 'hi-diddly-ho there...'
33935     *
33936     * _.truncate('hi-diddly-ho there, neighborino', {
33937     *   'omission': ' [...]'
33938     * });
33939     * // => 'hi-diddly-ho there, neig [...]'
33940     */
33941    function truncate(string, options) {
33942      var length = DEFAULT_TRUNC_LENGTH,
33943          omission = DEFAULT_TRUNC_OMISSION;
33944
33945      if (isObject(options)) {
33946        var separator = 'separator' in options ? options.separator : separator;
33947        length = 'length' in options ? toInteger(options.length) : length;
33948        omission = 'omission' in options ? baseToString(options.omission) : omission;
33949      }
33950      string = toString(string);
33951
33952      var strLength = string.length;
33953      if (hasUnicode(string)) {
33954        var strSymbols = stringToArray(string);
33955        strLength = strSymbols.length;
33956      }
33957      if (length >= strLength) {
33958        return string;
33959      }
33960      var end = length - stringSize(omission);
33961      if (end < 1) {
33962        return omission;
33963      }
33964      var result = strSymbols
33965        ? castSlice(strSymbols, 0, end).join('')
33966        : string.slice(0, end);
33967
33968      if (separator === undefined) {
33969        return result + omission;
33970      }
33971      if (strSymbols) {
33972        end += (result.length - end);
33973      }
33974      if (isRegExp(separator)) {
33975        if (string.slice(end).search(separator)) {
33976          var match,
33977              substring = result;
33978
33979          if (!separator.global) {
33980            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
33981          }
33982          separator.lastIndex = 0;
33983          while ((match = separator.exec(substring))) {
33984            var newEnd = match.index;
33985          }
33986          result = result.slice(0, newEnd === undefined ? end : newEnd);
33987        }
33988      } else if (string.indexOf(baseToString(separator), end) != end) {
33989        var index = result.lastIndexOf(separator);
33990        if (index > -1) {
33991          result = result.slice(0, index);
33992        }
33993      }
33994      return result + omission;
33995    }
33996
33997    /**
33998     * The inverse of `_.escape`; this method converts the HTML entities
33999     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
34000     * their corresponding characters.
34001     *
34002     * **Note:** No other HTML entities are unescaped. To unescape additional
34003     * HTML entities use a third-party library like [_he_](https://mths.be/he).
34004     *
34005     * @static
34006     * @memberOf _
34007     * @since 0.6.0
34008     * @category String
34009     * @param {string} [string=''] The string to unescape.
34010     * @returns {string} Returns the unescaped string.
34011     * @example
34012     *
34013     * _.unescape('fred, barney, &amp; pebbles');
34014     * // => 'fred, barney, & pebbles'
34015     */
34016    function unescape(string) {
34017      string = toString(string);
34018      return (string && reHasEscapedHtml.test(string))
34019        ? string.replace(reEscapedHtml, unescapeHtmlChar)
34020        : string;
34021    }
34022
34023    /**
34024     * Converts `string`, as space separated words, to upper case.
34025     *
34026     * @static
34027     * @memberOf _
34028     * @since 4.0.0
34029     * @category String
34030     * @param {string} [string=''] The string to convert.
34031     * @returns {string} Returns the upper cased string.
34032     * @example
34033     *
34034     * _.upperCase('--foo-bar');
34035     * // => 'FOO BAR'
34036     *
34037     * _.upperCase('fooBar');
34038     * // => 'FOO BAR'
34039     *
34040     * _.upperCase('__foo_bar__');
34041     * // => 'FOO BAR'
34042     */
34043    var upperCase = createCompounder(function(result, word, index) {
34044      return result + (index ? ' ' : '') + word.toUpperCase();
34045    });
34046
34047    /**
34048     * Converts the first character of `string` to upper case.
34049     *
34050     * @static
34051     * @memberOf _
34052     * @since 4.0.0
34053     * @category String
34054     * @param {string} [string=''] The string to convert.
34055     * @returns {string} Returns the converted string.
34056     * @example
34057     *
34058     * _.upperFirst('fred');
34059     * // => 'Fred'
34060     *
34061     * _.upperFirst('FRED');
34062     * // => 'FRED'
34063     */
34064    var upperFirst = createCaseFirst('toUpperCase');
34065
34066    /**
34067     * Splits `string` into an array of its words.
34068     *
34069     * @static
34070     * @memberOf _
34071     * @since 3.0.0
34072     * @category String
34073     * @param {string} [string=''] The string to inspect.
34074     * @param {RegExp|string} [pattern] The pattern to match words.
34075     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
34076     * @returns {Array} Returns the words of `string`.
34077     * @example
34078     *
34079     * _.words('fred, barney, & pebbles');
34080     * // => ['fred', 'barney', 'pebbles']
34081     *
34082     * _.words('fred, barney, & pebbles', /[^, ]+/g);
34083     * // => ['fred', 'barney', '&', 'pebbles']
34084     */
34085    function words(string, pattern, guard) {
34086      string = toString(string);
34087      pattern = guard ? undefined : pattern;
34088
34089      if (pattern === undefined) {
34090        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
34091      }
34092      return string.match(pattern) || [];
34093    }
34094
34095    /*------------------------------------------------------------------------*/
34096
34097    /**
34098     * Attempts to invoke `func`, returning either the result or the caught error
34099     * object. Any additional arguments are provided to `func` when it's invoked.
34100     *
34101     * @static
34102     * @memberOf _
34103     * @since 3.0.0
34104     * @category Util
34105     * @param {Function} func The function to attempt.
34106     * @param {...*} [args] The arguments to invoke `func` with.
34107     * @returns {*} Returns the `func` result or error object.
34108     * @example
34109     *
34110     * // Avoid throwing errors for invalid selectors.
34111     * var elements = _.attempt(function(selector) {
34112     *   return document.querySelectorAll(selector);
34113     * }, '>_>');
34114     *
34115     * if (_.isError(elements)) {
34116     *   elements = [];
34117     * }
34118     */
34119    var attempt = baseRest(function(func, args) {
34120      try {
34121        return apply(func, undefined, args);
34122      } catch (e) {
34123        return isError(e) ? e : new Error(e);
34124      }
34125    });
34126
34127    /**
34128     * Binds methods of an object to the object itself, overwriting the existing
34129     * method.
34130     *
34131     * **Note:** This method doesn't set the "length" property of bound functions.
34132     *
34133     * @static
34134     * @since 0.1.0
34135     * @memberOf _
34136     * @category Util
34137     * @param {Object} object The object to bind and assign the bound methods to.
34138     * @param {...(string|string[])} methodNames The object method names to bind.
34139     * @returns {Object} Returns `object`.
34140     * @example
34141     *
34142     * var view = {
34143     *   'label': 'docs',
34144     *   'click': function() {
34145     *     console.log('clicked ' + this.label);
34146     *   }
34147     * };
34148     *
34149     * _.bindAll(view, ['click']);
34150     * jQuery(element).on('click', view.click);
34151     * // => Logs 'clicked docs' when clicked.
34152     */
34153    var bindAll = flatRest(function(object, methodNames) {
34154      arrayEach(methodNames, function(key) {
34155        key = toKey(key);
34156        baseAssignValue(object, key, bind(object[key], object));
34157      });
34158      return object;
34159    });
34160
34161    /**
34162     * Creates a function that iterates over `pairs` and invokes the corresponding
34163     * function of the first predicate to return truthy. The predicate-function
34164     * pairs are invoked with the `this` binding and arguments of the created
34165     * function.
34166     *
34167     * @static
34168     * @memberOf _
34169     * @since 4.0.0
34170     * @category Util
34171     * @param {Array} pairs The predicate-function pairs.
34172     * @returns {Function} Returns the new composite function.
34173     * @example
34174     *
34175     * var func = _.cond([
34176     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
34177     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
34178     *   [_.stubTrue,                      _.constant('no match')]
34179     * ]);
34180     *
34181     * func({ 'a': 1, 'b': 2 });
34182     * // => 'matches A'
34183     *
34184     * func({ 'a': 0, 'b': 1 });
34185     * // => 'matches B'
34186     *
34187     * func({ 'a': '1', 'b': '2' });
34188     * // => 'no match'
34189     */
34190    function cond(pairs) {
34191      var length = pairs == null ? 0 : pairs.length,
34192          toIteratee = getIteratee();
34193
34194      pairs = !length ? [] : arrayMap(pairs, function(pair) {
34195        if (typeof pair[1] != 'function') {
34196          throw new TypeError(FUNC_ERROR_TEXT);
34197        }
34198        return [toIteratee(pair[0]), pair[1]];
34199      });
34200
34201      return baseRest(function(args) {
34202        var index = -1;
34203        while (++index < length) {
34204          var pair = pairs[index];
34205          if (apply(pair[0], this, args)) {
34206            return apply(pair[1], this, args);
34207          }
34208        }
34209      });
34210    }
34211
34212    /**
34213     * Creates a function that invokes the predicate properties of `source` with
34214     * the corresponding property values of a given object, returning `true` if
34215     * all predicates return truthy, else `false`.
34216     *
34217     * **Note:** The created function is equivalent to `_.conformsTo` with
34218     * `source` partially applied.
34219     *
34220     * @static
34221     * @memberOf _
34222     * @since 4.0.0
34223     * @category Util
34224     * @param {Object} source The object of property predicates to conform to.
34225     * @returns {Function} Returns the new spec function.
34226     * @example
34227     *
34228     * var objects = [
34229     *   { 'a': 2, 'b': 1 },
34230     *   { 'a': 1, 'b': 2 }
34231     * ];
34232     *
34233     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
34234     * // => [{ 'a': 1, 'b': 2 }]
34235     */
34236    function conforms(source) {
34237      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
34238    }
34239
34240    /**
34241     * Creates a function that returns `value`.
34242     *
34243     * @static
34244     * @memberOf _
34245     * @since 2.4.0
34246     * @category Util
34247     * @param {*} value The value to return from the new function.
34248     * @returns {Function} Returns the new constant function.
34249     * @example
34250     *
34251     * var objects = _.times(2, _.constant({ 'a': 1 }));
34252     *
34253     * console.log(objects);
34254     * // => [{ 'a': 1 }, { 'a': 1 }]
34255     *
34256     * console.log(objects[0] === objects[1]);
34257     * // => true
34258     */
34259    function constant(value) {
34260      return function() {
34261        return value;
34262      };
34263    }
34264
34265    /**
34266     * Checks `value` to determine whether a default value should be returned in
34267     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
34268     * or `undefined`.
34269     *
34270     * @static
34271     * @memberOf _
34272     * @since 4.14.0
34273     * @category Util
34274     * @param {*} value The value to check.
34275     * @param {*} defaultValue The default value.
34276     * @returns {*} Returns the resolved value.
34277     * @example
34278     *
34279     * _.defaultTo(1, 10);
34280     * // => 1
34281     *
34282     * _.defaultTo(undefined, 10);
34283     * // => 10
34284     */
34285    function defaultTo(value, defaultValue) {
34286      return (value == null || value !== value) ? defaultValue : value;
34287    }
34288
34289    /**
34290     * Creates a function that returns the result of invoking the given functions
34291     * with the `this` binding of the created function, where each successive
34292     * invocation is supplied the return value of the previous.
34293     *
34294     * @static
34295     * @memberOf _
34296     * @since 3.0.0
34297     * @category Util
34298     * @param {...(Function|Function[])} [funcs] The functions to invoke.
34299     * @returns {Function} Returns the new composite function.
34300     * @see _.flowRight
34301     * @example
34302     *
34303     * function square(n) {
34304     *   return n * n;
34305     * }
34306     *
34307     * var addSquare = _.flow([_.add, square]);
34308     * addSquare(1, 2);
34309     * // => 9
34310     */
34311    var flow = createFlow();
34312
34313    /**
34314     * This method is like `_.flow` except that it creates a function that
34315     * invokes the given functions from right to left.
34316     *
34317     * @static
34318     * @since 3.0.0
34319     * @memberOf _
34320     * @category Util
34321     * @param {...(Function|Function[])} [funcs] The functions to invoke.
34322     * @returns {Function} Returns the new composite function.
34323     * @see _.flow
34324     * @example
34325     *
34326     * function square(n) {
34327     *   return n * n;
34328     * }
34329     *
34330     * var addSquare = _.flowRight([square, _.add]);
34331     * addSquare(1, 2);
34332     * // => 9
34333     */
34334    var flowRight = createFlow(true);
34335
34336    /**
34337     * This method returns the first argument it receives.
34338     *
34339     * @static
34340     * @since 0.1.0
34341     * @memberOf _
34342     * @category Util
34343     * @param {*} value Any value.
34344     * @returns {*} Returns `value`.
34345     * @example
34346     *
34347     * var object = { 'a': 1 };
34348     *
34349     * console.log(_.identity(object) === object);
34350     * // => true
34351     */
34352    function identity(value) {
34353      return value;
34354    }
34355
34356    /**
34357     * Creates a function that invokes `func` with the arguments of the created
34358     * function. If `func` is a property name, the created function returns the
34359     * property value for a given element. If `func` is an array or object, the
34360     * created function returns `true` for elements that contain the equivalent
34361     * source properties, otherwise it returns `false`.
34362     *
34363     * @static
34364     * @since 4.0.0
34365     * @memberOf _
34366     * @category Util
34367     * @param {*} [func=_.identity] The value to convert to a callback.
34368     * @returns {Function} Returns the callback.
34369     * @example
34370     *
34371     * var users = [
34372     *   { 'user': 'barney', 'age': 36, 'active': true },
34373     *   { 'user': 'fred',   'age': 40, 'active': false }
34374     * ];
34375     *
34376     * // The `_.matches` iteratee shorthand.
34377     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
34378     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
34379     *
34380     * // The `_.matchesProperty` iteratee shorthand.
34381     * _.filter(users, _.iteratee(['user', 'fred']));
34382     * // => [{ 'user': 'fred', 'age': 40 }]
34383     *
34384     * // The `_.property` iteratee shorthand.
34385     * _.map(users, _.iteratee('user'));
34386     * // => ['barney', 'fred']
34387     *
34388     * // Create custom iteratee shorthands.
34389     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
34390     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {
34391     *     return func.test(string);
34392     *   };
34393     * });
34394     *
34395     * _.filter(['abc', 'def'], /ef/);
34396     * // => ['def']
34397     */
34398    function iteratee(func) {
34399      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
34400    }
34401
34402    /**
34403     * Creates a function that performs a partial deep comparison between a given
34404     * object and `source`, returning `true` if the given object has equivalent
34405     * property values, else `false`.
34406     *
34407     * **Note:** The created function is equivalent to `_.isMatch` with `source`
34408     * partially applied.
34409     *
34410     * Partial comparisons will match empty array and empty object `source`
34411     * values against any array or object value, respectively. See `_.isEqual`
34412     * for a list of supported value comparisons.
34413     *
34414     * **Note:** Multiple values can be checked by combining several matchers
34415     * using `_.overSome`
34416     *
34417     * @static
34418     * @memberOf _
34419     * @since 3.0.0
34420     * @category Util
34421     * @param {Object} source The object of property values to match.
34422     * @returns {Function} Returns the new spec function.
34423     * @example
34424     *
34425     * var objects = [
34426     *   { 'a': 1, 'b': 2, 'c': 3 },
34427     *   { 'a': 4, 'b': 5, 'c': 6 }
34428     * ];
34429     *
34430     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
34431     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
34432     *
34433     * // Checking for several possible values
34434     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
34435     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
34436     */
34437    function matches(source) {
34438      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
34439    }
34440
34441    /**
34442     * Creates a function that performs a partial deep comparison between the
34443     * value at `path` of a given object to `srcValue`, returning `true` if the
34444     * object value is equivalent, else `false`.
34445     *
34446     * **Note:** Partial comparisons will match empty array and empty object
34447     * `srcValue` values against any array or object value, respectively. See
34448     * `_.isEqual` for a list of supported value comparisons.
34449     *
34450     * **Note:** Multiple values can be checked by combining several matchers
34451     * using `_.overSome`
34452     *
34453     * @static
34454     * @memberOf _
34455     * @since 3.2.0
34456     * @category Util
34457     * @param {Array|string} path The path of the property to get.
34458     * @param {*} srcValue The value to match.
34459     * @returns {Function} Returns the new spec function.
34460     * @example
34461     *
34462     * var objects = [
34463     *   { 'a': 1, 'b': 2, 'c': 3 },
34464     *   { 'a': 4, 'b': 5, 'c': 6 }
34465     * ];
34466     *
34467     * _.find(objects, _.matchesProperty('a', 4));
34468     * // => { 'a': 4, 'b': 5, 'c': 6 }
34469     *
34470     * // Checking for several possible values
34471     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));
34472     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
34473     */
34474    function matchesProperty(path, srcValue) {
34475      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
34476    }
34477
34478    /**
34479     * Creates a function that invokes the method at `path` of a given object.
34480     * Any additional arguments are provided to the invoked method.
34481     *
34482     * @static
34483     * @memberOf _
34484     * @since 3.7.0
34485     * @category Util
34486     * @param {Array|string} path The path of the method to invoke.
34487     * @param {...*} [args] The arguments to invoke the method with.
34488     * @returns {Function} Returns the new invoker function.
34489     * @example
34490     *
34491     * var objects = [
34492     *   { 'a': { 'b': _.constant(2) } },
34493     *   { 'a': { 'b': _.constant(1) } }
34494     * ];
34495     *
34496     * _.map(objects, _.method('a.b'));
34497     * // => [2, 1]
34498     *
34499     * _.map(objects, _.method(['a', 'b']));
34500     * // => [2, 1]
34501     */
34502    var method = baseRest(function(path, args) {
34503      return function(object) {
34504        return baseInvoke(object, path, args);
34505      };
34506    });
34507
34508    /**
34509     * The opposite of `_.method`; this method creates a function that invokes
34510     * the method at a given path of `object`. Any additional arguments are
34511     * provided to the invoked method.
34512     *
34513     * @static
34514     * @memberOf _
34515     * @since 3.7.0
34516     * @category Util
34517     * @param {Object} object The object to query.
34518     * @param {...*} [args] The arguments to invoke the method with.
34519     * @returns {Function} Returns the new invoker function.
34520     * @example
34521     *
34522     * var array = _.times(3, _.constant),
34523     *     object = { 'a': array, 'b': array, 'c': array };
34524     *
34525     * _.map(['a[2]', 'c[0]'], _.methodOf(object));
34526     * // => [2, 0]
34527     *
34528     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
34529     * // => [2, 0]
34530     */
34531    var methodOf = baseRest(function(object, args) {
34532      return function(path) {
34533        return baseInvoke(object, path, args);
34534      };
34535    });
34536
34537    /**
34538     * Adds all own enumerable string keyed function properties of a source
34539     * object to the destination object. If `object` is a function, then methods
34540     * are added to its prototype as well.
34541     *
34542     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
34543     * avoid conflicts caused by modifying the original.
34544     *
34545     * @static
34546     * @since 0.1.0
34547     * @memberOf _
34548     * @category Util
34549     * @param {Function|Object} [object=lodash] The destination object.
34550     * @param {Object} source The object of functions to add.
34551     * @param {Object} [options={}] The options object.
34552     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
34553     * @returns {Function|Object} Returns `object`.
34554     * @example
34555     *
34556     * function vowels(string) {
34557     *   return _.filter(string, function(v) {
34558     *     return /[aeiou]/i.test(v);
34559     *   });
34560     * }
34561     *
34562     * _.mixin({ 'vowels': vowels });
34563     * _.vowels('fred');
34564     * // => ['e']
34565     *
34566     * _('fred').vowels().value();
34567     * // => ['e']
34568     *
34569     * _.mixin({ 'vowels': vowels }, { 'chain': false });
34570     * _('fred').vowels();
34571     * // => ['e']
34572     */
34573    function mixin(object, source, options) {
34574      var props = keys(source),
34575          methodNames = baseFunctions(source, props);
34576
34577      if (options == null &&
34578          !(isObject(source) && (methodNames.length || !props.length))) {
34579        options = source;
34580        source = object;
34581        object = this;
34582        methodNames = baseFunctions(source, keys(source));
34583      }
34584      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
34585          isFunc = isFunction(object);
34586
34587      arrayEach(methodNames, function(methodName) {
34588        var func = source[methodName];
34589        object[methodName] = func;
34590        if (isFunc) {
34591          object.prototype[methodName] = function() {
34592            var chainAll = this.__chain__;
34593            if (chain || chainAll) {
34594              var result = object(this.__wrapped__),
34595                  actions = result.__actions__ = copyArray(this.__actions__);
34596
34597              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
34598              result.__chain__ = chainAll;
34599              return result;
34600            }
34601            return func.apply(object, arrayPush([this.value()], arguments));
34602          };
34603        }
34604      });
34605
34606      return object;
34607    }
34608
34609    /**
34610     * Reverts the `_` variable to its previous value and returns a reference to
34611     * the `lodash` function.
34612     *
34613     * @static
34614     * @since 0.1.0
34615     * @memberOf _
34616     * @category Util
34617     * @returns {Function} Returns the `lodash` function.
34618     * @example
34619     *
34620     * var lodash = _.noConflict();
34621     */
34622    function noConflict() {
34623      if (root._ === this) {
34624        root._ = oldDash;
34625      }
34626      return this;
34627    }
34628
34629    /**
34630     * This method returns `undefined`.
34631     *
34632     * @static
34633     * @memberOf _
34634     * @since 2.3.0
34635     * @category Util
34636     * @example
34637     *
34638     * _.times(2, _.noop);
34639     * // => [undefined, undefined]
34640     */
34641    function noop() {
34642      // No operation performed.
34643    }
34644
34645    /**
34646     * Creates a function that gets the argument at index `n`. If `n` is negative,
34647     * the nth argument from the end is returned.
34648     *
34649     * @static
34650     * @memberOf _
34651     * @since 4.0.0
34652     * @category Util
34653     * @param {number} [n=0] The index of the argument to return.
34654     * @returns {Function} Returns the new pass-thru function.
34655     * @example
34656     *
34657     * var func = _.nthArg(1);
34658     * func('a', 'b', 'c', 'd');
34659     * // => 'b'
34660     *
34661     * var func = _.nthArg(-2);
34662     * func('a', 'b', 'c', 'd');
34663     * // => 'c'
34664     */
34665    function nthArg(n) {
34666      n = toInteger(n);
34667      return baseRest(function(args) {
34668        return baseNth(args, n);
34669      });
34670    }
34671
34672    /**
34673     * Creates a function that invokes `iteratees` with the arguments it receives
34674     * and returns their results.
34675     *
34676     * @static
34677     * @memberOf _
34678     * @since 4.0.0
34679     * @category Util
34680     * @param {...(Function|Function[])} [iteratees=[_.identity]]
34681     *  The iteratees to invoke.
34682     * @returns {Function} Returns the new function.
34683     * @example
34684     *
34685     * var func = _.over([Math.max, Math.min]);
34686     *
34687     * func(1, 2, 3, 4);
34688     * // => [4, 1]
34689     */
34690    var over = createOver(arrayMap);
34691
34692    /**
34693     * Creates a function that checks if **all** of the `predicates` return
34694     * truthy when invoked with the arguments it receives.
34695     *
34696     * Following shorthands are possible for providing predicates.
34697     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
34698     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
34699     *
34700     * @static
34701     * @memberOf _
34702     * @since 4.0.0
34703     * @category Util
34704     * @param {...(Function|Function[])} [predicates=[_.identity]]
34705     *  The predicates to check.
34706     * @returns {Function} Returns the new function.
34707     * @example
34708     *
34709     * var func = _.overEvery([Boolean, isFinite]);
34710     *
34711     * func('1');
34712     * // => true
34713     *
34714     * func(null);
34715     * // => false
34716     *
34717     * func(NaN);
34718     * // => false
34719     */
34720    var overEvery = createOver(arrayEvery);
34721
34722    /**
34723     * Creates a function that checks if **any** of the `predicates` return
34724     * truthy when invoked with the arguments it receives.
34725     *
34726     * Following shorthands are possible for providing predicates.
34727     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
34728     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
34729     *
34730     * @static
34731     * @memberOf _
34732     * @since 4.0.0
34733     * @category Util
34734     * @param {...(Function|Function[])} [predicates=[_.identity]]
34735     *  The predicates to check.
34736     * @returns {Function} Returns the new function.
34737     * @example
34738     *
34739     * var func = _.overSome([Boolean, isFinite]);
34740     *
34741     * func('1');
34742     * // => true
34743     *
34744     * func(null);
34745     * // => true
34746     *
34747     * func(NaN);
34748     * // => false
34749     *
34750     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])
34751     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])
34752     */
34753    var overSome = createOver(arraySome);
34754
34755    /**
34756     * Creates a function that returns the value at `path` of a given object.
34757     *
34758     * @static
34759     * @memberOf _
34760     * @since 2.4.0
34761     * @category Util
34762     * @param {Array|string} path The path of the property to get.
34763     * @returns {Function} Returns the new accessor function.
34764     * @example
34765     *
34766     * var objects = [
34767     *   { 'a': { 'b': 2 } },
34768     *   { 'a': { 'b': 1 } }
34769     * ];
34770     *
34771     * _.map(objects, _.property('a.b'));
34772     * // => [2, 1]
34773     *
34774     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
34775     * // => [1, 2]
34776     */
34777    function property(path) {
34778      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
34779    }
34780
34781    /**
34782     * The opposite of `_.property`; this method creates a function that returns
34783     * the value at a given path of `object`.
34784     *
34785     * @static
34786     * @memberOf _
34787     * @since 3.0.0
34788     * @category Util
34789     * @param {Object} object The object to query.
34790     * @returns {Function} Returns the new accessor function.
34791     * @example
34792     *
34793     * var array = [0, 1, 2],
34794     *     object = { 'a': array, 'b': array, 'c': array };
34795     *
34796     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
34797     * // => [2, 0]
34798     *
34799     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
34800     * // => [2, 0]
34801     */
34802    function propertyOf(object) {
34803      return function(path) {
34804        return object == null ? undefined : baseGet(object, path);
34805      };
34806    }
34807
34808    /**
34809     * Creates an array of numbers (positive and/or negative) progressing from
34810     * `start` up to, but not including, `end`. A step of `-1` is used if a negative
34811     * `start` is specified without an `end` or `step`. If `end` is not specified,
34812     * it's set to `start` with `start` then set to `0`.
34813     *
34814     * **Note:** JavaScript follows the IEEE-754 standard for resolving
34815     * floating-point values which can produce unexpected results.
34816     *
34817     * @static
34818     * @since 0.1.0
34819     * @memberOf _
34820     * @category Util
34821     * @param {number} [start=0] The start of the range.
34822     * @param {number} end The end of the range.
34823     * @param {number} [step=1] The value to increment or decrement by.
34824     * @returns {Array} Returns the range of numbers.
34825     * @see _.inRange, _.rangeRight
34826     * @example
34827     *
34828     * _.range(4);
34829     * // => [0, 1, 2, 3]
34830     *
34831     * _.range(-4);
34832     * // => [0, -1, -2, -3]
34833     *
34834     * _.range(1, 5);
34835     * // => [1, 2, 3, 4]
34836     *
34837     * _.range(0, 20, 5);
34838     * // => [0, 5, 10, 15]
34839     *
34840     * _.range(0, -4, -1);
34841     * // => [0, -1, -2, -3]
34842     *
34843     * _.range(1, 4, 0);
34844     * // => [1, 1, 1]
34845     *
34846     * _.range(0);
34847     * // => []
34848     */
34849    var range = createRange();
34850
34851    /**
34852     * This method is like `_.range` except that it populates values in
34853     * descending order.
34854     *
34855     * @static
34856     * @memberOf _
34857     * @since 4.0.0
34858     * @category Util
34859     * @param {number} [start=0] The start of the range.
34860     * @param {number} end The end of the range.
34861     * @param {number} [step=1] The value to increment or decrement by.
34862     * @returns {Array} Returns the range of numbers.
34863     * @see _.inRange, _.range
34864     * @example
34865     *
34866     * _.rangeRight(4);
34867     * // => [3, 2, 1, 0]
34868     *
34869     * _.rangeRight(-4);
34870     * // => [-3, -2, -1, 0]
34871     *
34872     * _.rangeRight(1, 5);
34873     * // => [4, 3, 2, 1]
34874     *
34875     * _.rangeRight(0, 20, 5);
34876     * // => [15, 10, 5, 0]
34877     *
34878     * _.rangeRight(0, -4, -1);
34879     * // => [-3, -2, -1, 0]
34880     *
34881     * _.rangeRight(1, 4, 0);
34882     * // => [1, 1, 1]
34883     *
34884     * _.rangeRight(0);
34885     * // => []
34886     */
34887    var rangeRight = createRange(true);
34888
34889    /**
34890     * This method returns a new empty array.
34891     *
34892     * @static
34893     * @memberOf _
34894     * @since 4.13.0
34895     * @category Util
34896     * @returns {Array} Returns the new empty array.
34897     * @example
34898     *
34899     * var arrays = _.times(2, _.stubArray);
34900     *
34901     * console.log(arrays);
34902     * // => [[], []]
34903     *
34904     * console.log(arrays[0] === arrays[1]);
34905     * // => false
34906     */
34907    function stubArray() {
34908      return [];
34909    }
34910
34911    /**
34912     * This method returns `false`.
34913     *
34914     * @static
34915     * @memberOf _
34916     * @since 4.13.0
34917     * @category Util
34918     * @returns {boolean} Returns `false`.
34919     * @example
34920     *
34921     * _.times(2, _.stubFalse);
34922     * // => [false, false]
34923     */
34924    function stubFalse() {
34925      return false;
34926    }
34927
34928    /**
34929     * This method returns a new empty object.
34930     *
34931     * @static
34932     * @memberOf _
34933     * @since 4.13.0
34934     * @category Util
34935     * @returns {Object} Returns the new empty object.
34936     * @example
34937     *
34938     * var objects = _.times(2, _.stubObject);
34939     *
34940     * console.log(objects);
34941     * // => [{}, {}]
34942     *
34943     * console.log(objects[0] === objects[1]);
34944     * // => false
34945     */
34946    function stubObject() {
34947      return {};
34948    }
34949
34950    /**
34951     * This method returns an empty string.
34952     *
34953     * @static
34954     * @memberOf _
34955     * @since 4.13.0
34956     * @category Util
34957     * @returns {string} Returns the empty string.
34958     * @example
34959     *
34960     * _.times(2, _.stubString);
34961     * // => ['', '']
34962     */
34963    function stubString() {
34964      return '';
34965    }
34966
34967    /**
34968     * This method returns `true`.
34969     *
34970     * @static
34971     * @memberOf _
34972     * @since 4.13.0
34973     * @category Util
34974     * @returns {boolean} Returns `true`.
34975     * @example
34976     *
34977     * _.times(2, _.stubTrue);
34978     * // => [true, true]
34979     */
34980    function stubTrue() {
34981      return true;
34982    }
34983
34984    /**
34985     * Invokes the iteratee `n` times, returning an array of the results of
34986     * each invocation. The iteratee is invoked with one argument; (index).
34987     *
34988     * @static
34989     * @since 0.1.0
34990     * @memberOf _
34991     * @category Util
34992     * @param {number} n The number of times to invoke `iteratee`.
34993     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
34994     * @returns {Array} Returns the array of results.
34995     * @example
34996     *
34997     * _.times(3, String);
34998     * // => ['0', '1', '2']
34999     *
35000     *  _.times(4, _.constant(0));
35001     * // => [0, 0, 0, 0]
35002     */
35003    function times(n, iteratee) {
35004      n = toInteger(n);
35005      if (n < 1 || n > MAX_SAFE_INTEGER) {
35006        return [];
35007      }
35008      var index = MAX_ARRAY_LENGTH,
35009          length = nativeMin(n, MAX_ARRAY_LENGTH);
35010
35011      iteratee = getIteratee(iteratee);
35012      n -= MAX_ARRAY_LENGTH;
35013
35014      var result = baseTimes(length, iteratee);
35015      while (++index < n) {
35016        iteratee(index);
35017      }
35018      return result;
35019    }
35020
35021    /**
35022     * Converts `value` to a property path array.
35023     *
35024     * @static
35025     * @memberOf _
35026     * @since 4.0.0
35027     * @category Util
35028     * @param {*} value The value to convert.
35029     * @returns {Array} Returns the new property path array.
35030     * @example
35031     *
35032     * _.toPath('a.b.c');
35033     * // => ['a', 'b', 'c']
35034     *
35035     * _.toPath('a[0].b.c');
35036     * // => ['a', '0', 'b', 'c']
35037     */
35038    function toPath(value) {
35039      if (isArray(value)) {
35040        return arrayMap(value, toKey);
35041      }
35042      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
35043    }
35044
35045    /**
35046     * Generates a unique ID. If `prefix` is given, the ID is appended to it.
35047     *
35048     * @static
35049     * @since 0.1.0
35050     * @memberOf _
35051     * @category Util
35052     * @param {string} [prefix=''] The value to prefix the ID with.
35053     * @returns {string} Returns the unique ID.
35054     * @example
35055     *
35056     * _.uniqueId('contact_');
35057     * // => 'contact_104'
35058     *
35059     * _.uniqueId();
35060     * // => '105'
35061     */
35062    function uniqueId(prefix) {
35063      var id = ++idCounter;
35064      return toString(prefix) + id;
35065    }
35066
35067    /*------------------------------------------------------------------------*/
35068
35069    /**
35070     * Adds two numbers.
35071     *
35072     * @static
35073     * @memberOf _
35074     * @since 3.4.0
35075     * @category Math
35076     * @param {number} augend The first number in an addition.
35077     * @param {number} addend The second number in an addition.
35078     * @returns {number} Returns the total.
35079     * @example
35080     *
35081     * _.add(6, 4);
35082     * // => 10
35083     */
35084    var add = createMathOperation(function(augend, addend) {
35085      return augend + addend;
35086    }, 0);
35087
35088    /**
35089     * Computes `number` rounded up to `precision`.
35090     *
35091     * @static
35092     * @memberOf _
35093     * @since 3.10.0
35094     * @category Math
35095     * @param {number} number The number to round up.
35096     * @param {number} [precision=0] The precision to round up to.
35097     * @returns {number} Returns the rounded up number.
35098     * @example
35099     *
35100     * _.ceil(4.006);
35101     * // => 5
35102     *
35103     * _.ceil(6.004, 2);
35104     * // => 6.01
35105     *
35106     * _.ceil(6040, -2);
35107     * // => 6100
35108     */
35109    var ceil = createRound('ceil');
35110
35111    /**
35112     * Divide two numbers.
35113     *
35114     * @static
35115     * @memberOf _
35116     * @since 4.7.0
35117     * @category Math
35118     * @param {number} dividend The first number in a division.
35119     * @param {number} divisor The second number in a division.
35120     * @returns {number} Returns the quotient.
35121     * @example
35122     *
35123     * _.divide(6, 4);
35124     * // => 1.5
35125     */
35126    var divide = createMathOperation(function(dividend, divisor) {
35127      return dividend / divisor;
35128    }, 1);
35129
35130    /**
35131     * Computes `number` rounded down to `precision`.
35132     *
35133     * @static
35134     * @memberOf _
35135     * @since 3.10.0
35136     * @category Math
35137     * @param {number} number The number to round down.
35138     * @param {number} [precision=0] The precision to round down to.
35139     * @returns {number} Returns the rounded down number.
35140     * @example
35141     *
35142     * _.floor(4.006);
35143     * // => 4
35144     *
35145     * _.floor(0.046, 2);
35146     * // => 0.04
35147     *
35148     * _.floor(4060, -2);
35149     * // => 4000
35150     */
35151    var floor = createRound('floor');
35152
35153    /**
35154     * Computes the maximum value of `array`. If `array` is empty or falsey,
35155     * `undefined` is returned.
35156     *
35157     * @static
35158     * @since 0.1.0
35159     * @memberOf _
35160     * @category Math
35161     * @param {Array} array The array to iterate over.
35162     * @returns {*} Returns the maximum value.
35163     * @example
35164     *
35165     * _.max([4, 2, 8, 6]);
35166     * // => 8
35167     *
35168     * _.max([]);
35169     * // => undefined
35170     */
35171    function max(array) {
35172      return (array && array.length)
35173        ? baseExtremum(array, identity, baseGt)
35174        : undefined;
35175    }
35176
35177    /**
35178     * This method is like `_.max` except that it accepts `iteratee` which is
35179     * invoked for each element in `array` to generate the criterion by which
35180     * the value is ranked. The iteratee is invoked with one argument: (value).
35181     *
35182     * @static
35183     * @memberOf _
35184     * @since 4.0.0
35185     * @category Math
35186     * @param {Array} array The array to iterate over.
35187     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
35188     * @returns {*} Returns the maximum value.
35189     * @example
35190     *
35191     * var objects = [{ 'n': 1 }, { 'n': 2 }];
35192     *
35193     * _.maxBy(objects, function(o) { return o.n; });
35194     * // => { 'n': 2 }
35195     *
35196     * // The `_.property` iteratee shorthand.
35197     * _.maxBy(objects, 'n');
35198     * // => { 'n': 2 }
35199     */
35200    function maxBy(array, iteratee) {
35201      return (array && array.length)
35202        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
35203        : undefined;
35204    }
35205
35206    /**
35207     * Computes the mean of the values in `array`.
35208     *
35209     * @static
35210     * @memberOf _
35211     * @since 4.0.0
35212     * @category Math
35213     * @param {Array} array The array to iterate over.
35214     * @returns {number} Returns the mean.
35215     * @example
35216     *
35217     * _.mean([4, 2, 8, 6]);
35218     * // => 5
35219     */
35220    function mean(array) {
35221      return baseMean(array, identity);
35222    }
35223
35224    /**
35225     * This method is like `_.mean` except that it accepts `iteratee` which is
35226     * invoked for each element in `array` to generate the value to be averaged.
35227     * The iteratee is invoked with one argument: (value).
35228     *
35229     * @static
35230     * @memberOf _
35231     * @since 4.7.0
35232     * @category Math
35233     * @param {Array} array The array to iterate over.
35234     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
35235     * @returns {number} Returns the mean.
35236     * @example
35237     *
35238     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
35239     *
35240     * _.meanBy(objects, function(o) { return o.n; });
35241     * // => 5
35242     *
35243     * // The `_.property` iteratee shorthand.
35244     * _.meanBy(objects, 'n');
35245     * // => 5
35246     */
35247    function meanBy(array, iteratee) {
35248      return baseMean(array, getIteratee(iteratee, 2));
35249    }
35250
35251    /**
35252     * Computes the minimum value of `array`. If `array` is empty or falsey,
35253     * `undefined` is returned.
35254     *
35255     * @static
35256     * @since 0.1.0
35257     * @memberOf _
35258     * @category Math
35259     * @param {Array} array The array to iterate over.
35260     * @returns {*} Returns the minimum value.
35261     * @example
35262     *
35263     * _.min([4, 2, 8, 6]);
35264     * // => 2
35265     *
35266     * _.min([]);
35267     * // => undefined
35268     */
35269    function min(array) {
35270      return (array && array.length)
35271        ? baseExtremum(array, identity, baseLt)
35272        : undefined;
35273    }
35274
35275    /**
35276     * This method is like `_.min` except that it accepts `iteratee` which is
35277     * invoked for each element in `array` to generate the criterion by which
35278     * the value is ranked. The iteratee is invoked with one argument: (value).
35279     *
35280     * @static
35281     * @memberOf _
35282     * @since 4.0.0
35283     * @category Math
35284     * @param {Array} array The array to iterate over.
35285     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
35286     * @returns {*} Returns the minimum value.
35287     * @example
35288     *
35289     * var objects = [{ 'n': 1 }, { 'n': 2 }];
35290     *
35291     * _.minBy(objects, function(o) { return o.n; });
35292     * // => { 'n': 1 }
35293     *
35294     * // The `_.property` iteratee shorthand.
35295     * _.minBy(objects, 'n');
35296     * // => { 'n': 1 }
35297     */
35298    function minBy(array, iteratee) {
35299      return (array && array.length)
35300        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
35301        : undefined;
35302    }
35303
35304    /**
35305     * Multiply two numbers.
35306     *
35307     * @static
35308     * @memberOf _
35309     * @since 4.7.0
35310     * @category Math
35311     * @param {number} multiplier The first number in a multiplication.
35312     * @param {number} multiplicand The second number in a multiplication.
35313     * @returns {number} Returns the product.
35314     * @example
35315     *
35316     * _.multiply(6, 4);
35317     * // => 24
35318     */
35319    var multiply = createMathOperation(function(multiplier, multiplicand) {
35320      return multiplier * multiplicand;
35321    }, 1);
35322
35323    /**
35324     * Computes `number` rounded to `precision`.
35325     *
35326     * @static
35327     * @memberOf _
35328     * @since 3.10.0
35329     * @category Math
35330     * @param {number} number The number to round.
35331     * @param {number} [precision=0] The precision to round to.
35332     * @returns {number} Returns the rounded number.
35333     * @example
35334     *
35335     * _.round(4.006);
35336     * // => 4
35337     *
35338     * _.round(4.006, 2);
35339     * // => 4.01
35340     *
35341     * _.round(4060, -2);
35342     * // => 4100
35343     */
35344    var round = createRound('round');
35345
35346    /**
35347     * Subtract two numbers.
35348     *
35349     * @static
35350     * @memberOf _
35351     * @since 4.0.0
35352     * @category Math
35353     * @param {number} minuend The first number in a subtraction.
35354     * @param {number} subtrahend The second number in a subtraction.
35355     * @returns {number} Returns the difference.
35356     * @example
35357     *
35358     * _.subtract(6, 4);
35359     * // => 2
35360     */
35361    var subtract = createMathOperation(function(minuend, subtrahend) {
35362      return minuend - subtrahend;
35363    }, 0);
35364
35365    /**
35366     * Computes the sum of the values in `array`.
35367     *
35368     * @static
35369     * @memberOf _
35370     * @since 3.4.0
35371     * @category Math
35372     * @param {Array} array The array to iterate over.
35373     * @returns {number} Returns the sum.
35374     * @example
35375     *
35376     * _.sum([4, 2, 8, 6]);
35377     * // => 20
35378     */
35379    function sum(array) {
35380      return (array && array.length)
35381        ? baseSum(array, identity)
35382        : 0;
35383    }
35384
35385    /**
35386     * This method is like `_.sum` except that it accepts `iteratee` which is
35387     * invoked for each element in `array` to generate the value to be summed.
35388     * The iteratee is invoked with one argument: (value).
35389     *
35390     * @static
35391     * @memberOf _
35392     * @since 4.0.0
35393     * @category Math
35394     * @param {Array} array The array to iterate over.
35395     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
35396     * @returns {number} Returns the sum.
35397     * @example
35398     *
35399     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
35400     *
35401     * _.sumBy(objects, function(o) { return o.n; });
35402     * // => 20
35403     *
35404     * // The `_.property` iteratee shorthand.
35405     * _.sumBy(objects, 'n');
35406     * // => 20
35407     */
35408    function sumBy(array, iteratee) {
35409      return (array && array.length)
35410        ? baseSum(array, getIteratee(iteratee, 2))
35411        : 0;
35412    }
35413
35414    /*------------------------------------------------------------------------*/
35415
35416    // Add methods that return wrapped values in chain sequences.
35417    lodash.after = after;
35418    lodash.ary = ary;
35419    lodash.assign = assign;
35420    lodash.assignIn = assignIn;
35421    lodash.assignInWith = assignInWith;
35422    lodash.assignWith = assignWith;
35423    lodash.at = at;
35424    lodash.before = before;
35425    lodash.bind = bind;
35426    lodash.bindAll = bindAll;
35427    lodash.bindKey = bindKey;
35428    lodash.castArray = castArray;
35429    lodash.chain = chain;
35430    lodash.chunk = chunk;
35431    lodash.compact = compact;
35432    lodash.concat = concat;
35433    lodash.cond = cond;
35434    lodash.conforms = conforms;
35435    lodash.constant = constant;
35436    lodash.countBy = countBy;
35437    lodash.create = create;
35438    lodash.curry = curry;
35439    lodash.curryRight = curryRight;
35440    lodash.debounce = debounce;
35441    lodash.defaults = defaults;
35442    lodash.defaultsDeep = defaultsDeep;
35443    lodash.defer = defer;
35444    lodash.delay = delay;
35445    lodash.difference = difference;
35446    lodash.differenceBy = differenceBy;
35447    lodash.differenceWith = differenceWith;
35448    lodash.drop = drop;
35449    lodash.dropRight = dropRight;
35450    lodash.dropRightWhile = dropRightWhile;
35451    lodash.dropWhile = dropWhile;
35452    lodash.fill = fill;
35453    lodash.filter = filter;
35454    lodash.flatMap = flatMap;
35455    lodash.flatMapDeep = flatMapDeep;
35456    lodash.flatMapDepth = flatMapDepth;
35457    lodash.flatten = flatten;
35458    lodash.flattenDeep = flattenDeep;
35459    lodash.flattenDepth = flattenDepth;
35460    lodash.flip = flip;
35461    lodash.flow = flow;
35462    lodash.flowRight = flowRight;
35463    lodash.fromPairs = fromPairs;
35464    lodash.functions = functions;
35465    lodash.functionsIn = functionsIn;
35466    lodash.groupBy = groupBy;
35467    lodash.initial = initial;
35468    lodash.intersection = intersection;
35469    lodash.intersectionBy = intersectionBy;
35470    lodash.intersectionWith = intersectionWith;
35471    lodash.invert = invert;
35472    lodash.invertBy = invertBy;
35473    lodash.invokeMap = invokeMap;
35474    lodash.iteratee = iteratee;
35475    lodash.keyBy = keyBy;
35476    lodash.keys = keys;
35477    lodash.keysIn = keysIn;
35478    lodash.map = map;
35479    lodash.mapKeys = mapKeys;
35480    lodash.mapValues = mapValues;
35481    lodash.matches = matches;
35482    lodash.matchesProperty = matchesProperty;
35483    lodash.memoize = memoize;
35484    lodash.merge = merge;
35485    lodash.mergeWith = mergeWith;
35486    lodash.method = method;
35487    lodash.methodOf = methodOf;
35488    lodash.mixin = mixin;
35489    lodash.negate = negate;
35490    lodash.nthArg = nthArg;
35491    lodash.omit = omit;
35492    lodash.omitBy = omitBy;
35493    lodash.once = once;
35494    lodash.orderBy = orderBy;
35495    lodash.over = over;
35496    lodash.overArgs = overArgs;
35497    lodash.overEvery = overEvery;
35498    lodash.overSome = overSome;
35499    lodash.partial = partial;
35500    lodash.partialRight = partialRight;
35501    lodash.partition = partition;
35502    lodash.pick = pick;
35503    lodash.pickBy = pickBy;
35504    lodash.property = property;
35505    lodash.propertyOf = propertyOf;
35506    lodash.pull = pull;
35507    lodash.pullAll = pullAll;
35508    lodash.pullAllBy = pullAllBy;
35509    lodash.pullAllWith = pullAllWith;
35510    lodash.pullAt = pullAt;
35511    lodash.range = range;
35512    lodash.rangeRight = rangeRight;
35513    lodash.rearg = rearg;
35514    lodash.reject = reject;
35515    lodash.remove = remove;
35516    lodash.rest = rest;
35517    lodash.reverse = reverse;
35518    lodash.sampleSize = sampleSize;
35519    lodash.set = set;
35520    lodash.setWith = setWith;
35521    lodash.shuffle = shuffle;
35522    lodash.slice = slice;
35523    lodash.sortBy = sortBy;
35524    lodash.sortedUniq = sortedUniq;
35525    lodash.sortedUniqBy = sortedUniqBy;
35526    lodash.split = split;
35527    lodash.spread = spread;
35528    lodash.tail = tail;
35529    lodash.take = take;
35530    lodash.takeRight = takeRight;
35531    lodash.takeRightWhile = takeRightWhile;
35532    lodash.takeWhile = takeWhile;
35533    lodash.tap = tap;
35534    lodash.throttle = throttle;
35535    lodash.thru = thru;
35536    lodash.toArray = toArray;
35537    lodash.toPairs = toPairs;
35538    lodash.toPairsIn = toPairsIn;
35539    lodash.toPath = toPath;
35540    lodash.toPlainObject = toPlainObject;
35541    lodash.transform = transform;
35542    lodash.unary = unary;
35543    lodash.union = union;
35544    lodash.unionBy = unionBy;
35545    lodash.unionWith = unionWith;
35546    lodash.uniq = uniq;
35547    lodash.uniqBy = uniqBy;
35548    lodash.uniqWith = uniqWith;
35549    lodash.unset = unset;
35550    lodash.unzip = unzip;
35551    lodash.unzipWith = unzipWith;
35552    lodash.update = update;
35553    lodash.updateWith = updateWith;
35554    lodash.values = values;
35555    lodash.valuesIn = valuesIn;
35556    lodash.without = without;
35557    lodash.words = words;
35558    lodash.wrap = wrap;
35559    lodash.xor = xor;
35560    lodash.xorBy = xorBy;
35561    lodash.xorWith = xorWith;
35562    lodash.zip = zip;
35563    lodash.zipObject = zipObject;
35564    lodash.zipObjectDeep = zipObjectDeep;
35565    lodash.zipWith = zipWith;
35566
35567    // Add aliases.
35568    lodash.entries = toPairs;
35569    lodash.entriesIn = toPairsIn;
35570    lodash.extend = assignIn;
35571    lodash.extendWith = assignInWith;
35572
35573    // Add methods to `lodash.prototype`.
35574    mixin(lodash, lodash);
35575
35576    /*------------------------------------------------------------------------*/
35577
35578    // Add methods that return unwrapped values in chain sequences.
35579    lodash.add = add;
35580    lodash.attempt = attempt;
35581    lodash.camelCase = camelCase;
35582    lodash.capitalize = capitalize;
35583    lodash.ceil = ceil;
35584    lodash.clamp = clamp;
35585    lodash.clone = clone;
35586    lodash.cloneDeep = cloneDeep;
35587    lodash.cloneDeepWith = cloneDeepWith;
35588    lodash.cloneWith = cloneWith;
35589    lodash.conformsTo = conformsTo;
35590    lodash.deburr = deburr;
35591    lodash.defaultTo = defaultTo;
35592    lodash.divide = divide;
35593    lodash.endsWith = endsWith;
35594    lodash.eq = eq;
35595    lodash.escape = escape;
35596    lodash.escapeRegExp = escapeRegExp;
35597    lodash.every = every;
35598    lodash.find = find;
35599    lodash.findIndex = findIndex;
35600    lodash.findKey = findKey;
35601    lodash.findLast = findLast;
35602    lodash.findLastIndex = findLastIndex;
35603    lodash.findLastKey = findLastKey;
35604    lodash.floor = floor;
35605    lodash.forEach = forEach;
35606    lodash.forEachRight = forEachRight;
35607    lodash.forIn = forIn;
35608    lodash.forInRight = forInRight;
35609    lodash.forOwn = forOwn;
35610    lodash.forOwnRight = forOwnRight;
35611    lodash.get = get;
35612    lodash.gt = gt;
35613    lodash.gte = gte;
35614    lodash.has = has;
35615    lodash.hasIn = hasIn;
35616    lodash.head = head;
35617    lodash.identity = identity;
35618    lodash.includes = includes;
35619    lodash.indexOf = indexOf;
35620    lodash.inRange = inRange;
35621    lodash.invoke = invoke;
35622    lodash.isArguments = isArguments;
35623    lodash.isArray = isArray;
35624    lodash.isArrayBuffer = isArrayBuffer;
35625    lodash.isArrayLike = isArrayLike;
35626    lodash.isArrayLikeObject = isArrayLikeObject;
35627    lodash.isBoolean = isBoolean;
35628    lodash.isBuffer = isBuffer;
35629    lodash.isDate = isDate;
35630    lodash.isElement = isElement;
35631    lodash.isEmpty = isEmpty;
35632    lodash.isEqual = isEqual;
35633    lodash.isEqualWith = isEqualWith;
35634    lodash.isError = isError;
35635    lodash.isFinite = isFinite;
35636    lodash.isFunction = isFunction;
35637    lodash.isInteger = isInteger;
35638    lodash.isLength = isLength;
35639    lodash.isMap = isMap;
35640    lodash.isMatch = isMatch;
35641    lodash.isMatchWith = isMatchWith;
35642    lodash.isNaN = isNaN;
35643    lodash.isNative = isNative;
35644    lodash.isNil = isNil;
35645    lodash.isNull = isNull;
35646    lodash.isNumber = isNumber;
35647    lodash.isObject = isObject;
35648    lodash.isObjectLike = isObjectLike;
35649    lodash.isPlainObject = isPlainObject;
35650    lodash.isRegExp = isRegExp;
35651    lodash.isSafeInteger = isSafeInteger;
35652    lodash.isSet = isSet;
35653    lodash.isString = isString;
35654    lodash.isSymbol = isSymbol;
35655    lodash.isTypedArray = isTypedArray;
35656    lodash.isUndefined = isUndefined;
35657    lodash.isWeakMap = isWeakMap;
35658    lodash.isWeakSet = isWeakSet;
35659    lodash.join = join;
35660    lodash.kebabCase = kebabCase;
35661    lodash.last = last;
35662    lodash.lastIndexOf = lastIndexOf;
35663    lodash.lowerCase = lowerCase;
35664    lodash.lowerFirst = lowerFirst;
35665    lodash.lt = lt;
35666    lodash.lte = lte;
35667    lodash.max = max;
35668    lodash.maxBy = maxBy;
35669    lodash.mean = mean;
35670    lodash.meanBy = meanBy;
35671    lodash.min = min;
35672    lodash.minBy = minBy;
35673    lodash.stubArray = stubArray;
35674    lodash.stubFalse = stubFalse;
35675    lodash.stubObject = stubObject;
35676    lodash.stubString = stubString;
35677    lodash.stubTrue = stubTrue;
35678    lodash.multiply = multiply;
35679    lodash.nth = nth;
35680    lodash.noConflict = noConflict;
35681    lodash.noop = noop;
35682    lodash.now = now;
35683    lodash.pad = pad;
35684    lodash.padEnd = padEnd;
35685    lodash.padStart = padStart;
35686    lodash.parseInt = parseInt;
35687    lodash.random = random;
35688    lodash.reduce = reduce;
35689    lodash.reduceRight = reduceRight;
35690    lodash.repeat = repeat;
35691    lodash.replace = replace;
35692    lodash.result = result;
35693    lodash.round = round;
35694    lodash.runInContext = runInContext;
35695    lodash.sample = sample;
35696    lodash.size = size;
35697    lodash.snakeCase = snakeCase;
35698    lodash.some = some;
35699    lodash.sortedIndex = sortedIndex;
35700    lodash.sortedIndexBy = sortedIndexBy;
35701    lodash.sortedIndexOf = sortedIndexOf;
35702    lodash.sortedLastIndex = sortedLastIndex;
35703    lodash.sortedLastIndexBy = sortedLastIndexBy;
35704    lodash.sortedLastIndexOf = sortedLastIndexOf;
35705    lodash.startCase = startCase;
35706    lodash.startsWith = startsWith;
35707    lodash.subtract = subtract;
35708    lodash.sum = sum;
35709    lodash.sumBy = sumBy;
35710    lodash.template = template;
35711    lodash.times = times;
35712    lodash.toFinite = toFinite;
35713    lodash.toInteger = toInteger;
35714    lodash.toLength = toLength;
35715    lodash.toLower = toLower;
35716    lodash.toNumber = toNumber;
35717    lodash.toSafeInteger = toSafeInteger;
35718    lodash.toString = toString;
35719    lodash.toUpper = toUpper;
35720    lodash.trim = trim;
35721    lodash.trimEnd = trimEnd;
35722    lodash.trimStart = trimStart;
35723    lodash.truncate = truncate;
35724    lodash.unescape = unescape;
35725    lodash.uniqueId = uniqueId;
35726    lodash.upperCase = upperCase;
35727    lodash.upperFirst = upperFirst;
35728
35729    // Add aliases.
35730    lodash.each = forEach;
35731    lodash.eachRight = forEachRight;
35732    lodash.first = head;
35733
35734    mixin(lodash, (function() {
35735      var source = {};
35736      baseForOwn(lodash, function(func, methodName) {
35737        if (!hasOwnProperty.call(lodash.prototype, methodName)) {
35738          source[methodName] = func;
35739        }
35740      });
35741      return source;
35742    }()), { 'chain': false });
35743
35744    /*------------------------------------------------------------------------*/
35745
35746    /**
35747     * The semantic version number.
35748     *
35749     * @static
35750     * @memberOf _
35751     * @type {string}
35752     */
35753    lodash.VERSION = VERSION;
35754
35755    // Assign default placeholders.
35756    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
35757      lodash[methodName].placeholder = lodash;
35758    });
35759
35760    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
35761    arrayEach(['drop', 'take'], function(methodName, index) {
35762      LazyWrapper.prototype[methodName] = function(n) {
35763        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);
35764
35765        var result = (this.__filtered__ && !index)
35766          ? new LazyWrapper(this)
35767          : this.clone();
35768
35769        if (result.__filtered__) {
35770          result.__takeCount__ = nativeMin(n, result.__takeCount__);
35771        } else {
35772          result.__views__.push({
35773            'size': nativeMin(n, MAX_ARRAY_LENGTH),
35774            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
35775          });
35776        }
35777        return result;
35778      };
35779
35780      LazyWrapper.prototype[methodName + 'Right'] = function(n) {
35781        return this.reverse()[methodName](n).reverse();
35782      };
35783    });
35784
35785    // Add `LazyWrapper` methods that accept an `iteratee` value.
35786    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
35787      var type = index + 1,
35788          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
35789
35790      LazyWrapper.prototype[methodName] = function(iteratee) {
35791        var result = this.clone();
35792        result.__iteratees__.push({
35793          'iteratee': getIteratee(iteratee, 3),
35794          'type': type
35795        });
35796        result.__filtered__ = result.__filtered__ || isFilter;
35797        return result;
35798      };
35799    });
35800
35801    // Add `LazyWrapper` methods for `_.head` and `_.last`.
35802    arrayEach(['head', 'last'], function(methodName, index) {
35803      var takeName = 'take' + (index ? 'Right' : '');
35804
35805      LazyWrapper.prototype[methodName] = function() {
35806        return this[takeName](1).value()[0];
35807      };
35808    });
35809
35810    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
35811    arrayEach(['initial', 'tail'], function(methodName, index) {
35812      var dropName = 'drop' + (index ? '' : 'Right');
35813
35814      LazyWrapper.prototype[methodName] = function() {
35815        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
35816      };
35817    });
35818
35819    LazyWrapper.prototype.compact = function() {
35820      return this.filter(identity);
35821    };
35822
35823    LazyWrapper.prototype.find = function(predicate) {
35824      return this.filter(predicate).head();
35825    };
35826
35827    LazyWrapper.prototype.findLast = function(predicate) {
35828      return this.reverse().find(predicate);
35829    };
35830
35831    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
35832      if (typeof path == 'function') {
35833        return new LazyWrapper(this);
35834      }
35835      return this.map(function(value) {
35836        return baseInvoke(value, path, args);
35837      });
35838    });
35839
35840    LazyWrapper.prototype.reject = function(predicate) {
35841      return this.filter(negate(getIteratee(predicate)));
35842    };
35843
35844    LazyWrapper.prototype.slice = function(start, end) {
35845      start = toInteger(start);
35846
35847      var result = this;
35848      if (result.__filtered__ && (start > 0 || end < 0)) {
35849        return new LazyWrapper(result);
35850      }
35851      if (start < 0) {
35852        result = result.takeRight(-start);
35853      } else if (start) {
35854        result = result.drop(start);
35855      }
35856      if (end !== undefined) {
35857        end = toInteger(end);
35858        result = end < 0 ? result.dropRight(-end) : result.take(end - start);
35859      }
35860      return result;
35861    };
35862
35863    LazyWrapper.prototype.takeRightWhile = function(predicate) {
35864      return this.reverse().takeWhile(predicate).reverse();
35865    };
35866
35867    LazyWrapper.prototype.toArray = function() {
35868      return this.take(MAX_ARRAY_LENGTH);
35869    };
35870
35871    // Add `LazyWrapper` methods to `lodash.prototype`.
35872    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
35873      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
35874          isTaker = /^(?:head|last)$/.test(methodName),
35875          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
35876          retUnwrapped = isTaker || /^find/.test(methodName);
35877
35878      if (!lodashFunc) {
35879        return;
35880      }
35881      lodash.prototype[methodName] = function() {
35882        var value = this.__wrapped__,
35883            args = isTaker ? [1] : arguments,
35884            isLazy = value instanceof LazyWrapper,
35885            iteratee = args[0],
35886            useLazy = isLazy || isArray(value);
35887
35888        var interceptor = function(value) {
35889          var result = lodashFunc.apply(lodash, arrayPush([value], args));
35890          return (isTaker && chainAll) ? result[0] : result;
35891        };
35892
35893        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
35894          // Avoid lazy use if the iteratee has a "length" value other than `1`.
35895          isLazy = useLazy = false;
35896        }
35897        var chainAll = this.__chain__,
35898            isHybrid = !!this.__actions__.length,
35899            isUnwrapped = retUnwrapped && !chainAll,
35900            onlyLazy = isLazy && !isHybrid;
35901
35902        if (!retUnwrapped && useLazy) {
35903          value = onlyLazy ? value : new LazyWrapper(this);
35904          var result = func.apply(value, args);
35905          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
35906          return new LodashWrapper(result, chainAll);
35907        }
35908        if (isUnwrapped && onlyLazy) {
35909          return func.apply(this, args);
35910        }
35911        result = this.thru(interceptor);
35912        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
35913      };
35914    });
35915
35916    // Add `Array` methods to `lodash.prototype`.
35917    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
35918      var func = arrayProto[methodName],
35919          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
35920          retUnwrapped = /^(?:pop|shift)$/.test(methodName);
35921
35922      lodash.prototype[methodName] = function() {
35923        var args = arguments;
35924        if (retUnwrapped && !this.__chain__) {
35925          var value = this.value();
35926          return func.apply(isArray(value) ? value : [], args);
35927        }
35928        return this[chainName](function(value) {
35929          return func.apply(isArray(value) ? value : [], args);
35930        });
35931      };
35932    });
35933
35934    // Map minified method names to their real names.
35935    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
35936      var lodashFunc = lodash[methodName];
35937      if (lodashFunc) {
35938        var key = lodashFunc.name + '';
35939        if (!hasOwnProperty.call(realNames, key)) {
35940          realNames[key] = [];
35941        }
35942        realNames[key].push({ 'name': methodName, 'func': lodashFunc });
35943      }
35944    });
35945
35946    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
35947      'name': 'wrapper',
35948      'func': undefined
35949    }];
35950
35951    // Add methods to `LazyWrapper`.
35952    LazyWrapper.prototype.clone = lazyClone;
35953    LazyWrapper.prototype.reverse = lazyReverse;
35954    LazyWrapper.prototype.value = lazyValue;
35955
35956    // Add chain sequence methods to the `lodash` wrapper.
35957    lodash.prototype.at = wrapperAt;
35958    lodash.prototype.chain = wrapperChain;
35959    lodash.prototype.commit = wrapperCommit;
35960    lodash.prototype.next = wrapperNext;
35961    lodash.prototype.plant = wrapperPlant;
35962    lodash.prototype.reverse = wrapperReverse;
35963    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
35964
35965    // Add lazy aliases.
35966    lodash.prototype.first = lodash.prototype.head;
35967
35968    if (symIterator) {
35969      lodash.prototype[symIterator] = wrapperToIterator;
35970    }
35971    return lodash;
35972  });
35973
35974  /*--------------------------------------------------------------------------*/
35975
35976  // Export lodash.
35977  var _ = runInContext();
35978
35979  // Some AMD build optimizers, like r.js, check for condition patterns like:
35980  if (true) {
35981    // Expose Lodash on the global object to prevent errors when Lodash is
35982    // loaded by a script tag in the presence of an AMD loader.
35983    // See http://requirejs.org/docs/errors.html#mismatch for more details.
35984    // Use `_.noConflict` to remove Lodash from the global object.
35985    root._ = _;
35986
35987    // Define as an anonymous module so, through path mapping, it can be
35988    // referenced as the "underscore" module.
35989    !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
35990      return _;
35991    }).call(exports, __webpack_require__, exports, module),
35992				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
35993  }
35994  // Check for `exports` after `define` in case a build optimizer adds it.
35995  else {}
35996}.call(this));
35997
35998/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module)))
35999
36000/***/ }),
36001
36002/***/ "./node_modules/moment/locale sync recursive ^\\.\\/.*$":
36003/*!**************************************************!*\
36004  !*** ./node_modules/moment/locale sync ^\.\/.*$ ***!
36005  \**************************************************/
36006/*! no static exports found */
36007/***/ (function(module, exports, __webpack_require__) {
36008
36009var map = {
36010	"./af": "./node_modules/moment/locale/af.js",
36011	"./af.js": "./node_modules/moment/locale/af.js",
36012	"./ar": "./node_modules/moment/locale/ar.js",
36013	"./ar-dz": "./node_modules/moment/locale/ar-dz.js",
36014	"./ar-dz.js": "./node_modules/moment/locale/ar-dz.js",
36015	"./ar-kw": "./node_modules/moment/locale/ar-kw.js",
36016	"./ar-kw.js": "./node_modules/moment/locale/ar-kw.js",
36017	"./ar-ly": "./node_modules/moment/locale/ar-ly.js",
36018	"./ar-ly.js": "./node_modules/moment/locale/ar-ly.js",
36019	"./ar-ma": "./node_modules/moment/locale/ar-ma.js",
36020	"./ar-ma.js": "./node_modules/moment/locale/ar-ma.js",
36021	"./ar-ps": "./node_modules/moment/locale/ar-ps.js",
36022	"./ar-ps.js": "./node_modules/moment/locale/ar-ps.js",
36023	"./ar-sa": "./node_modules/moment/locale/ar-sa.js",
36024	"./ar-sa.js": "./node_modules/moment/locale/ar-sa.js",
36025	"./ar-tn": "./node_modules/moment/locale/ar-tn.js",
36026	"./ar-tn.js": "./node_modules/moment/locale/ar-tn.js",
36027	"./ar.js": "./node_modules/moment/locale/ar.js",
36028	"./az": "./node_modules/moment/locale/az.js",
36029	"./az.js": "./node_modules/moment/locale/az.js",
36030	"./be": "./node_modules/moment/locale/be.js",
36031	"./be.js": "./node_modules/moment/locale/be.js",
36032	"./bg": "./node_modules/moment/locale/bg.js",
36033	"./bg.js": "./node_modules/moment/locale/bg.js",
36034	"./bm": "./node_modules/moment/locale/bm.js",
36035	"./bm.js": "./node_modules/moment/locale/bm.js",
36036	"./bn": "./node_modules/moment/locale/bn.js",
36037	"./bn-bd": "./node_modules/moment/locale/bn-bd.js",
36038	"./bn-bd.js": "./node_modules/moment/locale/bn-bd.js",
36039	"./bn.js": "./node_modules/moment/locale/bn.js",
36040	"./bo": "./node_modules/moment/locale/bo.js",
36041	"./bo.js": "./node_modules/moment/locale/bo.js",
36042	"./br": "./node_modules/moment/locale/br.js",
36043	"./br.js": "./node_modules/moment/locale/br.js",
36044	"./bs": "./node_modules/moment/locale/bs.js",
36045	"./bs.js": "./node_modules/moment/locale/bs.js",
36046	"./ca": "./node_modules/moment/locale/ca.js",
36047	"./ca.js": "./node_modules/moment/locale/ca.js",
36048	"./cs": "./node_modules/moment/locale/cs.js",
36049	"./cs.js": "./node_modules/moment/locale/cs.js",
36050	"./cv": "./node_modules/moment/locale/cv.js",
36051	"./cv.js": "./node_modules/moment/locale/cv.js",
36052	"./cy": "./node_modules/moment/locale/cy.js",
36053	"./cy.js": "./node_modules/moment/locale/cy.js",
36054	"./da": "./node_modules/moment/locale/da.js",
36055	"./da.js": "./node_modules/moment/locale/da.js",
36056	"./de": "./node_modules/moment/locale/de.js",
36057	"./de-at": "./node_modules/moment/locale/de-at.js",
36058	"./de-at.js": "./node_modules/moment/locale/de-at.js",
36059	"./de-ch": "./node_modules/moment/locale/de-ch.js",
36060	"./de-ch.js": "./node_modules/moment/locale/de-ch.js",
36061	"./de.js": "./node_modules/moment/locale/de.js",
36062	"./dv": "./node_modules/moment/locale/dv.js",
36063	"./dv.js": "./node_modules/moment/locale/dv.js",
36064	"./el": "./node_modules/moment/locale/el.js",
36065	"./el.js": "./node_modules/moment/locale/el.js",
36066	"./en-au": "./node_modules/moment/locale/en-au.js",
36067	"./en-au.js": "./node_modules/moment/locale/en-au.js",
36068	"./en-ca": "./node_modules/moment/locale/en-ca.js",
36069	"./en-ca.js": "./node_modules/moment/locale/en-ca.js",
36070	"./en-gb": "./node_modules/moment/locale/en-gb.js",
36071	"./en-gb.js": "./node_modules/moment/locale/en-gb.js",
36072	"./en-ie": "./node_modules/moment/locale/en-ie.js",
36073	"./en-ie.js": "./node_modules/moment/locale/en-ie.js",
36074	"./en-il": "./node_modules/moment/locale/en-il.js",
36075	"./en-il.js": "./node_modules/moment/locale/en-il.js",
36076	"./en-in": "./node_modules/moment/locale/en-in.js",
36077	"./en-in.js": "./node_modules/moment/locale/en-in.js",
36078	"./en-nz": "./node_modules/moment/locale/en-nz.js",
36079	"./en-nz.js": "./node_modules/moment/locale/en-nz.js",
36080	"./en-sg": "./node_modules/moment/locale/en-sg.js",
36081	"./en-sg.js": "./node_modules/moment/locale/en-sg.js",
36082	"./eo": "./node_modules/moment/locale/eo.js",
36083	"./eo.js": "./node_modules/moment/locale/eo.js",
36084	"./es": "./node_modules/moment/locale/es.js",
36085	"./es-do": "./node_modules/moment/locale/es-do.js",
36086	"./es-do.js": "./node_modules/moment/locale/es-do.js",
36087	"./es-mx": "./node_modules/moment/locale/es-mx.js",
36088	"./es-mx.js": "./node_modules/moment/locale/es-mx.js",
36089	"./es-us": "./node_modules/moment/locale/es-us.js",
36090	"./es-us.js": "./node_modules/moment/locale/es-us.js",
36091	"./es.js": "./node_modules/moment/locale/es.js",
36092	"./et": "./node_modules/moment/locale/et.js",
36093	"./et.js": "./node_modules/moment/locale/et.js",
36094	"./eu": "./node_modules/moment/locale/eu.js",
36095	"./eu.js": "./node_modules/moment/locale/eu.js",
36096	"./fa": "./node_modules/moment/locale/fa.js",
36097	"./fa.js": "./node_modules/moment/locale/fa.js",
36098	"./fi": "./node_modules/moment/locale/fi.js",
36099	"./fi.js": "./node_modules/moment/locale/fi.js",
36100	"./fil": "./node_modules/moment/locale/fil.js",
36101	"./fil.js": "./node_modules/moment/locale/fil.js",
36102	"./fo": "./node_modules/moment/locale/fo.js",
36103	"./fo.js": "./node_modules/moment/locale/fo.js",
36104	"./fr": "./node_modules/moment/locale/fr.js",
36105	"./fr-ca": "./node_modules/moment/locale/fr-ca.js",
36106	"./fr-ca.js": "./node_modules/moment/locale/fr-ca.js",
36107	"./fr-ch": "./node_modules/moment/locale/fr-ch.js",
36108	"./fr-ch.js": "./node_modules/moment/locale/fr-ch.js",
36109	"./fr.js": "./node_modules/moment/locale/fr.js",
36110	"./fy": "./node_modules/moment/locale/fy.js",
36111	"./fy.js": "./node_modules/moment/locale/fy.js",
36112	"./ga": "./node_modules/moment/locale/ga.js",
36113	"./ga.js": "./node_modules/moment/locale/ga.js",
36114	"./gd": "./node_modules/moment/locale/gd.js",
36115	"./gd.js": "./node_modules/moment/locale/gd.js",
36116	"./gl": "./node_modules/moment/locale/gl.js",
36117	"./gl.js": "./node_modules/moment/locale/gl.js",
36118	"./gom-deva": "./node_modules/moment/locale/gom-deva.js",
36119	"./gom-deva.js": "./node_modules/moment/locale/gom-deva.js",
36120	"./gom-latn": "./node_modules/moment/locale/gom-latn.js",
36121	"./gom-latn.js": "./node_modules/moment/locale/gom-latn.js",
36122	"./gu": "./node_modules/moment/locale/gu.js",
36123	"./gu.js": "./node_modules/moment/locale/gu.js",
36124	"./he": "./node_modules/moment/locale/he.js",
36125	"./he.js": "./node_modules/moment/locale/he.js",
36126	"./hi": "./node_modules/moment/locale/hi.js",
36127	"./hi.js": "./node_modules/moment/locale/hi.js",
36128	"./hr": "./node_modules/moment/locale/hr.js",
36129	"./hr.js": "./node_modules/moment/locale/hr.js",
36130	"./hu": "./node_modules/moment/locale/hu.js",
36131	"./hu.js": "./node_modules/moment/locale/hu.js",
36132	"./hy-am": "./node_modules/moment/locale/hy-am.js",
36133	"./hy-am.js": "./node_modules/moment/locale/hy-am.js",
36134	"./id": "./node_modules/moment/locale/id.js",
36135	"./id.js": "./node_modules/moment/locale/id.js",
36136	"./is": "./node_modules/moment/locale/is.js",
36137	"./is.js": "./node_modules/moment/locale/is.js",
36138	"./it": "./node_modules/moment/locale/it.js",
36139	"./it-ch": "./node_modules/moment/locale/it-ch.js",
36140	"./it-ch.js": "./node_modules/moment/locale/it-ch.js",
36141	"./it.js": "./node_modules/moment/locale/it.js",
36142	"./ja": "./node_modules/moment/locale/ja.js",
36143	"./ja.js": "./node_modules/moment/locale/ja.js",
36144	"./jv": "./node_modules/moment/locale/jv.js",
36145	"./jv.js": "./node_modules/moment/locale/jv.js",
36146	"./ka": "./node_modules/moment/locale/ka.js",
36147	"./ka.js": "./node_modules/moment/locale/ka.js",
36148	"./kk": "./node_modules/moment/locale/kk.js",
36149	"./kk.js": "./node_modules/moment/locale/kk.js",
36150	"./km": "./node_modules/moment/locale/km.js",
36151	"./km.js": "./node_modules/moment/locale/km.js",
36152	"./kn": "./node_modules/moment/locale/kn.js",
36153	"./kn.js": "./node_modules/moment/locale/kn.js",
36154	"./ko": "./node_modules/moment/locale/ko.js",
36155	"./ko.js": "./node_modules/moment/locale/ko.js",
36156	"./ku": "./node_modules/moment/locale/ku.js",
36157	"./ku-kmr": "./node_modules/moment/locale/ku-kmr.js",
36158	"./ku-kmr.js": "./node_modules/moment/locale/ku-kmr.js",
36159	"./ku.js": "./node_modules/moment/locale/ku.js",
36160	"./ky": "./node_modules/moment/locale/ky.js",
36161	"./ky.js": "./node_modules/moment/locale/ky.js",
36162	"./lb": "./node_modules/moment/locale/lb.js",
36163	"./lb.js": "./node_modules/moment/locale/lb.js",
36164	"./lo": "./node_modules/moment/locale/lo.js",
36165	"./lo.js": "./node_modules/moment/locale/lo.js",
36166	"./lt": "./node_modules/moment/locale/lt.js",
36167	"./lt.js": "./node_modules/moment/locale/lt.js",
36168	"./lv": "./node_modules/moment/locale/lv.js",
36169	"./lv.js": "./node_modules/moment/locale/lv.js",
36170	"./me": "./node_modules/moment/locale/me.js",
36171	"./me.js": "./node_modules/moment/locale/me.js",
36172	"./mi": "./node_modules/moment/locale/mi.js",
36173	"./mi.js": "./node_modules/moment/locale/mi.js",
36174	"./mk": "./node_modules/moment/locale/mk.js",
36175	"./mk.js": "./node_modules/moment/locale/mk.js",
36176	"./ml": "./node_modules/moment/locale/ml.js",
36177	"./ml.js": "./node_modules/moment/locale/ml.js",
36178	"./mn": "./node_modules/moment/locale/mn.js",
36179	"./mn.js": "./node_modules/moment/locale/mn.js",
36180	"./mr": "./node_modules/moment/locale/mr.js",
36181	"./mr.js": "./node_modules/moment/locale/mr.js",
36182	"./ms": "./node_modules/moment/locale/ms.js",
36183	"./ms-my": "./node_modules/moment/locale/ms-my.js",
36184	"./ms-my.js": "./node_modules/moment/locale/ms-my.js",
36185	"./ms.js": "./node_modules/moment/locale/ms.js",
36186	"./mt": "./node_modules/moment/locale/mt.js",
36187	"./mt.js": "./node_modules/moment/locale/mt.js",
36188	"./my": "./node_modules/moment/locale/my.js",
36189	"./my.js": "./node_modules/moment/locale/my.js",
36190	"./nb": "./node_modules/moment/locale/nb.js",
36191	"./nb.js": "./node_modules/moment/locale/nb.js",
36192	"./ne": "./node_modules/moment/locale/ne.js",
36193	"./ne.js": "./node_modules/moment/locale/ne.js",
36194	"./nl": "./node_modules/moment/locale/nl.js",
36195	"./nl-be": "./node_modules/moment/locale/nl-be.js",
36196	"./nl-be.js": "./node_modules/moment/locale/nl-be.js",
36197	"./nl.js": "./node_modules/moment/locale/nl.js",
36198	"./nn": "./node_modules/moment/locale/nn.js",
36199	"./nn.js": "./node_modules/moment/locale/nn.js",
36200	"./oc-lnc": "./node_modules/moment/locale/oc-lnc.js",
36201	"./oc-lnc.js": "./node_modules/moment/locale/oc-lnc.js",
36202	"./pa-in": "./node_modules/moment/locale/pa-in.js",
36203	"./pa-in.js": "./node_modules/moment/locale/pa-in.js",
36204	"./pl": "./node_modules/moment/locale/pl.js",
36205	"./pl.js": "./node_modules/moment/locale/pl.js",
36206	"./pt": "./node_modules/moment/locale/pt.js",
36207	"./pt-br": "./node_modules/moment/locale/pt-br.js",
36208	"./pt-br.js": "./node_modules/moment/locale/pt-br.js",
36209	"./pt.js": "./node_modules/moment/locale/pt.js",
36210	"./ro": "./node_modules/moment/locale/ro.js",
36211	"./ro.js": "./node_modules/moment/locale/ro.js",
36212	"./ru": "./node_modules/moment/locale/ru.js",
36213	"./ru.js": "./node_modules/moment/locale/ru.js",
36214	"./sd": "./node_modules/moment/locale/sd.js",
36215	"./sd.js": "./node_modules/moment/locale/sd.js",
36216	"./se": "./node_modules/moment/locale/se.js",
36217	"./se.js": "./node_modules/moment/locale/se.js",
36218	"./si": "./node_modules/moment/locale/si.js",
36219	"./si.js": "./node_modules/moment/locale/si.js",
36220	"./sk": "./node_modules/moment/locale/sk.js",
36221	"./sk.js": "./node_modules/moment/locale/sk.js",
36222	"./sl": "./node_modules/moment/locale/sl.js",
36223	"./sl.js": "./node_modules/moment/locale/sl.js",
36224	"./sq": "./node_modules/moment/locale/sq.js",
36225	"./sq.js": "./node_modules/moment/locale/sq.js",
36226	"./sr": "./node_modules/moment/locale/sr.js",
36227	"./sr-cyrl": "./node_modules/moment/locale/sr-cyrl.js",
36228	"./sr-cyrl.js": "./node_modules/moment/locale/sr-cyrl.js",
36229	"./sr.js": "./node_modules/moment/locale/sr.js",
36230	"./ss": "./node_modules/moment/locale/ss.js",
36231	"./ss.js": "./node_modules/moment/locale/ss.js",
36232	"./sv": "./node_modules/moment/locale/sv.js",
36233	"./sv.js": "./node_modules/moment/locale/sv.js",
36234	"./sw": "./node_modules/moment/locale/sw.js",
36235	"./sw.js": "./node_modules/moment/locale/sw.js",
36236	"./ta": "./node_modules/moment/locale/ta.js",
36237	"./ta.js": "./node_modules/moment/locale/ta.js",
36238	"./te": "./node_modules/moment/locale/te.js",
36239	"./te.js": "./node_modules/moment/locale/te.js",
36240	"./tet": "./node_modules/moment/locale/tet.js",
36241	"./tet.js": "./node_modules/moment/locale/tet.js",
36242	"./tg": "./node_modules/moment/locale/tg.js",
36243	"./tg.js": "./node_modules/moment/locale/tg.js",
36244	"./th": "./node_modules/moment/locale/th.js",
36245	"./th.js": "./node_modules/moment/locale/th.js",
36246	"./tk": "./node_modules/moment/locale/tk.js",
36247	"./tk.js": "./node_modules/moment/locale/tk.js",
36248	"./tl-ph": "./node_modules/moment/locale/tl-ph.js",
36249	"./tl-ph.js": "./node_modules/moment/locale/tl-ph.js",
36250	"./tlh": "./node_modules/moment/locale/tlh.js",
36251	"./tlh.js": "./node_modules/moment/locale/tlh.js",
36252	"./tr": "./node_modules/moment/locale/tr.js",
36253	"./tr.js": "./node_modules/moment/locale/tr.js",
36254	"./tzl": "./node_modules/moment/locale/tzl.js",
36255	"./tzl.js": "./node_modules/moment/locale/tzl.js",
36256	"./tzm": "./node_modules/moment/locale/tzm.js",
36257	"./tzm-latn": "./node_modules/moment/locale/tzm-latn.js",
36258	"./tzm-latn.js": "./node_modules/moment/locale/tzm-latn.js",
36259	"./tzm.js": "./node_modules/moment/locale/tzm.js",
36260	"./ug-cn": "./node_modules/moment/locale/ug-cn.js",
36261	"./ug-cn.js": "./node_modules/moment/locale/ug-cn.js",
36262	"./uk": "./node_modules/moment/locale/uk.js",
36263	"./uk.js": "./node_modules/moment/locale/uk.js",
36264	"./ur": "./node_modules/moment/locale/ur.js",
36265	"./ur.js": "./node_modules/moment/locale/ur.js",
36266	"./uz": "./node_modules/moment/locale/uz.js",
36267	"./uz-latn": "./node_modules/moment/locale/uz-latn.js",
36268	"./uz-latn.js": "./node_modules/moment/locale/uz-latn.js",
36269	"./uz.js": "./node_modules/moment/locale/uz.js",
36270	"./vi": "./node_modules/moment/locale/vi.js",
36271	"./vi.js": "./node_modules/moment/locale/vi.js",
36272	"./x-pseudo": "./node_modules/moment/locale/x-pseudo.js",
36273	"./x-pseudo.js": "./node_modules/moment/locale/x-pseudo.js",
36274	"./yo": "./node_modules/moment/locale/yo.js",
36275	"./yo.js": "./node_modules/moment/locale/yo.js",
36276	"./zh-cn": "./node_modules/moment/locale/zh-cn.js",
36277	"./zh-cn.js": "./node_modules/moment/locale/zh-cn.js",
36278	"./zh-hk": "./node_modules/moment/locale/zh-hk.js",
36279	"./zh-hk.js": "./node_modules/moment/locale/zh-hk.js",
36280	"./zh-mo": "./node_modules/moment/locale/zh-mo.js",
36281	"./zh-mo.js": "./node_modules/moment/locale/zh-mo.js",
36282	"./zh-tw": "./node_modules/moment/locale/zh-tw.js",
36283	"./zh-tw.js": "./node_modules/moment/locale/zh-tw.js"
36284};
36285
36286
36287function webpackContext(req) {
36288	var id = webpackContextResolve(req);
36289	return __webpack_require__(id);
36290}
36291function webpackContextResolve(req) {
36292	if(!__webpack_require__.o(map, req)) {
36293		var e = new Error("Cannot find module '" + req + "'");
36294		e.code = 'MODULE_NOT_FOUND';
36295		throw e;
36296	}
36297	return map[req];
36298}
36299webpackContext.keys = function webpackContextKeys() {
36300	return Object.keys(map);
36301};
36302webpackContext.resolve = webpackContextResolve;
36303module.exports = webpackContext;
36304webpackContext.id = "./node_modules/moment/locale sync recursive ^\\.\\/.*$";
36305
36306/***/ }),
36307
vendor: 2,903 bytes, lines 36308-36398
36308/***/ "./node_modules/moment/locale/af.js":
36309/*!******************************************!*\
36310  !*** ./node_modules/moment/locale/af.js ***!
36311  \******************************************/
36312/*! no static exports found */
36313/***/ (function(module, exports, __webpack_require__) {
36314
36315//! moment.js locale configuration
36316//! locale : Afrikaans [af]
36317//! author : Werner Mollentze : https://github.com/wernerm
36318
36319;(function (global, factory) {
36320    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
36321   undefined
36322}(this, (function (moment) { 'use strict';
36323
36324    //! moment.js locale configuration
36325
36326    var af = moment.defineLocale('af', {
36327        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(
36328            '_'
36329        ),
36330        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
36331        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(
36332            '_'
36333        ),
36334        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
36335        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
36336        meridiemParse: /vm|nm/i,
36337        isPM: function (input) {
36338            return /^nm$/i.test(input);
36339        },
36340        meridiem: function (hours, minutes, isLower) {
36341            if (hours < 12) {
36342                return isLower ? 'vm' : 'VM';
36343            } else {
36344                return isLower ? 'nm' : 'NM';
36345            }
36346        },
36347        longDateFormat: {
36348            LT: 'HH:mm',
36349            LTS: 'HH:mm:ss',
36350            L: 'DD/MM/YYYY',
36351            LL: 'D MMMM YYYY',
36352            LLL: 'D MMMM YYYY HH:mm',
36353            LLLL: 'dddd, D MMMM YYYY HH:mm',
36354        },
36355        calendar: {
36356            sameDay: '[Vandag om] LT',
36357            nextDay: '[Môre om] LT',
36358            nextWeek: 'dddd [om] LT',
36359            lastDay: '[Gister om] LT',
36360            lastWeek: '[Laas] dddd [om] LT',
36361            sameElse: 'L',
36362        },
36363        relativeTime: {
36364            future: 'oor %s',
36365            past: '%s gelede',
36366            s: "'n paar sekondes",
36367            ss: '%d sekondes',
36368            m: "'n minuut",
36369            mm: '%d minute',
36370            h: "'n uur",
36371            hh: '%d ure',
36372            d: "'n dag",
36373            dd: '%d dae',
36374            M: "'n maand",
36375            MM: '%d maande',
36376            y: "'n jaar",
36377            yy: '%d jaar',
36378        },
36379        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
36380        ordinal: function (number) {
36381            return (
36382                number +
36383                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
36384            ); // Thanks to Joris Röling : https://github.com/jjupiter
36385        },
36386        week: {
36387            dow: 1, // Maandag is die eerste dag van die week.
36388            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
36389        },
36390    });
36391
36392    return af;
36393
36394})));
36395
36396
36397/***/ }),
36398
vendor: 5,579 bytes, lines 36399-36574
36399/***/ "./node_modules/moment/locale/ar-dz.js":
36400/*!*********************************************!*\
36401  !*** ./node_modules/moment/locale/ar-dz.js ***!
36402  \*********************************************/
36403/*! no static exports found */
36404/***/ (function(module, exports, __webpack_require__) {
36405
36406//! moment.js locale configuration
36407//! locale : Arabic (Algeria) [ar-dz]
36408//! author : Amine Roukh: https://github.com/Amine27
36409//! author : Abdel Said: https://github.com/abdelsaid
36410//! author : Ahmed Elkhatib
36411//! author : forabi https://github.com/forabi
36412//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem
36413
36414;(function (global, factory) {
36415    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
36416   undefined
36417}(this, (function (moment) { 'use strict';
36418
36419    //! moment.js locale configuration
36420
36421    var pluralForm = function (n) {
36422            return n === 0
36423                ? 0
36424                : n === 1
36425                  ? 1
36426                  : n === 2
36427                    ? 2
36428                    : n % 100 >= 3 && n % 100 <= 10
36429                      ? 3
36430                      : n % 100 >= 11
36431                        ? 4
36432                        : 5;
36433        },
36434        plurals = {
36435            s: [
36436                'أقل من ثانية',
36437                'ثانية واحدة',
36438                ['ثانيتان', 'ثانيتين'],
36439                '%d ثوان',
36440                '%d ثانية',
36441                '%d ثانية',
36442            ],
36443            m: [
36444                'أقل من دقيقة',
36445                'دقيقة واحدة',
36446                ['دقيقتان', 'دقيقتين'],
36447                '%d دقائق',
36448                '%d دقيقة',
36449                '%d دقيقة',
36450            ],
36451            h: [
36452                'أقل من ساعة',
36453                'ساعة واحدة',
36454                ['ساعتان', 'ساعتين'],
36455                '%d ساعات',
36456                '%d ساعة',
36457                '%d ساعة',
36458            ],
36459            d: [
36460                'أقل من يوم',
36461                'يوم واحد',
36462                ['يومان', 'يومين'],
36463                '%d أيام',
36464                '%d يومًا',
36465                '%d يوم',
36466            ],
36467            M: [
36468                'أقل من شهر',
36469                'شهر واحد',
36470                ['شهران', 'شهرين'],
36471                '%d أشهر',
36472                '%d شهرا',
36473                '%d شهر',
36474            ],
36475            y: [
36476                'أقل من عام',
36477                'عام واحد',
36478                ['عامان', 'عامين'],
36479                '%d أعوام',
36480                '%d عامًا',
36481                '%d عام',
36482            ],
36483        },
36484        pluralize = function (u) {
36485            return function (number, withoutSuffix, string, isFuture) {
36486                var f = pluralForm(number),
36487                    str = plurals[u][pluralForm(number)];
36488                if (f === 2) {
36489                    str = str[withoutSuffix ? 0 : 1];
36490                }
36491                return str.replace(/%d/i, number);
36492            };
36493        },
36494        months = [
36495            'جانفي',
36496            'فيفري',
36497            'مارس',
36498            'أفريل',
36499            'ماي',
36500            'جوان',
36501            'جويلية',
36502            'أوت',
36503            'سبتمبر',
36504            'أكتوبر',
36505            'نوفمبر',
36506            'ديسمبر',
36507        ];
36508
36509    var arDz = moment.defineLocale('ar-dz', {
36510        months: months,
36511        monthsShort: months,
36512        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
36513        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
36514        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
36515        weekdaysParseExact: true,
36516        longDateFormat: {
36517            LT: 'HH:mm',
36518            LTS: 'HH:mm:ss',
36519            L: 'D/\u200FM/\u200FYYYY',
36520            LL: 'D MMMM YYYY',
36521            LLL: 'D MMMM YYYY HH:mm',
36522            LLLL: 'dddd D MMMM YYYY HH:mm',
36523        },
36524        meridiemParse: /ص|م/,
36525        isPM: function (input) {
36526            return 'م' === input;
36527        },
36528        meridiem: function (hour, minute, isLower) {
36529            if (hour < 12) {
36530                return 'ص';
36531            } else {
36532                return 'م';
36533            }
36534        },
36535        calendar: {
36536            sameDay: '[اليوم عند الساعة] LT',
36537            nextDay: '[غدًا عند الساعة] LT',
36538            nextWeek: 'dddd [عند الساعة] LT',
36539            lastDay: '[أمس عند الساعة] LT',
36540            lastWeek: 'dddd [عند الساعة] LT',
36541            sameElse: 'L',
36542        },
36543        relativeTime: {
36544            future: 'بعد %s',
36545            past: 'منذ %s',
36546            s: pluralize('s'),
36547            ss: pluralize('s'),
36548            m: pluralize('m'),
36549            mm: pluralize('m'),
36550            h: pluralize('h'),
36551            hh: pluralize('h'),
36552            d: pluralize('d'),
36553            dd: pluralize('d'),
36554            M: pluralize('M'),
36555            MM: pluralize('M'),
36556            y: pluralize('y'),
36557            yy: pluralize('y'),
36558        },
36559        postformat: function (string) {
36560            return string.replace(/,/g, '،');
36561        },
36562        week: {
36563            dow: 0, // Sunday is the first day of the week.
36564            doy: 4, // The week that contains Jan 4th is the first week of the year.
36565        },
36566    });
36567
36568    return arDz;
36569
36570})));
36571
36572
36573/***/ }),
36574
vendor: 2,640 bytes, lines 36575-36649
36575/***/ "./node_modules/moment/locale/ar-kw.js":
36576/*!*********************************************!*\
36577  !*** ./node_modules/moment/locale/ar-kw.js ***!
36578  \*********************************************/
36579/*! no static exports found */
36580/***/ (function(module, exports, __webpack_require__) {
36581
36582//! moment.js locale configuration
36583//! locale : Arabic (Kuwait) [ar-kw]
36584//! author : Nusret Parlak: https://github.com/nusretparlak
36585
36586;(function (global, factory) {
36587    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
36588   undefined
36589}(this, (function (moment) { 'use strict';
36590
36591    //! moment.js locale configuration
36592
36593    var arKw = moment.defineLocale('ar-kw', {
36594        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
36595            '_'
36596        ),
36597        monthsShort:
36598            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
36599                '_'
36600            ),
36601        weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
36602        weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
36603        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
36604        weekdaysParseExact: true,
36605        longDateFormat: {
36606            LT: 'HH:mm',
36607            LTS: 'HH:mm:ss',
36608            L: 'DD/MM/YYYY',
36609            LL: 'D MMMM YYYY',
36610            LLL: 'D MMMM YYYY HH:mm',
36611            LLLL: 'dddd D MMMM YYYY HH:mm',
36612        },
36613        calendar: {
36614            sameDay: '[اليوم على الساعة] LT',
36615            nextDay: '[غدا على الساعة] LT',
36616            nextWeek: 'dddd [على الساعة] LT',
36617            lastDay: '[أمس على الساعة] LT',
36618            lastWeek: 'dddd [على الساعة] LT',
36619            sameElse: 'L',
36620        },
36621        relativeTime: {
36622            future: 'في %s',
36623            past: 'منذ %s',
36624            s: 'ثوان',
36625            ss: '%d ثانية',
36626            m: 'دقيقة',
36627            mm: '%d دقائق',
36628            h: 'ساعة',
36629            hh: '%d ساعات',
36630            d: 'يوم',
36631            dd: '%d أيام',
36632            M: 'شهر',
36633            MM: '%d أشهر',
36634            y: 'سنة',
36635            yy: '%d سنوات',
36636        },
36637        week: {
36638            dow: 0, // Sunday is the first day of the week.
36639            doy: 12, // The week that contains Jan 12th is the first week of the year.
36640        },
36641    });
36642
36643    return arKw;
36644
36645})));
36646
36647
36648/***/ }),
36649
vendor: 5,854 bytes, lines 36650-36840
36650/***/ "./node_modules/moment/locale/ar-ly.js":
36651/*!*********************************************!*\
36652  !*** ./node_modules/moment/locale/ar-ly.js ***!
36653  \*********************************************/
36654/*! no static exports found */
36655/***/ (function(module, exports, __webpack_require__) {
36656
36657//! moment.js locale configuration
36658//! locale : Arabic (Libya) [ar-ly]
36659//! author : Ali Hmer: https://github.com/kikoanis
36660
36661;(function (global, factory) {
36662    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
36663   undefined
36664}(this, (function (moment) { 'use strict';
36665
36666    //! moment.js locale configuration
36667
36668    var symbolMap = {
36669            1: '1',
36670            2: '2',
36671            3: '3',
36672            4: '4',
36673            5: '5',
36674            6: '6',
36675            7: '7',
36676            8: '8',
36677            9: '9',
36678            0: '0',
36679        },
36680        pluralForm = function (n) {
36681            return n === 0
36682                ? 0
36683                : n === 1
36684                  ? 1
36685                  : n === 2
36686                    ? 2
36687                    : n % 100 >= 3 && n % 100 <= 10
36688                      ? 3
36689                      : n % 100 >= 11
36690                        ? 4
36691                        : 5;
36692        },
36693        plurals = {
36694            s: [
36695                'أقل من ثانية',
36696                'ثانية واحدة',
36697                ['ثانيتان', 'ثانيتين'],
36698                '%d ثوان',
36699                '%d ثانية',
36700                '%d ثانية',
36701            ],
36702            m: [
36703                'أقل من دقيقة',
36704                'دقيقة واحدة',
36705                ['دقيقتان', 'دقيقتين'],
36706                '%d دقائق',
36707                '%d دقيقة',
36708                '%d دقيقة',
36709            ],
36710            h: [
36711                'أقل من ساعة',
36712                'ساعة واحدة',
36713                ['ساعتان', 'ساعتين'],
36714                '%d ساعات',
36715                '%d ساعة',
36716                '%d ساعة',
36717            ],
36718            d: [
36719                'أقل من يوم',
36720                'يوم واحد',
36721                ['يومان', 'يومين'],
36722                '%d أيام',
36723                '%d يومًا',
36724                '%d يوم',
36725            ],
36726            M: [
36727                'أقل من شهر',
36728                'شهر واحد',
36729                ['شهران', 'شهرين'],
36730                '%d أشهر',
36731                '%d شهرا',
36732                '%d شهر',
36733            ],
36734            y: [
36735                'أقل من عام',
36736                'عام واحد',
36737                ['عامان', 'عامين'],
36738                '%d أعوام',
36739                '%d عامًا',
36740                '%d عام',
36741            ],
36742        },
36743        pluralize = function (u) {
36744            return function (number, withoutSuffix, string, isFuture) {
36745                var f = pluralForm(number),
36746                    str = plurals[u][pluralForm(number)];
36747                if (f === 2) {
36748                    str = str[withoutSuffix ? 0 : 1];
36749                }
36750                return str.replace(/%d/i, number);
36751            };
36752        },
36753        months = [
36754            'يناير',
36755            'فبراير',
36756            'مارس',
36757            'أبريل',
36758            'مايو',
36759            'يونيو',
36760            'يوليو',
36761            'أغسطس',
36762            'سبتمبر',
36763            'أكتوبر',
36764            'نوفمبر',
36765            'ديسمبر',
36766        ];
36767
36768    var arLy = moment.defineLocale('ar-ly', {
36769        months: months,
36770        monthsShort: months,
36771        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
36772        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
36773        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
36774        weekdaysParseExact: true,
36775        longDateFormat: {
36776            LT: 'HH:mm',
36777            LTS: 'HH:mm:ss',
36778            L: 'D/\u200FM/\u200FYYYY',
36779            LL: 'D MMMM YYYY',
36780            LLL: 'D MMMM YYYY HH:mm',
36781            LLLL: 'dddd D MMMM YYYY HH:mm',
36782        },
36783        meridiemParse: /ص|م/,
36784        isPM: function (input) {
36785            return 'م' === input;
36786        },
36787        meridiem: function (hour, minute, isLower) {
36788            if (hour < 12) {
36789                return 'ص';
36790            } else {
36791                return 'م';
36792            }
36793        },
36794        calendar: {
36795            sameDay: '[اليوم عند الساعة] LT',
36796            nextDay: '[غدًا عند الساعة] LT',
36797            nextWeek: 'dddd [عند الساعة] LT',
36798            lastDay: '[أمس عند الساعة] LT',
36799            lastWeek: 'dddd [عند الساعة] LT',
36800            sameElse: 'L',
36801        },
36802        relativeTime: {
36803            future: 'بعد %s',
36804            past: 'منذ %s',
36805            s: pluralize('s'),
36806            ss: pluralize('s'),
36807            m: pluralize('m'),
36808            mm: pluralize('m'),
36809            h: pluralize('h'),
36810            hh: pluralize('h'),
36811            d: pluralize('d'),
36812            dd: pluralize('d'),
36813            M: pluralize('M'),
36814            MM: pluralize('M'),
36815            y: pluralize('y'),
36816            yy: pluralize('y'),
36817        },
36818        preparse: function (string) {
36819            return string.replace(/،/g, ',');
36820        },
36821        postformat: function (string) {
36822            return string
36823                .replace(/\d/g, function (match) {
36824                    return symbolMap[match];
36825                })
36826                .replace(/,/g, '،');
36827        },
36828        week: {
36829            dow: 6, // Saturday is the first day of the week.
36830            doy: 12, // The week that contains Jan 12th is the first week of the year.
36831        },
36832    });
36833
36834    return arLy;
36835
36836})));
36837
36838
36839/***/ }),
36840
vendor: 2,695 bytes, lines 36841-36916
36841/***/ "./node_modules/moment/locale/ar-ma.js":
36842/*!*********************************************!*\
36843  !*** ./node_modules/moment/locale/ar-ma.js ***!
36844  \*********************************************/
36845/*! no static exports found */
36846/***/ (function(module, exports, __webpack_require__) {
36847
36848//! moment.js locale configuration
36849//! locale : Arabic (Morocco) [ar-ma]
36850//! author : ElFadili Yassine : https://github.com/ElFadiliY
36851//! author : Abdel Said : https://github.com/abdelsaid
36852
36853;(function (global, factory) {
36854    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
36855   undefined
36856}(this, (function (moment) { 'use strict';
36857
36858    //! moment.js locale configuration
36859
36860    var arMa = moment.defineLocale('ar-ma', {
36861        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
36862            '_'
36863        ),
36864        monthsShort:
36865            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
36866                '_'
36867            ),
36868        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
36869        weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
36870        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
36871        weekdaysParseExact: true,
36872        longDateFormat: {
36873            LT: 'HH:mm',
36874            LTS: 'HH:mm:ss',
36875            L: 'DD/MM/YYYY',
36876            LL: 'D MMMM YYYY',
36877            LLL: 'D MMMM YYYY HH:mm',
36878            LLLL: 'dddd D MMMM YYYY HH:mm',
36879        },
36880        calendar: {
36881            sameDay: '[اليوم على الساعة] LT',
36882            nextDay: '[غدا على الساعة] LT',
36883            nextWeek: 'dddd [على الساعة] LT',
36884            lastDay: '[أمس على الساعة] LT',
36885            lastWeek: 'dddd [على الساعة] LT',
36886            sameElse: 'L',
36887        },
36888        relativeTime: {
36889            future: 'في %s',
36890            past: 'منذ %s',
36891            s: 'ثوان',
36892            ss: '%d ثانية',
36893            m: 'دقيقة',
36894            mm: '%d دقائق',
36895            h: 'ساعة',
36896            hh: '%d ساعات',
36897            d: 'يوم',
36898            dd: '%d أيام',
36899            M: 'شهر',
36900            MM: '%d أشهر',
36901            y: 'سنة',
36902            yy: '%d سنوات',
36903        },
36904        week: {
36905            dow: 1, // Monday is the first day of the week.
36906            doy: 4, // The week that contains Jan 4th is the first week of the year.
36907        },
36908    });
36909
36910    return arMa;
36911
36912})));
36913
36914
36915/***/ }),
36916
vendor: 4,264 bytes, lines 36917-37048
36917/***/ "./node_modules/moment/locale/ar-ps.js":
36918/*!*********************************************!*\
36919  !*** ./node_modules/moment/locale/ar-ps.js ***!
36920  \*********************************************/
36921/*! no static exports found */
36922/***/ (function(module, exports, __webpack_require__) {
36923
36924//! moment.js locale configuration
36925//! locale : Arabic (Palestine) [ar-ps]
36926//! author : Majd Al-Shihabi : https://github.com/majdal
36927
36928;(function (global, factory) {
36929    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
36930   undefined
36931}(this, (function (moment) { 'use strict';
36932
36933    //! moment.js locale configuration
36934
36935    var symbolMap = {
36936            1: 'Ù¡',
36937            2: 'Ù¢',
36938            3: 'Ù£',
36939            4: 'Ù¤',
36940            5: 'Ù¥',
36941            6: 'Ù¦',
36942            7: 'Ù§',
36943            8: 'Ù¨',
36944            9: 'Ù©',
36945            0: 'Ù ',
36946        },
36947        numberMap = {
36948            'Ù¡': '1',
36949            'Ù¢': '2',
36950            'Ù£': '3',
36951            'Ù¤': '4',
36952            'Ù¥': '5',
36953            'Ù¦': '6',
36954            'Ù§': '7',
36955            'Ù¨': '8',
36956            'Ù©': '9',
36957            'Ù ': '0',
36958        };
36959
36960    var arPs = moment.defineLocale('ar-ps', {
36961        months: 'كانون الثاني_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_تشري الأوّل_تشرين الثاني_كانون الأوّل'.split(
36962            '_'
36963        ),
36964        monthsShort:
36965            'ك٢_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_ت١_ت٢_ك١'.split('_'),
36966        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
36967        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
36968        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
36969        weekdaysParseExact: true,
36970        longDateFormat: {
36971            LT: 'HH:mm',
36972            LTS: 'HH:mm:ss',
36973            L: 'DD/MM/YYYY',
36974            LL: 'D MMMM YYYY',
36975            LLL: 'D MMMM YYYY HH:mm',
36976            LLLL: 'dddd D MMMM YYYY HH:mm',
36977        },
36978        meridiemParse: /ص|م/,
36979        isPM: function (input) {
36980            return 'م' === input;
36981        },
36982        meridiem: function (hour, minute, isLower) {
36983            if (hour < 12) {
36984                return 'ص';
36985            } else {
36986                return 'م';
36987            }
36988        },
36989        calendar: {
36990            sameDay: '[اليوم على الساعة] LT',
36991            nextDay: '[غدا على الساعة] LT',
36992            nextWeek: 'dddd [على الساعة] LT',
36993            lastDay: '[أمس على الساعة] LT',
36994            lastWeek: 'dddd [على الساعة] LT',
36995            sameElse: 'L',
36996        },
36997        relativeTime: {
36998            future: 'في %s',
36999            past: 'منذ %s',
37000            s: 'ثوان',
37001            ss: '%d ثانية',
37002            m: 'دقيقة',
37003            mm: '%d دقائق',
37004            h: 'ساعة',
37005            hh: '%d ساعات',
37006            d: 'يوم',
37007            dd: '%d أيام',
37008            M: 'شهر',
37009            MM: '%d أشهر',
37010            y: 'سنة',
37011            yy: '%d سنوات',
37012        },
37013        preparse: function (string) {
37014            return string
37015                .replace(/[٣٤٥٦٧٨٩٠]/g, function (match) {
37016                    return numberMap[match];
37017                })
37018                .split('') // reversed since negative lookbehind not supported everywhere
37019                .reverse()
37020                .join('')
37021                .replace(/[١٢](?![\u062a\u0643])/g, function (match) {
37022                    return numberMap[match];
37023                })
37024                .split('')
37025                .reverse()
37026                .join('')
37027                .replace(/،/g, ',');
37028        },
37029        postformat: function (string) {
37030            return string
37031                .replace(/\d/g, function (match) {
37032                    return symbolMap[match];
37033                })
37034                .replace(/,/g, '،');
37035        },
37036        week: {
37037            dow: 0, // Sunday is the first day of the week.
37038            doy: 6, // The week that contains Jan 6th is the first week of the year.
37039        },
37040    });
37041
37042    return arPs;
37043
37044})));
37045
37046
37047/***/ }),
37048
vendor: 3,944 bytes, lines 37049-37173
37049/***/ "./node_modules/moment/locale/ar-sa.js":
37050/*!*********************************************!*\
37051  !*** ./node_modules/moment/locale/ar-sa.js ***!
37052  \*********************************************/
37053/*! no static exports found */
37054/***/ (function(module, exports, __webpack_require__) {
37055
37056//! moment.js locale configuration
37057//! locale : Arabic (Saudi Arabia) [ar-sa]
37058//! author : Suhail Alkowaileet : https://github.com/xsoh
37059
37060;(function (global, factory) {
37061    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
37062   undefined
37063}(this, (function (moment) { 'use strict';
37064
37065    //! moment.js locale configuration
37066
37067    var symbolMap = {
37068            1: 'Ù¡',
37069            2: 'Ù¢',
37070            3: 'Ù£',
37071            4: 'Ù¤',
37072            5: 'Ù¥',
37073            6: 'Ù¦',
37074            7: 'Ù§',
37075            8: 'Ù¨',
37076            9: 'Ù©',
37077            0: 'Ù ',
37078        },
37079        numberMap = {
37080            'Ù¡': '1',
37081            'Ù¢': '2',
37082            'Ù£': '3',
37083            'Ù¤': '4',
37084            'Ù¥': '5',
37085            'Ù¦': '6',
37086            'Ù§': '7',
37087            'Ù¨': '8',
37088            'Ù©': '9',
37089            'Ù ': '0',
37090        };
37091
37092    var arSa = moment.defineLocale('ar-sa', {
37093        months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
37094            '_'
37095        ),
37096        monthsShort:
37097            'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
37098                '_'
37099            ),
37100        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
37101        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
37102        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
37103        weekdaysParseExact: true,
37104        longDateFormat: {
37105            LT: 'HH:mm',
37106            LTS: 'HH:mm:ss',
37107            L: 'DD/MM/YYYY',
37108            LL: 'D MMMM YYYY',
37109            LLL: 'D MMMM YYYY HH:mm',
37110            LLLL: 'dddd D MMMM YYYY HH:mm',
37111        },
37112        meridiemParse: /ص|م/,
37113        isPM: function (input) {
37114            return 'م' === input;
37115        },
37116        meridiem: function (hour, minute, isLower) {
37117            if (hour < 12) {
37118                return 'ص';
37119            } else {
37120                return 'م';
37121            }
37122        },
37123        calendar: {
37124            sameDay: '[اليوم على الساعة] LT',
37125            nextDay: '[غدا على الساعة] LT',
37126            nextWeek: 'dddd [على الساعة] LT',
37127            lastDay: '[أمس على الساعة] LT',
37128            lastWeek: 'dddd [على الساعة] LT',
37129            sameElse: 'L',
37130        },
37131        relativeTime: {
37132            future: 'في %s',
37133            past: 'منذ %s',
37134            s: 'ثوان',
37135            ss: '%d ثانية',
37136            m: 'دقيقة',
37137            mm: '%d دقائق',
37138            h: 'ساعة',
37139            hh: '%d ساعات',
37140            d: 'يوم',
37141            dd: '%d أيام',
37142            M: 'شهر',
37143            MM: '%d أشهر',
37144            y: 'سنة',
37145            yy: '%d سنوات',
37146        },
37147        preparse: function (string) {
37148            return string
37149                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
37150                    return numberMap[match];
37151                })
37152                .replace(/،/g, ',');
37153        },
37154        postformat: function (string) {
37155            return string
37156                .replace(/\d/g, function (match) {
37157                    return symbolMap[match];
37158                })
37159                .replace(/,/g, '،');
37160        },
37161        week: {
37162            dow: 0, // Sunday is the first day of the week.
37163            doy: 6, // The week that contains Jan 6th is the first week of the year.
37164        },
37165    });
37166
37167    return arSa;
37168
37169})));
37170
37171
37172/***/ }),
37173
vendor: 2,642 bytes, lines 37174-37248
37174/***/ "./node_modules/moment/locale/ar-tn.js":
37175/*!*********************************************!*\
37176  !*** ./node_modules/moment/locale/ar-tn.js ***!
37177  \*********************************************/
37178/*! no static exports found */
37179/***/ (function(module, exports, __webpack_require__) {
37180
37181//! moment.js locale configuration
37182//! locale  :  Arabic (Tunisia) [ar-tn]
37183//! author : Nader Toukabri : https://github.com/naderio
37184
37185;(function (global, factory) {
37186    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
37187   undefined
37188}(this, (function (moment) { 'use strict';
37189
37190    //! moment.js locale configuration
37191
37192    var arTn = moment.defineLocale('ar-tn', {
37193        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
37194            '_'
37195        ),
37196        monthsShort:
37197            'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
37198                '_'
37199            ),
37200        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
37201        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
37202        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
37203        weekdaysParseExact: true,
37204        longDateFormat: {
37205            LT: 'HH:mm',
37206            LTS: 'HH:mm:ss',
37207            L: 'DD/MM/YYYY',
37208            LL: 'D MMMM YYYY',
37209            LLL: 'D MMMM YYYY HH:mm',
37210            LLLL: 'dddd D MMMM YYYY HH:mm',
37211        },
37212        calendar: {
37213            sameDay: '[اليوم على الساعة] LT',
37214            nextDay: '[غدا على الساعة] LT',
37215            nextWeek: 'dddd [على الساعة] LT',
37216            lastDay: '[أمس على الساعة] LT',
37217            lastWeek: 'dddd [على الساعة] LT',
37218            sameElse: 'L',
37219        },
37220        relativeTime: {
37221            future: 'في %s',
37222            past: 'منذ %s',
37223            s: 'ثوان',
37224            ss: '%d ثانية',
37225            m: 'دقيقة',
37226            mm: '%d دقائق',
37227            h: 'ساعة',
37228            hh: '%d ساعات',
37229            d: 'يوم',
37230            dd: '%d أيام',
37231            M: 'شهر',
37232            MM: '%d أشهر',
37233            y: 'سنة',
37234            yy: '%d سنوات',
37235        },
37236        week: {
37237            dow: 1, // Monday is the first day of the week.
37238            doy: 4, // The week that contains Jan 4th is the first week of the year.
37239        },
37240    });
37241
37242    return arTn;
37243
37244})));
37245
37246
37247/***/ }),
37248
vendor: 6,326 bytes, lines 37249-37457
37249/***/ "./node_modules/moment/locale/ar.js":
37250/*!******************************************!*\
37251  !*** ./node_modules/moment/locale/ar.js ***!
37252  \******************************************/
37253/*! no static exports found */
37254/***/ (function(module, exports, __webpack_require__) {
37255
37256//! moment.js locale configuration
37257//! locale : Arabic [ar]
37258//! author : Abdel Said: https://github.com/abdelsaid
37259//! author : Ahmed Elkhatib
37260//! author : forabi https://github.com/forabi
37261
37262;(function (global, factory) {
37263    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
37264   undefined
37265}(this, (function (moment) { 'use strict';
37266
37267    //! moment.js locale configuration
37268
37269    var symbolMap = {
37270            1: 'Ù¡',
37271            2: 'Ù¢',
37272            3: 'Ù£',
37273            4: 'Ù¤',
37274            5: 'Ù¥',
37275            6: 'Ù¦',
37276            7: 'Ù§',
37277            8: 'Ù¨',
37278            9: 'Ù©',
37279            0: 'Ù ',
37280        },
37281        numberMap = {
37282            'Ù¡': '1',
37283            'Ù¢': '2',
37284            'Ù£': '3',
37285            'Ù¤': '4',
37286            'Ù¥': '5',
37287            'Ù¦': '6',
37288            'Ù§': '7',
37289            'Ù¨': '8',
37290            'Ù©': '9',
37291            'Ù ': '0',
37292        },
37293        pluralForm = function (n) {
37294            return n === 0
37295                ? 0
37296                : n === 1
37297                  ? 1
37298                  : n === 2
37299                    ? 2
37300                    : n % 100 >= 3 && n % 100 <= 10
37301                      ? 3
37302                      : n % 100 >= 11
37303                        ? 4
37304                        : 5;
37305        },
37306        plurals = {
37307            s: [
37308                'أقل من ثانية',
37309                'ثانية واحدة',
37310                ['ثانيتان', 'ثانيتين'],
37311                '%d ثوان',
37312                '%d ثانية',
37313                '%d ثانية',
37314            ],
37315            m: [
37316                'أقل من دقيقة',
37317                'دقيقة واحدة',
37318                ['دقيقتان', 'دقيقتين'],
37319                '%d دقائق',
37320                '%d دقيقة',
37321                '%d دقيقة',
37322            ],
37323            h: [
37324                'أقل من ساعة',
37325                'ساعة واحدة',
37326                ['ساعتان', 'ساعتين'],
37327                '%d ساعات',
37328                '%d ساعة',
37329                '%d ساعة',
37330            ],
37331            d: [
37332                'أقل من يوم',
37333                'يوم واحد',
37334                ['يومان', 'يومين'],
37335                '%d أيام',
37336                '%d يومًا',
37337                '%d يوم',
37338            ],
37339            M: [
37340                'أقل من شهر',
37341                'شهر واحد',
37342                ['شهران', 'شهرين'],
37343                '%d أشهر',
37344                '%d شهرا',
37345                '%d شهر',
37346            ],
37347            y: [
37348                'أقل من عام',
37349                'عام واحد',
37350                ['عامان', 'عامين'],
37351                '%d أعوام',
37352                '%d عامًا',
37353                '%d عام',
37354            ],
37355        },
37356        pluralize = function (u) {
37357            return function (number, withoutSuffix, string, isFuture) {
37358                var f = pluralForm(number),
37359                    str = plurals[u][pluralForm(number)];
37360                if (f === 2) {
37361                    str = str[withoutSuffix ? 0 : 1];
37362                }
37363                return str.replace(/%d/i, number);
37364            };
37365        },
37366        months = [
37367            'يناير',
37368            'فبراير',
37369            'مارس',
37370            'أبريل',
37371            'مايو',
37372            'يونيو',
37373            'يوليو',
37374            'أغسطس',
37375            'سبتمبر',
37376            'أكتوبر',
37377            'نوفمبر',
37378            'ديسمبر',
37379        ];
37380
37381    var ar = moment.defineLocale('ar', {
37382        months: months,
37383        monthsShort: months,
37384        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
37385        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
37386        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
37387        weekdaysParseExact: true,
37388        longDateFormat: {
37389            LT: 'HH:mm',
37390            LTS: 'HH:mm:ss',
37391            L: 'D/\u200FM/\u200FYYYY',
37392            LL: 'D MMMM YYYY',
37393            LLL: 'D MMMM YYYY HH:mm',
37394            LLLL: 'dddd D MMMM YYYY HH:mm',
37395        },
37396        meridiemParse: /ص|م/,
37397        isPM: function (input) {
37398            return 'م' === input;
37399        },
37400        meridiem: function (hour, minute, isLower) {
37401            if (hour < 12) {
37402                return 'ص';
37403            } else {
37404                return 'م';
37405            }
37406        },
37407        calendar: {
37408            sameDay: '[اليوم عند الساعة] LT',
37409            nextDay: '[غدًا عند الساعة] LT',
37410            nextWeek: 'dddd [عند الساعة] LT',
37411            lastDay: '[أمس عند الساعة] LT',
37412            lastWeek: 'dddd [عند الساعة] LT',
37413            sameElse: 'L',
37414        },
37415        relativeTime: {
37416            future: 'بعد %s',
37417            past: 'منذ %s',
37418            s: pluralize('s'),
37419            ss: pluralize('s'),
37420            m: pluralize('m'),
37421            mm: pluralize('m'),
37422            h: pluralize('h'),
37423            hh: pluralize('h'),
37424            d: pluralize('d'),
37425            dd: pluralize('d'),
37426            M: pluralize('M'),
37427            MM: pluralize('M'),
37428            y: pluralize('y'),
37429            yy: pluralize('y'),
37430        },
37431        preparse: function (string) {
37432            return string
37433                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
37434                    return numberMap[match];
37435                })
37436                .replace(/،/g, ',');
37437        },
37438        postformat: function (string) {
37439            return string
37440                .replace(/\d/g, function (match) {
37441                    return symbolMap[match];
37442                })
37443                .replace(/,/g, '،');
37444        },
37445        week: {
37446            dow: 6, // Saturday is the first day of the week.
37447            doy: 12, // The week that contains Jan 12th is the first week of the year.
37448        },
37449    });
37450
37451    return ar;
37452
37453})));
37454
37455
37456/***/ }),
37457
vendor: 3,720 bytes, lines 37458-37579
37458/***/ "./node_modules/moment/locale/az.js":
37459/*!******************************************!*\
37460  !*** ./node_modules/moment/locale/az.js ***!
37461  \******************************************/
37462/*! no static exports found */
37463/***/ (function(module, exports, __webpack_require__) {
37464
37465//! moment.js locale configuration
37466//! locale : Azerbaijani [az]
37467//! author : topchiyev : https://github.com/topchiyev
37468
37469;(function (global, factory) {
37470    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
37471   undefined
37472}(this, (function (moment) { 'use strict';
37473
37474    //! moment.js locale configuration
37475
37476    var suffixes = {
37477        1: '-inci',
37478        5: '-inci',
37479        8: '-inci',
37480        70: '-inci',
37481        80: '-inci',
37482        2: '-nci',
37483        7: '-nci',
37484        20: '-nci',
37485        50: '-nci',
37486        3: '-üncü',
37487        4: '-üncü',
37488        100: '-üncü',
37489        6: '-ncı',
37490        9: '-uncu',
37491        10: '-uncu',
37492        30: '-uncu',
37493        60: '-ıncı',
37494        90: '-ıncı',
37495    };
37496
37497    var az = moment.defineLocale('az', {
37498        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(
37499            '_'
37500        ),
37501        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
37502        weekdays:
37503            'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(
37504                '_'
37505            ),
37506        weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
37507        weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
37508        weekdaysParseExact: true,
37509        longDateFormat: {
37510            LT: 'HH:mm',
37511            LTS: 'HH:mm:ss',
37512            L: 'DD.MM.YYYY',
37513            LL: 'D MMMM YYYY',
37514            LLL: 'D MMMM YYYY HH:mm',
37515            LLLL: 'dddd, D MMMM YYYY HH:mm',
37516        },
37517        calendar: {
37518            sameDay: '[bugün saat] LT',
37519            nextDay: '[sabah saat] LT',
37520            nextWeek: '[gələn həftə] dddd [saat] LT',
37521            lastDay: '[dünən] LT',
37522            lastWeek: '[keçən həftə] dddd [saat] LT',
37523            sameElse: 'L',
37524        },
37525        relativeTime: {
37526            future: '%s sonra',
37527            past: '%s əvvəl',
37528            s: 'bir neçə saniyə',
37529            ss: '%d saniyə',
37530            m: 'bir dəqiqə',
37531            mm: '%d dəqiqə',
37532            h: 'bir saat',
37533            hh: '%d saat',
37534            d: 'bir gün',
37535            dd: '%d gün',
37536            M: 'bir ay',
37537            MM: '%d ay',
37538            y: 'bir il',
37539            yy: '%d il',
37540        },
37541        meridiemParse: /gecə|səhər|gündüz|axşam/,
37542        isPM: function (input) {
37543            return /^(gündüz|axşam)$/.test(input);
37544        },
37545        meridiem: function (hour, minute, isLower) {
37546            if (hour < 4) {
37547                return 'gecə';
37548            } else if (hour < 12) {
37549                return 'səhər';
37550            } else if (hour < 17) {
37551                return 'gündüz';
37552            } else {
37553                return 'axşam';
37554            }
37555        },
37556        dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
37557        ordinal: function (number) {
37558            if (number === 0) {
37559                // special case for zero
37560                return number + '-ıncı';
37561            }
37562            var a = number % 10,
37563                b = (number % 100) - a,
37564                c = number >= 100 ? 100 : null;
37565            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
37566        },
37567        week: {
37568            dow: 1, // Monday is the first day of the week.
37569            doy: 7, // The week that contains Jan 7th is the first week of the year.
37570        },
37571    });
37572
37573    return az;
37574
37575})));
37576
37577
37578/***/ }),
37579
vendor: 6,184 bytes, lines 37580-37741
37580/***/ "./node_modules/moment/locale/be.js":
37581/*!******************************************!*\
37582  !*** ./node_modules/moment/locale/be.js ***!
37583  \******************************************/
37584/*! no static exports found */
37585/***/ (function(module, exports, __webpack_require__) {
37586
37587//! moment.js locale configuration
37588//! locale : Belarusian [be]
37589//! author : Dmitry Demidov : https://github.com/demidov91
37590//! author: Praleska: http://praleska.pro/
37591//! Author : Menelion Elensúle : https://github.com/Oire
37592
37593;(function (global, factory) {
37594    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
37595   undefined
37596}(this, (function (moment) { 'use strict';
37597
37598    //! moment.js locale configuration
37599
37600    function plural(word, num) {
37601        var forms = word.split('_');
37602        return num % 10 === 1 && num % 100 !== 11
37603            ? forms[0]
37604            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
37605              ? forms[1]
37606              : forms[2];
37607    }
37608    function relativeTimeWithPlural(number, withoutSuffix, key) {
37609        var format = {
37610            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
37611            mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
37612            hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
37613            dd: 'дзень_дні_дзён',
37614            MM: 'месяц_месяцы_месяцаў',
37615            yy: 'год_гады_гадоў',
37616        };
37617        if (key === 'm') {
37618            return withoutSuffix ? 'хвіліна' : 'хвіліну';
37619        } else if (key === 'h') {
37620            return withoutSuffix ? 'гадзіна' : 'гадзіну';
37621        } else {
37622            return number + ' ' + plural(format[key], +number);
37623        }
37624    }
37625
37626    var be = moment.defineLocale('be', {
37627        months: {
37628            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(
37629                '_'
37630            ),
37631            standalone:
37632                'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(
37633                    '_'
37634                ),
37635        },
37636        monthsShort:
37637            'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
37638        weekdays: {
37639            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(
37640                '_'
37641            ),
37642            standalone:
37643                'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(
37644                    '_'
37645                ),
37646            isFormat: /\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/,
37647        },
37648        weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
37649        weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
37650        longDateFormat: {
37651            LT: 'HH:mm',
37652            LTS: 'HH:mm:ss',
37653            L: 'DD.MM.YYYY',
37654            LL: 'D MMMM YYYY г.',
37655            LLL: 'D MMMM YYYY г., HH:mm',
37656            LLLL: 'dddd, D MMMM YYYY г., HH:mm',
37657        },
37658        calendar: {
37659            sameDay: '[Сёння ў] LT',
37660            nextDay: '[Заўтра ў] LT',
37661            lastDay: '[Учора ў] LT',
37662            nextWeek: function () {
37663                return '[У] dddd [ў] LT';
37664            },
37665            lastWeek: function () {
37666                switch (this.day()) {
37667                    case 0:
37668                    case 3:
37669                    case 5:
37670                    case 6:
37671                        return '[У мінулую] dddd [ў] LT';
37672                    case 1:
37673                    case 2:
37674                    case 4:
37675                        return '[У мінулы] dddd [ў] LT';
37676                }
37677            },
37678            sameElse: 'L',
37679        },
37680        relativeTime: {
37681            future: 'праз %s',
37682            past: '%s таму',
37683            s: 'некалькі секунд',
37684            m: relativeTimeWithPlural,
37685            mm: relativeTimeWithPlural,
37686            h: relativeTimeWithPlural,
37687            hh: relativeTimeWithPlural,
37688            d: 'дзень',
37689            dd: relativeTimeWithPlural,
37690            M: 'месяц',
37691            MM: relativeTimeWithPlural,
37692            y: 'год',
37693            yy: relativeTimeWithPlural,
37694        },
37695        meridiemParse: /ночы|раніцы|дня|вечара/,
37696        isPM: function (input) {
37697            return /^(дня|вечара)$/.test(input);
37698        },
37699        meridiem: function (hour, minute, isLower) {
37700            if (hour < 4) {
37701                return 'ночы';
37702            } else if (hour < 12) {
37703                return 'раніцы';
37704            } else if (hour < 17) {
37705                return 'дня';
37706            } else {
37707                return 'вечара';
37708            }
37709        },
37710        dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/,
37711        ordinal: function (number, period) {
37712            switch (period) {
37713                case 'M':
37714                case 'd':
37715                case 'DDD':
37716                case 'w':
37717                case 'W':
37718                    return (number % 10 === 2 || number % 10 === 3) &&
37719                        number % 100 !== 12 &&
37720                        number % 100 !== 13
37721                        ? number + '-і'
37722                        : number + '-ы';
37723                case 'D':
37724                    return number + '-га';
37725                default:
37726                    return number;
37727            }
37728        },
37729        week: {
37730            dow: 1, // Monday is the first day of the week.
37731            doy: 7, // The week that contains Jan 7th is the first week of the year.
37732        },
37733    });
37734
37735    return be;
37736
37737})));
37738
37739
37740/***/ }),
37741
vendor: 3,773 bytes, lines 37742-37848
37742/***/ "./node_modules/moment/locale/bg.js":
37743/*!******************************************!*\
37744  !*** ./node_modules/moment/locale/bg.js ***!
37745  \******************************************/
37746/*! no static exports found */
37747/***/ (function(module, exports, __webpack_require__) {
37748
37749//! moment.js locale configuration
37750//! locale : Bulgarian [bg]
37751//! author : Krasen Borisov : https://github.com/kraz
37752
37753;(function (global, factory) {
37754    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
37755   undefined
37756}(this, (function (moment) { 'use strict';
37757
37758    //! moment.js locale configuration
37759
37760    var bg = moment.defineLocale('bg', {
37761        months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(
37762            '_'
37763        ),
37764        monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
37765        weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(
37766            '_'
37767        ),
37768        weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
37769        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
37770        longDateFormat: {
37771            LT: 'H:mm',
37772            LTS: 'H:mm:ss',
37773            L: 'D.MM.YYYY',
37774            LL: 'D MMMM YYYY',
37775            LLL: 'D MMMM YYYY H:mm',
37776            LLLL: 'dddd, D MMMM YYYY H:mm',
37777        },
37778        calendar: {
37779            sameDay: '[Днес в] LT',
37780            nextDay: '[Утре в] LT',
37781            nextWeek: 'dddd [в] LT',
37782            lastDay: '[Вчера в] LT',
37783            lastWeek: function () {
37784                switch (this.day()) {
37785                    case 0:
37786                    case 3:
37787                    case 6:
37788                        return '[Миналата] dddd [в] LT';
37789                    case 1:
37790                    case 2:
37791                    case 4:
37792                    case 5:
37793                        return '[Миналия] dddd [в] LT';
37794                }
37795            },
37796            sameElse: 'L',
37797        },
37798        relativeTime: {
37799            future: 'след %s',
37800            past: 'преди %s',
37801            s: 'няколко секунди',
37802            ss: '%d секунди',
37803            m: 'минута',
37804            mm: '%d минути',
37805            h: 'час',
37806            hh: '%d часа',
37807            d: 'ден',
37808            dd: '%d дена',
37809            w: 'седмица',
37810            ww: '%d седмици',
37811            M: 'месец',
37812            MM: '%d месеца',
37813            y: 'година',
37814            yy: '%d години',
37815        },
37816        dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
37817        ordinal: function (number) {
37818            var lastDigit = number % 10,
37819                last2Digits = number % 100;
37820            if (number === 0) {
37821                return number + '-ев';
37822            } else if (last2Digits === 0) {
37823                return number + '-ен';
37824            } else if (last2Digits > 10 && last2Digits < 20) {
37825                return number + '-ти';
37826            } else if (lastDigit === 1) {
37827                return number + '-ви';
37828            } else if (lastDigit === 2) {
37829                return number + '-ри';
37830            } else if (lastDigit === 7 || lastDigit === 8) {
37831                return number + '-ми';
37832            } else {
37833                return number + '-ти';
37834            }
37835        },
37836        week: {
37837            dow: 1, // Monday is the first day of the week.
37838            doy: 7, // The week that contains Jan 7th is the first week of the year.
37839        },
37840    });
37841
37842    return bg;
37843
37844})));
37845
37846
37847/***/ }),
37848
vendor: 2,383 bytes, lines 37849-37919
37849/***/ "./node_modules/moment/locale/bm.js":
37850/*!******************************************!*\
37851  !*** ./node_modules/moment/locale/bm.js ***!
37852  \******************************************/
37853/*! no static exports found */
37854/***/ (function(module, exports, __webpack_require__) {
37855
37856//! moment.js locale configuration
37857//! locale : Bambara [bm]
37858//! author : Estelle Comment : https://github.com/estellecomment
37859
37860;(function (global, factory) {
37861    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
37862   undefined
37863}(this, (function (moment) { 'use strict';
37864
37865    //! moment.js locale configuration
37866
37867    var bm = moment.defineLocale('bm', {
37868        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(
37869            '_'
37870        ),
37871        monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),
37872        weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
37873        weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),
37874        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
37875        longDateFormat: {
37876            LT: 'HH:mm',
37877            LTS: 'HH:mm:ss',
37878            L: 'DD/MM/YYYY',
37879            LL: 'MMMM [tile] D [san] YYYY',
37880            LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
37881            LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
37882        },
37883        calendar: {
37884            sameDay: '[Bi lɛrɛ] LT',
37885            nextDay: '[Sini lɛrɛ] LT',
37886            nextWeek: 'dddd [don lɛrɛ] LT',
37887            lastDay: '[Kunu lɛrɛ] LT',
37888            lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',
37889            sameElse: 'L',
37890        },
37891        relativeTime: {
37892            future: '%s kɔnɔ',
37893            past: 'a bɛ %s bɔ',
37894            s: 'sanga dama dama',
37895            ss: 'sekondi %d',
37896            m: 'miniti kelen',
37897            mm: 'miniti %d',
37898            h: 'lɛrɛ kelen',
37899            hh: 'lɛrɛ %d',
37900            d: 'tile kelen',
37901            dd: 'tile %d',
37902            M: 'kalo kelen',
37903            MM: 'kalo %d',
37904            y: 'san kelen',
37905            yy: 'san %d',
37906        },
37907        week: {
37908            dow: 1, // Monday is the first day of the week.
37909            doy: 4, // The week that contains Jan 4th is the first week of the year.
37910        },
37911    });
37912
37913    return bm;
37914
37915})));
37916
37917
37918/***/ }),
37919
vendor: 5,339 bytes, lines 37920-38068
37920/***/ "./node_modules/moment/locale/bn-bd.js":
37921/*!*********************************************!*\
37922  !*** ./node_modules/moment/locale/bn-bd.js ***!
37923  \*********************************************/
37924/*! no static exports found */
37925/***/ (function(module, exports, __webpack_require__) {
37926
37927//! moment.js locale configuration
37928//! locale : Bengali (Bangladesh) [bn-bd]
37929//! author : Asraf Hossain Patoary : https://github.com/ashwoolford
37930
37931;(function (global, factory) {
37932    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
37933   undefined
37934}(this, (function (moment) { 'use strict';
37935
37936    //! moment.js locale configuration
37937
37938    var symbolMap = {
37939            1: 'à§§',
37940            2: '২',
37941            3: 'à§©',
37942            4: '৪',
37943            5: 'à§«',
37944            6: '৬',
37945            7: 'à§­',
37946            8: 'à§®',
37947            9: '৯',
37948            0: '০',
37949        },
37950        numberMap = {
37951            'à§§': '1',
37952            '২': '2',
37953            'à§©': '3',
37954            '৪': '4',
37955            'à§«': '5',
37956            '৬': '6',
37957            'à§­': '7',
37958            'à§®': '8',
37959            '৯': '9',
37960            '০': '0',
37961        };
37962
37963    var bnBd = moment.defineLocale('bn-bd', {
37964        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(
37965            '_'
37966        ),
37967        monthsShort:
37968            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(
37969                '_'
37970            ),
37971        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(
37972            '_'
37973        ),
37974        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
37975        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),
37976        longDateFormat: {
37977            LT: 'A h:mm সময়',
37978            LTS: 'A h:mm:ss সময়',
37979            L: 'DD/MM/YYYY',
37980            LL: 'D MMMM YYYY',
37981            LLL: 'D MMMM YYYY, A h:mm সময়',
37982            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',
37983        },
37984        calendar: {
37985            sameDay: '[আজ] LT',
37986            nextDay: '[আগামীকাল] LT',
37987            nextWeek: 'dddd, LT',
37988            lastDay: '[গতকাল] LT',
37989            lastWeek: '[গত] dddd, LT',
37990            sameElse: 'L',
37991        },
37992        relativeTime: {
37993            future: '%s পরে',
37994            past: '%s আগে',
37995            s: 'কয়েক সেকেন্ড',
37996            ss: '%d সেকেন্ড',
37997            m: 'এক মিনিট',
37998            mm: '%d মিনিট',
37999            h: 'এক ঘন্টা',
38000            hh: '%d ঘন্টা',
38001            d: 'এক দিন',
38002            dd: '%d দিন',
38003            M: 'এক মাস',
38004            MM: '%d মাস',
38005            y: 'এক বছর',
38006            yy: '%d বছর',
38007        },
38008        preparse: function (string) {
38009            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
38010                return numberMap[match];
38011            });
38012        },
38013        postformat: function (string) {
38014            return string.replace(/\d/g, function (match) {
38015                return symbolMap[match];
38016            });
38017        },
38018
38019        meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,
38020        meridiemHour: function (hour, meridiem) {
38021            if (hour === 12) {
38022                hour = 0;
38023            }
38024            if (meridiem === 'রাত') {
38025                return hour < 4 ? hour : hour + 12;
38026            } else if (meridiem === 'ভোর') {
38027                return hour;
38028            } else if (meridiem === 'সকাল') {
38029                return hour;
38030            } else if (meridiem === 'দুপুর') {
38031                return hour >= 3 ? hour : hour + 12;
38032            } else if (meridiem === 'বিকাল') {
38033                return hour + 12;
38034            } else if (meridiem === 'সন্ধ্যা') {
38035                return hour + 12;
38036            }
38037        },
38038
38039        meridiem: function (hour, minute, isLower) {
38040            if (hour < 4) {
38041                return 'রাত';
38042            } else if (hour < 6) {
38043                return 'ভোর';
38044            } else if (hour < 12) {
38045                return 'সকাল';
38046            } else if (hour < 15) {
38047                return 'দুপুর';
38048            } else if (hour < 18) {
38049                return 'বিকাল';
38050            } else if (hour < 20) {
38051                return 'সন্ধ্যা';
38052            } else {
38053                return 'রাত';
38054            }
38055        },
38056        week: {
38057            dow: 0, // Sunday is the first day of the week.
38058            doy: 6, // The week that contains Jan 6th is the first week of the year.
38059        },
38060    });
38061
38062    return bnBd;
38063
38064})));
38065
38066
38067/***/ }),
38068
vendor: 4,840 bytes, lines 38069-38207
38069/***/ "./node_modules/moment/locale/bn.js":
38070/*!******************************************!*\
38071  !*** ./node_modules/moment/locale/bn.js ***!
38072  \******************************************/
38073/*! no static exports found */
38074/***/ (function(module, exports, __webpack_require__) {
38075
38076//! moment.js locale configuration
38077//! locale : Bengali [bn]
38078//! author : Kaushik Gandhi : https://github.com/kaushikgandhi
38079
38080;(function (global, factory) {
38081    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
38082   undefined
38083}(this, (function (moment) { 'use strict';
38084
38085    //! moment.js locale configuration
38086
38087    var symbolMap = {
38088            1: 'à§§',
38089            2: '২',
38090            3: 'à§©',
38091            4: '৪',
38092            5: 'à§«',
38093            6: '৬',
38094            7: 'à§­',
38095            8: 'à§®',
38096            9: '৯',
38097            0: '০',
38098        },
38099        numberMap = {
38100            'à§§': '1',
38101            '২': '2',
38102            'à§©': '3',
38103            '৪': '4',
38104            'à§«': '5',
38105            '৬': '6',
38106            'à§­': '7',
38107            'à§®': '8',
38108            '৯': '9',
38109            '০': '0',
38110        };
38111
38112    var bn = moment.defineLocale('bn', {
38113        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(
38114            '_'
38115        ),
38116        monthsShort:
38117            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(
38118                '_'
38119            ),
38120        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(
38121            '_'
38122        ),
38123        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
38124        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),
38125        longDateFormat: {
38126            LT: 'A h:mm সময়',
38127            LTS: 'A h:mm:ss সময়',
38128            L: 'DD/MM/YYYY',
38129            LL: 'D MMMM YYYY',
38130            LLL: 'D MMMM YYYY, A h:mm সময়',
38131            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',
38132        },
38133        calendar: {
38134            sameDay: '[আজ] LT',
38135            nextDay: '[আগামীকাল] LT',
38136            nextWeek: 'dddd, LT',
38137            lastDay: '[গতকাল] LT',
38138            lastWeek: '[গত] dddd, LT',
38139            sameElse: 'L',
38140        },
38141        relativeTime: {
38142            future: '%s পরে',
38143            past: '%s আগে',
38144            s: 'কয়েক সেকেন্ড',
38145            ss: '%d সেকেন্ড',
38146            m: 'এক মিনিট',
38147            mm: '%d মিনিট',
38148            h: 'এক ঘন্টা',
38149            hh: '%d ঘন্টা',
38150            d: 'এক দিন',
38151            dd: '%d দিন',
38152            M: 'এক মাস',
38153            MM: '%d মাস',
38154            y: 'এক বছর',
38155            yy: '%d বছর',
38156        },
38157        preparse: function (string) {
38158            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
38159                return numberMap[match];
38160            });
38161        },
38162        postformat: function (string) {
38163            return string.replace(/\d/g, function (match) {
38164                return symbolMap[match];
38165            });
38166        },
38167        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
38168        meridiemHour: function (hour, meridiem) {
38169            if (hour === 12) {
38170                hour = 0;
38171            }
38172            if (
38173                (meridiem === 'রাত' && hour >= 4) ||
38174                (meridiem === 'দুপুর' && hour < 5) ||
38175                meridiem === 'বিকাল'
38176            ) {
38177                return hour + 12;
38178            } else {
38179                return hour;
38180            }
38181        },
38182        meridiem: function (hour, minute, isLower) {
38183            if (hour < 4) {
38184                return 'রাত';
38185            } else if (hour < 10) {
38186                return 'সকাল';
38187            } else if (hour < 17) {
38188                return 'দুপুর';
38189            } else if (hour < 20) {
38190                return 'বিকাল';
38191            } else {
38192                return 'রাত';
38193            }
38194        },
38195        week: {
38196            dow: 0, // Sunday is the first day of the week.
38197            doy: 6, // The week that contains Jan 6th is the first week of the year.
38198        },
38199    });
38200
38201    return bn;
38202
38203})));
38204
38205
38206/***/ }),
38207
vendor: 5,361 bytes, lines 38208-38351
38208/***/ "./node_modules/moment/locale/bo.js":
38209/*!******************************************!*\
38210  !*** ./node_modules/moment/locale/bo.js ***!
38211  \******************************************/
38212/*! no static exports found */
38213/***/ (function(module, exports, __webpack_require__) {
38214
38215//! moment.js locale configuration
38216//! locale : Tibetan [bo]
38217//! author : Thupten N. Chakrishar : https://github.com/vajradog
38218
38219;(function (global, factory) {
38220    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
38221   undefined
38222}(this, (function (moment) { 'use strict';
38223
38224    //! moment.js locale configuration
38225
38226    var symbolMap = {
38227            1: '༡',
38228            2: '༢',
38229            3: '༣',
38230            4: '༤',
38231            5: '༥',
38232            6: '༦',
38233            7: '༧',
38234            8: '༨',
38235            9: '༩',
38236            0: '༠',
38237        },
38238        numberMap = {
38239            '༡': '1',
38240            '༢': '2',
38241            '༣': '3',
38242            '༤': '4',
38243            '༥': '5',
38244            '༦': '6',
38245            '༧': '7',
38246            '༨': '8',
38247            '༩': '9',
38248            '༠': '0',
38249        };
38250
38251    var bo = moment.defineLocale('bo', {
38252        months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(
38253            '_'
38254        ),
38255        monthsShort:
38256            'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(
38257                '_'
38258            ),
38259        monthsShortRegex: /^(ཟླ་\d{1,2})/,
38260        monthsParseExact: true,
38261        weekdays:
38262            'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(
38263                '_'
38264            ),
38265        weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(
38266            '_'
38267        ),
38268        weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),
38269        longDateFormat: {
38270            LT: 'A h:mm',
38271            LTS: 'A h:mm:ss',
38272            L: 'DD/MM/YYYY',
38273            LL: 'D MMMM YYYY',
38274            LLL: 'D MMMM YYYY, A h:mm',
38275            LLLL: 'dddd, D MMMM YYYY, A h:mm',
38276        },
38277        calendar: {
38278            sameDay: '[དི་རིང] LT',
38279            nextDay: '[སང་ཉིན] LT',
38280            nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',
38281            lastDay: '[ཁ་སང] LT',
38282            lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
38283            sameElse: 'L',
38284        },
38285        relativeTime: {
38286            future: '%s ལ་',
38287            past: '%s སྔན་ལ',
38288            s: 'ལམ་སང',
38289            ss: '%d སྐར་ཆ།',
38290            m: 'སྐར་མ་གཅིག',
38291            mm: '%d སྐར་མ',
38292            h: 'ཆུ་ཚོད་གཅིག',
38293            hh: '%d ཆུ་ཚོད',
38294            d: 'ཉིན་གཅིག',
38295            dd: '%d ཉིན་',
38296            M: 'ཟླ་བ་གཅིག',
38297            MM: '%d ཟླ་བ',
38298            y: 'ལོ་གཅིག',
38299            yy: '%d ལོ',
38300        },
38301        preparse: function (string) {
38302            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
38303                return numberMap[match];
38304            });
38305        },
38306        postformat: function (string) {
38307            return string.replace(/\d/g, function (match) {
38308                return symbolMap[match];
38309            });
38310        },
38311        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
38312        meridiemHour: function (hour, meridiem) {
38313            if (hour === 12) {
38314                hour = 0;
38315            }
38316            if (
38317                (meridiem === 'མཚན་མོ' && hour >= 4) ||
38318                (meridiem === 'ཉིན་གུང' && hour < 5) ||
38319                meridiem === 'དགོང་དག'
38320            ) {
38321                return hour + 12;
38322            } else {
38323                return hour;
38324            }
38325        },
38326        meridiem: function (hour, minute, isLower) {
38327            if (hour < 4) {
38328                return 'མཚན་མོ';
38329            } else if (hour < 10) {
38330                return 'ཞོགས་ཀས';
38331            } else if (hour < 17) {
38332                return 'ཉིན་གུང';
38333            } else if (hour < 20) {
38334                return 'དགོང་དག';
38335            } else {
38336                return 'མཚན་མོ';
38337            }
38338        },
38339        week: {
38340            dow: 0, // Sunday is the first day of the week.
38341            doy: 6, // The week that contains Jan 6th is the first week of the year.
38342        },
38343    });
38344
38345    return bo;
38346
38347})));
38348
38349
38350/***/ }),
38351
vendor: 5,670 bytes, lines 38352-38539
38352/***/ "./node_modules/moment/locale/br.js":
38353/*!******************************************!*\
38354  !*** ./node_modules/moment/locale/br.js ***!
38355  \******************************************/
38356/*! no static exports found */
38357/***/ (function(module, exports, __webpack_require__) {
38358
38359//! moment.js locale configuration
38360//! locale : Breton [br]
38361//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
38362
38363;(function (global, factory) {
38364    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
38365   undefined
38366}(this, (function (moment) { 'use strict';
38367
38368    //! moment.js locale configuration
38369
38370    function relativeTimeWithMutation(number, withoutSuffix, key) {
38371        var format = {
38372            mm: 'munutenn',
38373            MM: 'miz',
38374            dd: 'devezh',
38375        };
38376        return number + ' ' + mutation(format[key], number);
38377    }
38378    function specialMutationForYears(number) {
38379        switch (lastNumber(number)) {
38380            case 1:
38381            case 3:
38382            case 4:
38383            case 5:
38384            case 9:
38385                return number + ' bloaz';
38386            default:
38387                return number + ' vloaz';
38388        }
38389    }
38390    function lastNumber(number) {
38391        if (number > 9) {
38392            return lastNumber(number % 10);
38393        }
38394        return number;
38395    }
38396    function mutation(text, number) {
38397        if (number === 2) {
38398            return softMutation(text);
38399        }
38400        return text;
38401    }
38402    function softMutation(text) {
38403        var mutationTable = {
38404            m: 'v',
38405            b: 'v',
38406            d: 'z',
38407        };
38408        if (mutationTable[text.charAt(0)] === undefined) {
38409            return text;
38410        }
38411        return mutationTable[text.charAt(0)] + text.substring(1);
38412    }
38413
38414    var monthsParse = [
38415            /^gen/i,
38416            /^c[ʼ\']hwe/i,
38417            /^meu/i,
38418            /^ebr/i,
38419            /^mae/i,
38420            /^(mez|eve)/i,
38421            /^gou/i,
38422            /^eos/i,
38423            /^gwe/i,
38424            /^her/i,
38425            /^du/i,
38426            /^ker/i,
38427        ],
38428        monthsRegex =
38429            /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
38430        monthsStrictRegex =
38431            /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,
38432        monthsShortStrictRegex =
38433            /^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
38434        fullWeekdaysParse = [
38435            /^sul/i,
38436            /^lun/i,
38437            /^meurzh/i,
38438            /^merc[ʼ\']her/i,
38439            /^yaou/i,
38440            /^gwener/i,
38441            /^sadorn/i,
38442        ],
38443        shortWeekdaysParse = [
38444            /^Sul/i,
38445            /^Lun/i,
38446            /^Meu/i,
38447            /^Mer/i,
38448            /^Yao/i,
38449            /^Gwe/i,
38450            /^Sad/i,
38451        ],
38452        minWeekdaysParse = [
38453            /^Su/i,
38454            /^Lu/i,
38455            /^Me([^r]|$)/i,
38456            /^Mer/i,
38457            /^Ya/i,
38458            /^Gw/i,
38459            /^Sa/i,
38460        ];
38461
38462    var br = moment.defineLocale('br', {
38463        months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(
38464            '_'
38465        ),
38466        monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
38467        weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),
38468        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
38469        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
38470        weekdaysParse: minWeekdaysParse,
38471        fullWeekdaysParse: fullWeekdaysParse,
38472        shortWeekdaysParse: shortWeekdaysParse,
38473        minWeekdaysParse: minWeekdaysParse,
38474
38475        monthsRegex: monthsRegex,
38476        monthsShortRegex: monthsRegex,
38477        monthsStrictRegex: monthsStrictRegex,
38478        monthsShortStrictRegex: monthsShortStrictRegex,
38479        monthsParse: monthsParse,
38480        longMonthsParse: monthsParse,
38481        shortMonthsParse: monthsParse,
38482
38483        longDateFormat: {
38484            LT: 'HH:mm',
38485            LTS: 'HH:mm:ss',
38486            L: 'DD/MM/YYYY',
38487            LL: 'D [a viz] MMMM YYYY',
38488            LLL: 'D [a viz] MMMM YYYY HH:mm',
38489            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',
38490        },
38491        calendar: {
38492            sameDay: '[Hiziv da] LT',
38493            nextDay: '[Warcʼhoazh da] LT',
38494            nextWeek: 'dddd [da] LT',
38495            lastDay: '[Decʼh da] LT',
38496            lastWeek: 'dddd [paset da] LT',
38497            sameElse: 'L',
38498        },
38499        relativeTime: {
38500            future: 'a-benn %s',
38501            past: '%s ʼzo',
38502            s: 'un nebeud segondennoù',
38503            ss: '%d eilenn',
38504            m: 'ur vunutenn',
38505            mm: relativeTimeWithMutation,
38506            h: 'un eur',
38507            hh: '%d eur',
38508            d: 'un devezh',
38509            dd: relativeTimeWithMutation,
38510            M: 'ur miz',
38511            MM: relativeTimeWithMutation,
38512            y: 'ur bloaz',
38513            yy: specialMutationForYears,
38514        },
38515        dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/,
38516        ordinal: function (number) {
38517            var output = number === 1 ? 'añ' : 'vet';
38518            return number + output;
38519        },
38520        week: {
38521            dow: 1, // Monday is the first day of the week.
38522            doy: 4, // The week that contains Jan 4th is the first week of the year.
38523        },
38524        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn
38525        isPM: function (token) {
38526            return token === 'g.m.';
38527        },
38528        meridiem: function (hour, minute, isLower) {
38529            return hour < 12 ? 'a.m.' : 'g.m.';
38530        },
38531    });
38532
38533    return br;
38534
38535})));
38536
38537
38538/***/ }),
38539
vendor: 5,825 bytes, lines 38540-38719
38540/***/ "./node_modules/moment/locale/bs.js":
38541/*!******************************************!*\
38542  !*** ./node_modules/moment/locale/bs.js ***!
38543  \******************************************/
38544/*! no static exports found */
38545/***/ (function(module, exports, __webpack_require__) {
38546
38547//! moment.js locale configuration
38548//! locale : Bosnian [bs]
38549//! author : Nedim Cholich : https://github.com/frontyard
38550//! author : Rasid Redzic : https://github.com/rasidre
38551//! based on (hr) translation by Bojan Marković
38552
38553;(function (global, factory) {
38554    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
38555   undefined
38556}(this, (function (moment) { 'use strict';
38557
38558    //! moment.js locale configuration
38559
38560    function processRelativeTime(number, withoutSuffix, key, isFuture) {
38561        switch (key) {
38562            case 'm':
38563                return withoutSuffix
38564                    ? 'jedna minuta'
38565                    : isFuture
38566                      ? 'jednu minutu'
38567                      : 'jedne minute';
38568        }
38569    }
38570
38571    function translate(number, withoutSuffix, key) {
38572        var result = number + ' ';
38573        switch (key) {
38574            case 'ss':
38575                if (number === 1) {
38576                    result += 'sekunda';
38577                } else if (number === 2 || number === 3 || number === 4) {
38578                    result += 'sekunde';
38579                } else {
38580                    result += 'sekundi';
38581                }
38582                return result;
38583            case 'mm':
38584                if (number === 1) {
38585                    result += 'minuta';
38586                } else if (number === 2 || number === 3 || number === 4) {
38587                    result += 'minute';
38588                } else {
38589                    result += 'minuta';
38590                }
38591                return result;
38592            case 'h':
38593                return withoutSuffix ? 'jedan sat' : 'jedan sat';
38594            case 'hh':
38595                if (number === 1) {
38596                    result += 'sat';
38597                } else if (number === 2 || number === 3 || number === 4) {
38598                    result += 'sata';
38599                } else {
38600                    result += 'sati';
38601                }
38602                return result;
38603            case 'dd':
38604                if (number === 1) {
38605                    result += 'dan';
38606                } else {
38607                    result += 'dana';
38608                }
38609                return result;
38610            case 'MM':
38611                if (number === 1) {
38612                    result += 'mjesec';
38613                } else if (number === 2 || number === 3 || number === 4) {
38614                    result += 'mjeseca';
38615                } else {
38616                    result += 'mjeseci';
38617                }
38618                return result;
38619            case 'yy':
38620                if (number === 1) {
38621                    result += 'godina';
38622                } else if (number === 2 || number === 3 || number === 4) {
38623                    result += 'godine';
38624                } else {
38625                    result += 'godina';
38626                }
38627                return result;
38628        }
38629    }
38630
38631    var bs = moment.defineLocale('bs', {
38632        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(
38633            '_'
38634        ),
38635        monthsShort:
38636            'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(
38637                '_'
38638            ),
38639        monthsParseExact: true,
38640        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
38641            '_'
38642        ),
38643        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
38644        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
38645        weekdaysParseExact: true,
38646        longDateFormat: {
38647            LT: 'H:mm',
38648            LTS: 'H:mm:ss',
38649            L: 'DD.MM.YYYY',
38650            LL: 'D. MMMM YYYY',
38651            LLL: 'D. MMMM YYYY H:mm',
38652            LLLL: 'dddd, D. MMMM YYYY H:mm',
38653        },
38654        calendar: {
38655            sameDay: '[danas u] LT',
38656            nextDay: '[sutra u] LT',
38657            nextWeek: function () {
38658                switch (this.day()) {
38659                    case 0:
38660                        return '[u] [nedjelju] [u] LT';
38661                    case 3:
38662                        return '[u] [srijedu] [u] LT';
38663                    case 6:
38664                        return '[u] [subotu] [u] LT';
38665                    case 1:
38666                    case 2:
38667                    case 4:
38668                    case 5:
38669                        return '[u] dddd [u] LT';
38670                }
38671            },
38672            lastDay: '[jučer u] LT',
38673            lastWeek: function () {
38674                switch (this.day()) {
38675                    case 0:
38676                    case 3:
38677                        return '[prošlu] dddd [u] LT';
38678                    case 6:
38679                        return '[prošle] [subote] [u] LT';
38680                    case 1:
38681                    case 2:
38682                    case 4:
38683                    case 5:
38684                        return '[prošli] dddd [u] LT';
38685                }
38686            },
38687            sameElse: 'L',
38688        },
38689        relativeTime: {
38690            future: 'za %s',
38691            past: 'prije %s',
38692            s: 'par sekundi',
38693            ss: translate,
38694            m: processRelativeTime,
38695            mm: translate,
38696            h: translate,
38697            hh: translate,
38698            d: 'dan',
38699            dd: translate,
38700            M: 'mjesec',
38701            MM: translate,
38702            y: 'godinu',
38703            yy: translate,
38704        },
38705        dayOfMonthOrdinalParse: /\d{1,2}\./,
38706        ordinal: '%d.',
38707        week: {
38708            dow: 1, // Monday is the first day of the week.
38709            doy: 7, // The week that contains Jan 7th is the first week of the year.
38710        },
38711    });
38712
38713    return bs;
38714
38715})));
38716
38717
38718/***/ }),
38719
vendor: 3,925 bytes, lines 38720-38839
38720/***/ "./node_modules/moment/locale/ca.js":
38721/*!******************************************!*\
38722  !*** ./node_modules/moment/locale/ca.js ***!
38723  \******************************************/
38724/*! no static exports found */
38725/***/ (function(module, exports, __webpack_require__) {
38726
38727//! moment.js locale configuration
38728//! locale : Catalan [ca]
38729//! author : Juan G. Hurtado : https://github.com/juanghurtado
38730
38731;(function (global, factory) {
38732    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
38733   undefined
38734}(this, (function (moment) { 'use strict';
38735
38736    //! moment.js locale configuration
38737
38738    var ca = moment.defineLocale('ca', {
38739        months: {
38740            standalone:
38741                'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(
38742                    '_'
38743                ),
38744            format: "de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split(
38745                '_'
38746            ),
38747            isFormat: /D[oD]?(\s)+MMMM/,
38748        },
38749        monthsShort:
38750            'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(
38751                '_'
38752            ),
38753        monthsParseExact: true,
38754        weekdays:
38755            'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(
38756                '_'
38757            ),
38758        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
38759        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),
38760        weekdaysParseExact: true,
38761        longDateFormat: {
38762            LT: 'H:mm',
38763            LTS: 'H:mm:ss',
38764            L: 'DD/MM/YYYY',
38765            LL: 'D MMMM [de] YYYY',
38766            ll: 'D MMM YYYY',
38767            LLL: 'D MMMM [de] YYYY [a les] H:mm',
38768            lll: 'D MMM YYYY, H:mm',
38769            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',
38770            llll: 'ddd D MMM YYYY, H:mm',
38771        },
38772        calendar: {
38773            sameDay: function () {
38774                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
38775            },
38776            nextDay: function () {
38777                return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
38778            },
38779            nextWeek: function () {
38780                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
38781            },
38782            lastDay: function () {
38783                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
38784            },
38785            lastWeek: function () {
38786                return (
38787                    '[el] dddd [passat a ' +
38788                    (this.hours() !== 1 ? 'les' : 'la') +
38789                    '] LT'
38790                );
38791            },
38792            sameElse: 'L',
38793        },
38794        relativeTime: {
38795            future: "d'aquí %s",
38796            past: 'fa %s',
38797            s: 'uns segons',
38798            ss: '%d segons',
38799            m: 'un minut',
38800            mm: '%d minuts',
38801            h: 'una hora',
38802            hh: '%d hores',
38803            d: 'un dia',
38804            dd: '%d dies',
38805            M: 'un mes',
38806            MM: '%d mesos',
38807            y: 'un any',
38808            yy: '%d anys',
38809        },
38810        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
38811        ordinal: function (number, period) {
38812            var output =
38813                number === 1
38814                    ? 'r'
38815                    : number === 2
38816                      ? 'n'
38817                      : number === 3
38818                        ? 'r'
38819                        : number === 4
38820                          ? 't'
38821                          : 'è';
38822            if (period === 'w' || period === 'W') {
38823                output = 'a';
38824            }
38825            return number + output;
38826        },
38827        week: {
38828            dow: 1, // Monday is the first day of the week.
38829            doy: 4, // The week that contains Jan 4th is the first week of the year.
38830        },
38831    });
38832
38833    return ca;
38834
38835})));
38836
38837
38838/***/ }),
38839
vendor: 7,956 bytes, lines 38840-39040
38840/***/ "./node_modules/moment/locale/cs.js":
38841/*!******************************************!*\
38842  !*** ./node_modules/moment/locale/cs.js ***!
38843  \******************************************/
38844/*! no static exports found */
38845/***/ (function(module, exports, __webpack_require__) {
38846
38847//! moment.js locale configuration
38848//! locale : Czech [cs]
38849//! author : petrbela : https://github.com/petrbela
38850
38851;(function (global, factory) {
38852    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
38853   undefined
38854}(this, (function (moment) { 'use strict';
38855
38856    //! moment.js locale configuration
38857
38858    var months = {
38859            standalone:
38860                'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(
38861                    '_'
38862                ),
38863            format: 'ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince'.split(
38864                '_'
38865            ),
38866            isFormat: /DD?[o.]?(\[[^\[\]]*\]|\s)+MMMM/,
38867        },
38868        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),
38869        monthsParse = [
38870            /^led/i,
38871            /^úno/i,
38872            /^bře/i,
38873            /^dub/i,
38874            /^kvě/i,
38875            /^(čvn|červen$|června)/i,
38876            /^(čvc|červenec|července)/i,
38877            /^srp/i,
38878            /^zář/i,
38879            /^říj/i,
38880            /^lis/i,
38881            /^pro/i,
38882        ],
38883        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
38884        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
38885        monthsRegex =
38886            /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;
38887
38888    function plural(n) {
38889        return n > 1 && n < 5 && ~~(n / 10) !== 1;
38890    }
38891    function translate(number, withoutSuffix, key, isFuture) {
38892        var result = number + ' ';
38893        switch (key) {
38894            case 's': // a few seconds / in a few seconds / a few seconds ago
38895                return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';
38896            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
38897                if (withoutSuffix || isFuture) {
38898                    return result + (plural(number) ? 'sekundy' : 'sekund');
38899                } else {
38900                    return result + 'sekundami';
38901                }
38902            case 'm': // a minute / in a minute / a minute ago
38903                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';
38904            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
38905                if (withoutSuffix || isFuture) {
38906                    return result + (plural(number) ? 'minuty' : 'minut');
38907                } else {
38908                    return result + 'minutami';
38909                }
38910            case 'h': // an hour / in an hour / an hour ago
38911                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
38912            case 'hh': // 9 hours / in 9 hours / 9 hours ago
38913                if (withoutSuffix || isFuture) {
38914                    return result + (plural(number) ? 'hodiny' : 'hodin');
38915                } else {
38916                    return result + 'hodinami';
38917                }
38918            case 'd': // a day / in a day / a day ago
38919                return withoutSuffix || isFuture ? 'den' : 'dnem';
38920            case 'dd': // 9 days / in 9 days / 9 days ago
38921                if (withoutSuffix || isFuture) {
38922                    return result + (plural(number) ? 'dny' : 'dní');
38923                } else {
38924                    return result + 'dny';
38925                }
38926            case 'M': // a month / in a month / a month ago
38927                return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';
38928            case 'MM': // 9 months / in 9 months / 9 months ago
38929                if (withoutSuffix || isFuture) {
38930                    return result + (plural(number) ? 'měsíce' : 'měsíců');
38931                } else {
38932                    return result + 'měsíci';
38933                }
38934            case 'y': // a year / in a year / a year ago
38935                return withoutSuffix || isFuture ? 'rok' : 'rokem';
38936            case 'yy': // 9 years / in 9 years / 9 years ago
38937                if (withoutSuffix || isFuture) {
38938                    return result + (plural(number) ? 'roky' : 'let');
38939                } else {
38940                    return result + 'lety';
38941                }
38942        }
38943    }
38944
38945    var cs = moment.defineLocale('cs', {
38946        months: months,
38947        monthsShort: monthsShort,
38948        monthsRegex: monthsRegex,
38949        monthsShortRegex: monthsRegex,
38950        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
38951        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
38952        monthsStrictRegex:
38953            /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,
38954        monthsShortStrictRegex:
38955            /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,
38956        monthsParse: monthsParse,
38957        longMonthsParse: monthsParse,
38958        shortMonthsParse: monthsParse,
38959        weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
38960        weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),
38961        weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),
38962        longDateFormat: {
38963            LT: 'H:mm',
38964            LTS: 'H:mm:ss',
38965            L: 'DD.MM.YYYY',
38966            LL: 'D. MMMM YYYY',
38967            LLL: 'D. MMMM YYYY H:mm',
38968            LLLL: 'dddd D. MMMM YYYY H:mm',
38969            l: 'D. M. YYYY',
38970        },
38971        calendar: {
38972            sameDay: '[dnes v] LT',
38973            nextDay: '[zítra v] LT',
38974            nextWeek: function () {
38975                switch (this.day()) {
38976                    case 0:
38977                        return '[v neděli v] LT';
38978                    case 1:
38979                    case 2:
38980                        return '[v] dddd [v] LT';
38981                    case 3:
38982                        return '[ve středu v] LT';
38983                    case 4:
38984                        return '[ve čtvrtek v] LT';
38985                    case 5:
38986                        return '[v pátek v] LT';
38987                    case 6:
38988                        return '[v sobotu v] LT';
38989                }
38990            },
38991            lastDay: '[včera v] LT',
38992            lastWeek: function () {
38993                switch (this.day()) {
38994                    case 0:
38995                        return '[minulou neděli v] LT';
38996                    case 1:
38997                    case 2:
38998                        return '[minulé] dddd [v] LT';
38999                    case 3:
39000                        return '[minulou středu v] LT';
39001                    case 4:
39002                    case 5:
39003                        return '[minulý] dddd [v] LT';
39004                    case 6:
39005                        return '[minulou sobotu v] LT';
39006                }
39007            },
39008            sameElse: 'L',
39009        },
39010        relativeTime: {
39011            future: 'za %s',
39012            past: 'před %s',
39013            s: translate,
39014            ss: translate,
39015            m: translate,
39016            mm: translate,
39017            h: translate,
39018            hh: translate,
39019            d: translate,
39020            dd: translate,
39021            M: translate,
39022            MM: translate,
39023            y: translate,
39024            yy: translate,
39025        },
39026        dayOfMonthOrdinalParse: /\d{1,2}\./,
39027        ordinal: '%d.',
39028        week: {
39029            dow: 1, // Monday is the first day of the week.
39030            doy: 4, // The week that contains Jan 4th is the first week of the year.
39031        },
39032    });
39033
39034    return cs;
39035
39036})));
39037
39038
39039/***/ }),
39040
vendor: 3,067 bytes, lines 39041-39123
39041/***/ "./node_modules/moment/locale/cv.js":
39042/*!******************************************!*\
39043  !*** ./node_modules/moment/locale/cv.js ***!
39044  \******************************************/
39045/*! no static exports found */
39046/***/ (function(module, exports, __webpack_require__) {
39047
39048//! moment.js locale configuration
39049//! locale : Chuvash [cv]
39050//! author : Anatoly Mironov : https://github.com/mirontoli
39051
39052;(function (global, factory) {
39053    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
39054   undefined
39055}(this, (function (moment) { 'use strict';
39056
39057    //! moment.js locale configuration
39058
39059    var cv = moment.defineLocale('cv', {
39060        months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(
39061            '_'
39062        ),
39063        monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
39064        weekdays:
39065            'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(
39066                '_'
39067            ),
39068        weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
39069        weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
39070        longDateFormat: {
39071            LT: 'HH:mm',
39072            LTS: 'HH:mm:ss',
39073            L: 'DD-MM-YYYY',
39074            LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
39075            LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
39076            LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
39077        },
39078        calendar: {
39079            sameDay: '[Паян] LT [сехетре]',
39080            nextDay: '[Ыран] LT [сехетре]',
39081            lastDay: '[Ӗнер] LT [сехетре]',
39082            nextWeek: '[Ҫитес] dddd LT [сехетре]',
39083            lastWeek: '[Иртнӗ] dddd LT [сехетре]',
39084            sameElse: 'L',
39085        },
39086        relativeTime: {
39087            future: function (output) {
39088                var affix = /сехет$/i.exec(output)
39089                    ? 'рен'
39090                    : /ҫул$/i.exec(output)
39091                      ? 'тан'
39092                      : 'ран';
39093                return output + affix;
39094            },
39095            past: '%s каялла',
39096            s: 'пӗр-ик ҫеккунт',
39097            ss: '%d ҫеккунт',
39098            m: 'пӗр минут',
39099            mm: '%d минут',
39100            h: 'пӗр сехет',
39101            hh: '%d сехет',
39102            d: 'пӗр кун',
39103            dd: '%d кун',
39104            M: 'пӗр уйӑх',
39105            MM: '%d уйӑх',
39106            y: 'пӗр ҫул',
39107            yy: '%d ҫул',
39108        },
39109        dayOfMonthOrdinalParse: /\d{1,2}-мӗш/,
39110        ordinal: '%d-мӗш',
39111        week: {
39112            dow: 1, // Monday is the first day of the week.
39113            doy: 7, // The week that contains Jan 7th is the first week of the year.
39114        },
39115    });
39116
39117    return cv;
39118
39119})));
39120
39121
39122/***/ }),
39123
vendor: 3,692 bytes, lines 39124-39241
39124/***/ "./node_modules/moment/locale/cy.js":
39125/*!******************************************!*\
39126  !*** ./node_modules/moment/locale/cy.js ***!
39127  \******************************************/
39128/*! no static exports found */
39129/***/ (function(module, exports, __webpack_require__) {
39130
39131//! moment.js locale configuration
39132//! locale : Welsh [cy]
39133//! author : Robert Allen : https://github.com/robgallen
39134//! author : https://github.com/ryangreaves
39135
39136;(function (global, factory) {
39137    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
39138   undefined
39139}(this, (function (moment) { 'use strict';
39140
39141    //! moment.js locale configuration
39142
39143    var cy = moment.defineLocale('cy', {
39144        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(
39145            '_'
39146        ),
39147        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(
39148            '_'
39149        ),
39150        weekdays:
39151            'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(
39152                '_'
39153            ),
39154        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
39155        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
39156        weekdaysParseExact: true,
39157        // time formats are the same as en-gb
39158        longDateFormat: {
39159            LT: 'HH:mm',
39160            LTS: 'HH:mm:ss',
39161            L: 'DD/MM/YYYY',
39162            LL: 'D MMMM YYYY',
39163            LLL: 'D MMMM YYYY HH:mm',
39164            LLLL: 'dddd, D MMMM YYYY HH:mm',
39165        },
39166        calendar: {
39167            sameDay: '[Heddiw am] LT',
39168            nextDay: '[Yfory am] LT',
39169            nextWeek: 'dddd [am] LT',
39170            lastDay: '[Ddoe am] LT',
39171            lastWeek: 'dddd [diwethaf am] LT',
39172            sameElse: 'L',
39173        },
39174        relativeTime: {
39175            future: 'mewn %s',
39176            past: '%s yn ôl',
39177            s: 'ychydig eiliadau',
39178            ss: '%d eiliad',
39179            m: 'munud',
39180            mm: '%d munud',
39181            h: 'awr',
39182            hh: '%d awr',
39183            d: 'diwrnod',
39184            dd: '%d diwrnod',
39185            M: 'mis',
39186            MM: '%d mis',
39187            y: 'blwyddyn',
39188            yy: '%d flynedd',
39189        },
39190        dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
39191        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
39192        ordinal: function (number) {
39193            var b = number,
39194                output = '',
39195                lookup = [
39196                    '',
39197                    'af',
39198                    'il',
39199                    'ydd',
39200                    'ydd',
39201                    'ed',
39202                    'ed',
39203                    'ed',
39204                    'fed',
39205                    'fed',
39206                    'fed', // 1af to 10fed
39207                    'eg',
39208                    'fed',
39209                    'eg',
39210                    'eg',
39211                    'fed',
39212                    'eg',
39213                    'eg',
39214                    'fed',
39215                    'eg',
39216                    'fed', // 11eg to 20fed
39217                ];
39218            if (b > 20) {
39219                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
39220                    output = 'fed'; // not 30ain, 70ain or 90ain
39221                } else {
39222                    output = 'ain';
39223                }
39224            } else if (b > 0) {
39225                output = lookup[b];
39226            }
39227            return number + output;
39228        },
39229        week: {
39230            dow: 1, // Monday is the first day of the week.
39231            doy: 4, // The week that contains Jan 4th is the first week of the year.
39232        },
39233    });
39234
39235    return cy;
39236
39237})));
39238
39239
39240/***/ }),
39241
vendor: 2,311 bytes, lines 39242-39314
39242/***/ "./node_modules/moment/locale/da.js":
39243/*!******************************************!*\
39244  !*** ./node_modules/moment/locale/da.js ***!
39245  \******************************************/
39246/*! no static exports found */
39247/***/ (function(module, exports, __webpack_require__) {
39248
39249//! moment.js locale configuration
39250//! locale : Danish [da]
39251//! author : Ulrik Nielsen : https://github.com/mrbase
39252
39253;(function (global, factory) {
39254    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
39255   undefined
39256}(this, (function (moment) { 'use strict';
39257
39258    //! moment.js locale configuration
39259
39260    var da = moment.defineLocale('da', {
39261        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(
39262            '_'
39263        ),
39264        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
39265        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
39266        weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),
39267        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
39268        longDateFormat: {
39269            LT: 'HH:mm',
39270            LTS: 'HH:mm:ss',
39271            L: 'DD.MM.YYYY',
39272            LL: 'D. MMMM YYYY',
39273            LLL: 'D. MMMM YYYY HH:mm',
39274            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',
39275        },
39276        calendar: {
39277            sameDay: '[i dag kl.] LT',
39278            nextDay: '[i morgen kl.] LT',
39279            nextWeek: 'på dddd [kl.] LT',
39280            lastDay: '[i går kl.] LT',
39281            lastWeek: '[i] dddd[s kl.] LT',
39282            sameElse: 'L',
39283        },
39284        relativeTime: {
39285            future: 'om %s',
39286            past: '%s siden',
39287            s: 'få sekunder',
39288            ss: '%d sekunder',
39289            m: 'et minut',
39290            mm: '%d minutter',
39291            h: 'en time',
39292            hh: '%d timer',
39293            d: 'en dag',
39294            dd: '%d dage',
39295            M: 'en måned',
39296            MM: '%d måneder',
39297            y: 'et år',
39298            yy: '%d år',
39299        },
39300        dayOfMonthOrdinalParse: /\d{1,2}\./,
39301        ordinal: '%d.',
39302        week: {
39303            dow: 1, // Monday is the first day of the week.
39304            doy: 4, // The week that contains Jan 4th is the first week of the year.
39305        },
39306    });
39307
39308    return da;
39309
39310})));
39311
39312
39313/***/ }),
39314
vendor: 3,421 bytes, lines 39315-39413
39315/***/ "./node_modules/moment/locale/de-at.js":
39316/*!*********************************************!*\
39317  !*** ./node_modules/moment/locale/de-at.js ***!
39318  \*********************************************/
39319/*! no static exports found */
39320/***/ (function(module, exports, __webpack_require__) {
39321
39322//! moment.js locale configuration
39323//! locale : German (Austria) [de-at]
39324//! author : lluchs : https://github.com/lluchs
39325//! author: Menelion Elensúle: https://github.com/Oire
39326//! author : Martin Groller : https://github.com/MadMG
39327//! author : Mikolaj Dadela : https://github.com/mik01aj
39328
39329;(function (global, factory) {
39330    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
39331   undefined
39332}(this, (function (moment) { 'use strict';
39333
39334    //! moment.js locale configuration
39335
39336    function processRelativeTime(number, withoutSuffix, key, isFuture) {
39337        var format = {
39338            m: ['eine Minute', 'einer Minute'],
39339            h: ['eine Stunde', 'einer Stunde'],
39340            d: ['ein Tag', 'einem Tag'],
39341            dd: [number + ' Tage', number + ' Tagen'],
39342            w: ['eine Woche', 'einer Woche'],
39343            M: ['ein Monat', 'einem Monat'],
39344            MM: [number + ' Monate', number + ' Monaten'],
39345            y: ['ein Jahr', 'einem Jahr'],
39346            yy: [number + ' Jahre', number + ' Jahren'],
39347        };
39348        return withoutSuffix ? format[key][0] : format[key][1];
39349    }
39350
39351    var deAt = moment.defineLocale('de-at', {
39352        months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
39353            '_'
39354        ),
39355        monthsShort:
39356            'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
39357        monthsParseExact: true,
39358        weekdays:
39359            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
39360                '_'
39361            ),
39362        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
39363        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
39364        weekdaysParseExact: true,
39365        longDateFormat: {
39366            LT: 'HH:mm',
39367            LTS: 'HH:mm:ss',
39368            L: 'DD.MM.YYYY',
39369            LL: 'D. MMMM YYYY',
39370            LLL: 'D. MMMM YYYY HH:mm',
39371            LLLL: 'dddd, D. MMMM YYYY HH:mm',
39372        },
39373        calendar: {
39374            sameDay: '[heute um] LT [Uhr]',
39375            sameElse: 'L',
39376            nextDay: '[morgen um] LT [Uhr]',
39377            nextWeek: 'dddd [um] LT [Uhr]',
39378            lastDay: '[gestern um] LT [Uhr]',
39379            lastWeek: '[letzten] dddd [um] LT [Uhr]',
39380        },
39381        relativeTime: {
39382            future: 'in %s',
39383            past: 'vor %s',
39384            s: 'ein paar Sekunden',
39385            ss: '%d Sekunden',
39386            m: processRelativeTime,
39387            mm: '%d Minuten',
39388            h: processRelativeTime,
39389            hh: '%d Stunden',
39390            d: processRelativeTime,
39391            dd: processRelativeTime,
39392            w: processRelativeTime,
39393            ww: '%d Wochen',
39394            M: processRelativeTime,
39395            MM: processRelativeTime,
39396            y: processRelativeTime,
39397            yy: processRelativeTime,
39398        },
39399        dayOfMonthOrdinalParse: /\d{1,2}\./,
39400        ordinal: '%d.',
39401        week: {
39402            dow: 1, // Monday is the first day of the week.
39403            doy: 4, // The week that contains Jan 4th is the first week of the year.
39404        },
39405    });
39406
39407    return deAt;
39408
39409})));
39410
39411
39412/***/ }),
39413
vendor: 3,256 bytes, lines 39414-39509
39414/***/ "./node_modules/moment/locale/de-ch.js":
39415/*!*********************************************!*\
39416  !*** ./node_modules/moment/locale/de-ch.js ***!
39417  \*********************************************/
39418/*! no static exports found */
39419/***/ (function(module, exports, __webpack_require__) {
39420
39421//! moment.js locale configuration
39422//! locale : German (Switzerland) [de-ch]
39423//! author : sschueller : https://github.com/sschueller
39424
39425;(function (global, factory) {
39426    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
39427   undefined
39428}(this, (function (moment) { 'use strict';
39429
39430    //! moment.js locale configuration
39431
39432    function processRelativeTime(number, withoutSuffix, key, isFuture) {
39433        var format = {
39434            m: ['eine Minute', 'einer Minute'],
39435            h: ['eine Stunde', 'einer Stunde'],
39436            d: ['ein Tag', 'einem Tag'],
39437            dd: [number + ' Tage', number + ' Tagen'],
39438            w: ['eine Woche', 'einer Woche'],
39439            M: ['ein Monat', 'einem Monat'],
39440            MM: [number + ' Monate', number + ' Monaten'],
39441            y: ['ein Jahr', 'einem Jahr'],
39442            yy: [number + ' Jahre', number + ' Jahren'],
39443        };
39444        return withoutSuffix ? format[key][0] : format[key][1];
39445    }
39446
39447    var deCh = moment.defineLocale('de-ch', {
39448        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
39449            '_'
39450        ),
39451        monthsShort:
39452            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
39453        monthsParseExact: true,
39454        weekdays:
39455            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
39456                '_'
39457            ),
39458        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
39459        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
39460        weekdaysParseExact: true,
39461        longDateFormat: {
39462            LT: 'HH:mm',
39463            LTS: 'HH:mm:ss',
39464            L: 'DD.MM.YYYY',
39465            LL: 'D. MMMM YYYY',
39466            LLL: 'D. MMMM YYYY HH:mm',
39467            LLLL: 'dddd, D. MMMM YYYY HH:mm',
39468        },
39469        calendar: {
39470            sameDay: '[heute um] LT [Uhr]',
39471            sameElse: 'L',
39472            nextDay: '[morgen um] LT [Uhr]',
39473            nextWeek: 'dddd [um] LT [Uhr]',
39474            lastDay: '[gestern um] LT [Uhr]',
39475            lastWeek: '[letzten] dddd [um] LT [Uhr]',
39476        },
39477        relativeTime: {
39478            future: 'in %s',
39479            past: 'vor %s',
39480            s: 'ein paar Sekunden',
39481            ss: '%d Sekunden',
39482            m: processRelativeTime,
39483            mm: '%d Minuten',
39484            h: processRelativeTime,
39485            hh: '%d Stunden',
39486            d: processRelativeTime,
39487            dd: processRelativeTime,
39488            w: processRelativeTime,
39489            ww: '%d Wochen',
39490            M: processRelativeTime,
39491            MM: processRelativeTime,
39492            y: processRelativeTime,
39493            yy: processRelativeTime,
39494        },
39495        dayOfMonthOrdinalParse: /\d{1,2}\./,
39496        ordinal: '%d.',
39497        week: {
39498            dow: 1, // Monday is the first day of the week.
39499            doy: 4, // The week that contains Jan 4th is the first week of the year.
39500        },
39501    });
39502
39503    return deCh;
39504
39505})));
39506
39507
39508/***/ }),
39509
vendor: 3,332 bytes, lines 39510-39607
39510/***/ "./node_modules/moment/locale/de.js":
39511/*!******************************************!*\
39512  !*** ./node_modules/moment/locale/de.js ***!
39513  \******************************************/
39514/*! no static exports found */
39515/***/ (function(module, exports, __webpack_require__) {
39516
39517//! moment.js locale configuration
39518//! locale : German [de]
39519//! author : lluchs : https://github.com/lluchs
39520//! author: Menelion Elensúle: https://github.com/Oire
39521//! author : Mikolaj Dadela : https://github.com/mik01aj
39522
39523;(function (global, factory) {
39524    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
39525   undefined
39526}(this, (function (moment) { 'use strict';
39527
39528    //! moment.js locale configuration
39529
39530    function processRelativeTime(number, withoutSuffix, key, isFuture) {
39531        var format = {
39532            m: ['eine Minute', 'einer Minute'],
39533            h: ['eine Stunde', 'einer Stunde'],
39534            d: ['ein Tag', 'einem Tag'],
39535            dd: [number + ' Tage', number + ' Tagen'],
39536            w: ['eine Woche', 'einer Woche'],
39537            M: ['ein Monat', 'einem Monat'],
39538            MM: [number + ' Monate', number + ' Monaten'],
39539            y: ['ein Jahr', 'einem Jahr'],
39540            yy: [number + ' Jahre', number + ' Jahren'],
39541        };
39542        return withoutSuffix ? format[key][0] : format[key][1];
39543    }
39544
39545    var de = moment.defineLocale('de', {
39546        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
39547            '_'
39548        ),
39549        monthsShort:
39550            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
39551        monthsParseExact: true,
39552        weekdays:
39553            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
39554                '_'
39555            ),
39556        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
39557        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
39558        weekdaysParseExact: true,
39559        longDateFormat: {
39560            LT: 'HH:mm',
39561            LTS: 'HH:mm:ss',
39562            L: 'DD.MM.YYYY',
39563            LL: 'D. MMMM YYYY',
39564            LLL: 'D. MMMM YYYY HH:mm',
39565            LLLL: 'dddd, D. MMMM YYYY HH:mm',
39566        },
39567        calendar: {
39568            sameDay: '[heute um] LT [Uhr]',
39569            sameElse: 'L',
39570            nextDay: '[morgen um] LT [Uhr]',
39571            nextWeek: 'dddd [um] LT [Uhr]',
39572            lastDay: '[gestern um] LT [Uhr]',
39573            lastWeek: '[letzten] dddd [um] LT [Uhr]',
39574        },
39575        relativeTime: {
39576            future: 'in %s',
39577            past: 'vor %s',
39578            s: 'ein paar Sekunden',
39579            ss: '%d Sekunden',
39580            m: processRelativeTime,
39581            mm: '%d Minuten',
39582            h: processRelativeTime,
39583            hh: '%d Stunden',
39584            d: processRelativeTime,
39585            dd: processRelativeTime,
39586            w: processRelativeTime,
39587            ww: '%d Wochen',
39588            M: processRelativeTime,
39589            MM: processRelativeTime,
39590            y: processRelativeTime,
39591            yy: processRelativeTime,
39592        },
39593        dayOfMonthOrdinalParse: /\d{1,2}\./,
39594        ordinal: '%d.',
39595        week: {
39596            dow: 1, // Monday is the first day of the week.
39597            doy: 4, // The week that contains Jan 4th is the first week of the year.
39598        },
39599    });
39600
39601    return de;
39602
39603})));
39604
39605
39606/***/ }),
39607
vendor: 3,290 bytes, lines 39608-39717
39608/***/ "./node_modules/moment/locale/dv.js":
39609/*!******************************************!*\
39610  !*** ./node_modules/moment/locale/dv.js ***!
39611  \******************************************/
39612/*! no static exports found */
39613/***/ (function(module, exports, __webpack_require__) {
39614
39615//! moment.js locale configuration
39616//! locale : Maldivian [dv]
39617//! author : Jawish Hameed : https://github.com/jawish
39618
39619;(function (global, factory) {
39620    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
39621   undefined
39622}(this, (function (moment) { 'use strict';
39623
39624    //! moment.js locale configuration
39625
39626    var months = [
39627            'ޖެނުއަރީ',
39628            'ފެބްރުއަރީ',
39629            'މާރިޗު',
39630            'އޭޕްރީލު',
39631            'މޭ',
39632            'ޖޫން',
39633            'ޖުލައި',
39634            'އޯގަސްޓު',
39635            'ސެޕްޓެމްބަރު',
39636            'އޮކްޓޯބަރު',
39637            'ނޮވެމްބަރު',
39638            'ޑިސެމްބަރު',
39639        ],
39640        weekdays = [
39641            'އާދިއްތަ',
39642            'ހޯމަ',
39643            'އަންގާރަ',
39644            'ބުދަ',
39645            'ބުރާސްފަތި',
39646            'ހުކުރު',
39647            'ހޮނިހިރު',
39648        ];
39649
39650    var dv = moment.defineLocale('dv', {
39651        months: months,
39652        monthsShort: months,
39653        weekdays: weekdays,
39654        weekdaysShort: weekdays,
39655        weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
39656        longDateFormat: {
39657            LT: 'HH:mm',
39658            LTS: 'HH:mm:ss',
39659            L: 'D/M/YYYY',
39660            LL: 'D MMMM YYYY',
39661            LLL: 'D MMMM YYYY HH:mm',
39662            LLLL: 'dddd D MMMM YYYY HH:mm',
39663        },
39664        meridiemParse: /މކ|މފ/,
39665        isPM: function (input) {
39666            return 'މފ' === input;
39667        },
39668        meridiem: function (hour, minute, isLower) {
39669            if (hour < 12) {
39670                return 'މކ';
39671            } else {
39672                return 'މފ';
39673            }
39674        },
39675        calendar: {
39676            sameDay: '[މިއަދު] LT',
39677            nextDay: '[މާދަމާ] LT',
39678            nextWeek: 'dddd LT',
39679            lastDay: '[އިއްޔެ] LT',
39680            lastWeek: '[ފާއިތުވި] dddd LT',
39681            sameElse: 'L',
39682        },
39683        relativeTime: {
39684            future: 'ތެރޭގައި %s',
39685            past: 'ކުރިން %s',
39686            s: 'ސިކުންތުކޮޅެއް',
39687            ss: 'd% ސިކުންތު',
39688            m: 'މިނިޓެއް',
39689            mm: 'މިނިޓު %d',
39690            h: 'ގަޑިއިރެއް',
39691            hh: 'ގަޑިއިރު %d',
39692            d: 'ދުވަހެއް',
39693            dd: 'ދުވަސް %d',
39694            M: 'މަހެއް',
39695            MM: 'މަސް %d',
39696            y: 'އަހަރެއް',
39697            yy: 'އަހަރު %d',
39698        },
39699        preparse: function (string) {
39700            return string.replace(/،/g, ',');
39701        },
39702        postformat: function (string) {
39703            return string.replace(/,/g, '،');
39704        },
39705        week: {
39706            dow: 7, // Sunday is the first day of the week.
39707            doy: 12, // The week that contains Jan 12th is the first week of the year.
39708        },
39709    });
39710
39711    return dv;
39712
39713})));
39714
39715
39716/***/ }),
39717
vendor: 4,767 bytes, lines 39718-39843
39718/***/ "./node_modules/moment/locale/el.js":
39719/*!******************************************!*\
39720  !*** ./node_modules/moment/locale/el.js ***!
39721  \******************************************/
39722/*! no static exports found */
39723/***/ (function(module, exports, __webpack_require__) {
39724
39725//! moment.js locale configuration
39726//! locale : Greek [el]
39727//! author : Aggelos Karalias : https://github.com/mehiel
39728
39729;(function (global, factory) {
39730    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
39731   undefined
39732}(this, (function (moment) { 'use strict';
39733
39734    //! moment.js locale configuration
39735
39736    function isFunction(input) {
39737        return (
39738            (typeof Function !== 'undefined' && input instanceof Function) ||
39739            Object.prototype.toString.call(input) === '[object Function]'
39740        );
39741    }
39742
39743    var el = moment.defineLocale('el', {
39744        monthsNominativeEl:
39745            'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(
39746                '_'
39747            ),
39748        monthsGenitiveEl:
39749            'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(
39750                '_'
39751            ),
39752        months: function (momentToFormat, format) {
39753            if (!momentToFormat) {
39754                return this._monthsNominativeEl;
39755            } else if (
39756                typeof format === 'string' &&
39757                /D/.test(format.substring(0, format.indexOf('MMMM')))
39758            ) {
39759                // if there is a day number before 'MMMM'
39760                return this._monthsGenitiveEl[momentToFormat.month()];
39761            } else {
39762                return this._monthsNominativeEl[momentToFormat.month()];
39763            }
39764        },
39765        monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
39766        weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(
39767            '_'
39768        ),
39769        weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
39770        weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
39771        meridiem: function (hours, minutes, isLower) {
39772            if (hours > 11) {
39773                return isLower ? 'μμ' : 'ΜΜ';
39774            } else {
39775                return isLower ? 'πμ' : 'ΠΜ';
39776            }
39777        },
39778        isPM: function (input) {
39779            return (input + '').toLowerCase()[0] === 'μ';
39780        },
39781        meridiemParse: /[ΠΜ]\.?Μ?\.?/i,
39782        longDateFormat: {
39783            LT: 'h:mm A',
39784            LTS: 'h:mm:ss A',
39785            L: 'DD/MM/YYYY',
39786            LL: 'D MMMM YYYY',
39787            LLL: 'D MMMM YYYY h:mm A',
39788            LLLL: 'dddd, D MMMM YYYY h:mm A',
39789        },
39790        calendarEl: {
39791            sameDay: '[Σήμερα {}] LT',
39792            nextDay: '[Αύριο {}] LT',
39793            nextWeek: 'dddd [{}] LT',
39794            lastDay: '[Χθες {}] LT',
39795            lastWeek: function () {
39796                switch (this.day()) {
39797                    case 6:
39798                        return '[το προηγούμενο] dddd [{}] LT';
39799                    default:
39800                        return '[την προηγούμενη] dddd [{}] LT';
39801                }
39802            },
39803            sameElse: 'L',
39804        },
39805        calendar: function (key, mom) {
39806            var output = this._calendarEl[key],
39807                hours = mom && mom.hours();
39808            if (isFunction(output)) {
39809                output = output.apply(mom);
39810            }
39811            return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');
39812        },
39813        relativeTime: {
39814            future: 'σε %s',
39815            past: '%s πριν',
39816            s: 'λίγα δευτερόλεπτα',
39817            ss: '%d δευτερόλεπτα',
39818            m: 'ένα λεπτό',
39819            mm: '%d λεπτά',
39820            h: 'μία ώρα',
39821            hh: '%d ώρες',
39822            d: 'μία μέρα',
39823            dd: '%d μέρες',
39824            M: 'ένας μήνας',
39825            MM: '%d μήνες',
39826            y: 'ένας χρόνος',
39827            yy: '%d χρόνια',
39828        },
39829        dayOfMonthOrdinalParse: /\d{1,2}η/,
39830        ordinal: '%dη',
39831        week: {
39832            dow: 1, // Monday is the first day of the week.
39833            doy: 4, // The week that contains Jan 4st is the first week of the year.
39834        },
39835    });
39836
39837    return el;
39838
39839})));
39840
39841
39842/***/ }),
39843
vendor: 2,811 bytes, lines 39844-39931
39844/***/ "./node_modules/moment/locale/en-au.js":
39845/*!*********************************************!*\
39846  !*** ./node_modules/moment/locale/en-au.js ***!
39847  \*********************************************/
39848/*! no static exports found */
39849/***/ (function(module, exports, __webpack_require__) {
39850
39851//! moment.js locale configuration
39852//! locale : English (Australia) [en-au]
39853//! author : Jared Morse : https://github.com/jarcoal
39854
39855;(function (global, factory) {
39856    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
39857   undefined
39858}(this, (function (moment) { 'use strict';
39859
39860    //! moment.js locale configuration
39861
39862    var enAu = moment.defineLocale('en-au', {
39863        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
39864            '_'
39865        ),
39866        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
39867        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
39868            '_'
39869        ),
39870        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
39871        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
39872        longDateFormat: {
39873            LT: 'h:mm A',
39874            LTS: 'h:mm:ss A',
39875            L: 'DD/MM/YYYY',
39876            LL: 'D MMMM YYYY',
39877            LLL: 'D MMMM YYYY h:mm A',
39878            LLLL: 'dddd, D MMMM YYYY h:mm A',
39879        },
39880        calendar: {
39881            sameDay: '[Today at] LT',
39882            nextDay: '[Tomorrow at] LT',
39883            nextWeek: 'dddd [at] LT',
39884            lastDay: '[Yesterday at] LT',
39885            lastWeek: '[Last] dddd [at] LT',
39886            sameElse: 'L',
39887        },
39888        relativeTime: {
39889            future: 'in %s',
39890            past: '%s ago',
39891            s: 'a few seconds',
39892            ss: '%d seconds',
39893            m: 'a minute',
39894            mm: '%d minutes',
39895            h: 'an hour',
39896            hh: '%d hours',
39897            d: 'a day',
39898            dd: '%d days',
39899            M: 'a month',
39900            MM: '%d months',
39901            y: 'a year',
39902            yy: '%d years',
39903        },
39904        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
39905        ordinal: function (number) {
39906            var b = number % 10,
39907                output =
39908                    ~~((number % 100) / 10) === 1
39909                        ? 'th'
39910                        : b === 1
39911                          ? 'st'
39912                          : b === 2
39913                            ? 'nd'
39914                            : b === 3
39915                              ? 'rd'
39916                              : 'th';
39917            return number + output;
39918        },
39919        week: {
39920            dow: 0, // Sunday is the first day of the week.
39921            doy: 4, // The week that contains Jan 4th is the first week of the year.
39922        },
39923    });
39924
39925    return enAu;
39926
39927})));
39928
39929
39930/***/ }),
39931
vendor: 2,644 bytes, lines 39932-40015
39932/***/ "./node_modules/moment/locale/en-ca.js":
39933/*!*********************************************!*\
39934  !*** ./node_modules/moment/locale/en-ca.js ***!
39935  \*********************************************/
39936/*! no static exports found */
39937/***/ (function(module, exports, __webpack_require__) {
39938
39939//! moment.js locale configuration
39940//! locale : English (Canada) [en-ca]
39941//! author : Jonathan Abourbih : https://github.com/jonbca
39942
39943;(function (global, factory) {
39944    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
39945   undefined
39946}(this, (function (moment) { 'use strict';
39947
39948    //! moment.js locale configuration
39949
39950    var enCa = moment.defineLocale('en-ca', {
39951        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
39952            '_'
39953        ),
39954        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
39955        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
39956            '_'
39957        ),
39958        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
39959        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
39960        longDateFormat: {
39961            LT: 'h:mm A',
39962            LTS: 'h:mm:ss A',
39963            L: 'YYYY-MM-DD',
39964            LL: 'MMMM D, YYYY',
39965            LLL: 'MMMM D, YYYY h:mm A',
39966            LLLL: 'dddd, MMMM D, YYYY h:mm A',
39967        },
39968        calendar: {
39969            sameDay: '[Today at] LT',
39970            nextDay: '[Tomorrow at] LT',
39971            nextWeek: 'dddd [at] LT',
39972            lastDay: '[Yesterday at] LT',
39973            lastWeek: '[Last] dddd [at] LT',
39974            sameElse: 'L',
39975        },
39976        relativeTime: {
39977            future: 'in %s',
39978            past: '%s ago',
39979            s: 'a few seconds',
39980            ss: '%d seconds',
39981            m: 'a minute',
39982            mm: '%d minutes',
39983            h: 'an hour',
39984            hh: '%d hours',
39985            d: 'a day',
39986            dd: '%d days',
39987            M: 'a month',
39988            MM: '%d months',
39989            y: 'a year',
39990            yy: '%d years',
39991        },
39992        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
39993        ordinal: function (number) {
39994            var b = number % 10,
39995                output =
39996                    ~~((number % 100) / 10) === 1
39997                        ? 'th'
39998                        : b === 1
39999                          ? 'st'
40000                          : b === 2
40001                            ? 'nd'
40002                            : b === 3
40003                              ? 'rd'
40004                              : 'th';
40005            return number + output;
40006        },
40007    });
40008
40009    return enCa;
40010
40011})));
40012
40013
40014/***/ }),
40015
vendor: 2,817 bytes, lines 40016-40103
40016/***/ "./node_modules/moment/locale/en-gb.js":
40017/*!*********************************************!*\
40018  !*** ./node_modules/moment/locale/en-gb.js ***!
40019  \*********************************************/
40020/*! no static exports found */
40021/***/ (function(module, exports, __webpack_require__) {
40022
40023//! moment.js locale configuration
40024//! locale : English (United Kingdom) [en-gb]
40025//! author : Chris Gedrim : https://github.com/chrisgedrim
40026
40027;(function (global, factory) {
40028    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
40029   undefined
40030}(this, (function (moment) { 'use strict';
40031
40032    //! moment.js locale configuration
40033
40034    var enGb = moment.defineLocale('en-gb', {
40035        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
40036            '_'
40037        ),
40038        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
40039        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
40040            '_'
40041        ),
40042        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
40043        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
40044        longDateFormat: {
40045            LT: 'HH:mm',
40046            LTS: 'HH:mm:ss',
40047            L: 'DD/MM/YYYY',
40048            LL: 'D MMMM YYYY',
40049            LLL: 'D MMMM YYYY HH:mm',
40050            LLLL: 'dddd, D MMMM YYYY HH:mm',
40051        },
40052        calendar: {
40053            sameDay: '[Today at] LT',
40054            nextDay: '[Tomorrow at] LT',
40055            nextWeek: 'dddd [at] LT',
40056            lastDay: '[Yesterday at] LT',
40057            lastWeek: '[Last] dddd [at] LT',
40058            sameElse: 'L',
40059        },
40060        relativeTime: {
40061            future: 'in %s',
40062            past: '%s ago',
40063            s: 'a few seconds',
40064            ss: '%d seconds',
40065            m: 'a minute',
40066            mm: '%d minutes',
40067            h: 'an hour',
40068            hh: '%d hours',
40069            d: 'a day',
40070            dd: '%d days',
40071            M: 'a month',
40072            MM: '%d months',
40073            y: 'a year',
40074            yy: '%d years',
40075        },
40076        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
40077        ordinal: function (number) {
40078            var b = number % 10,
40079                output =
40080                    ~~((number % 100) / 10) === 1
40081                        ? 'th'
40082                        : b === 1
40083                          ? 'st'
40084                          : b === 2
40085                            ? 'nd'
40086                            : b === 3
40087                              ? 'rd'
40088                              : 'th';
40089            return number + output;
40090        },
40091        week: {
40092            dow: 1, // Monday is the first day of the week.
40093            doy: 4, // The week that contains Jan 4th is the first week of the year.
40094        },
40095    });
40096
40097    return enGb;
40098
40099})));
40100
40101
40102/***/ }),
40103
vendor: 2,815 bytes, lines 40104-40191
40104/***/ "./node_modules/moment/locale/en-ie.js":
40105/*!*********************************************!*\
40106  !*** ./node_modules/moment/locale/en-ie.js ***!
40107  \*********************************************/
40108/*! no static exports found */
40109/***/ (function(module, exports, __webpack_require__) {
40110
40111//! moment.js locale configuration
40112//! locale : English (Ireland) [en-ie]
40113//! author : Chris Cartlidge : https://github.com/chriscartlidge
40114
40115;(function (global, factory) {
40116    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
40117   undefined
40118}(this, (function (moment) { 'use strict';
40119
40120    //! moment.js locale configuration
40121
40122    var enIe = moment.defineLocale('en-ie', {
40123        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
40124            '_'
40125        ),
40126        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
40127        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
40128            '_'
40129        ),
40130        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
40131        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
40132        longDateFormat: {
40133            LT: 'HH:mm',
40134            LTS: 'HH:mm:ss',
40135            L: 'DD/MM/YYYY',
40136            LL: 'D MMMM YYYY',
40137            LLL: 'D MMMM YYYY HH:mm',
40138            LLLL: 'dddd D MMMM YYYY HH:mm',
40139        },
40140        calendar: {
40141            sameDay: '[Today at] LT',
40142            nextDay: '[Tomorrow at] LT',
40143            nextWeek: 'dddd [at] LT',
40144            lastDay: '[Yesterday at] LT',
40145            lastWeek: '[Last] dddd [at] LT',
40146            sameElse: 'L',
40147        },
40148        relativeTime: {
40149            future: 'in %s',
40150            past: '%s ago',
40151            s: 'a few seconds',
40152            ss: '%d seconds',
40153            m: 'a minute',
40154            mm: '%d minutes',
40155            h: 'an hour',
40156            hh: '%d hours',
40157            d: 'a day',
40158            dd: '%d days',
40159            M: 'a month',
40160            MM: '%d months',
40161            y: 'a year',
40162            yy: '%d years',
40163        },
40164        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
40165        ordinal: function (number) {
40166            var b = number % 10,
40167                output =
40168                    ~~((number % 100) / 10) === 1
40169                        ? 'th'
40170                        : b === 1
40171                          ? 'st'
40172                          : b === 2
40173                            ? 'nd'
40174                            : b === 3
40175                              ? 'rd'
40176                              : 'th';
40177            return number + output;
40178        },
40179        week: {
40180            dow: 1, // Monday is the first day of the week.
40181            doy: 4, // The week that contains Jan 4th is the first week of the year.
40182        },
40183    });
40184
40185    return enIe;
40186
40187})));
40188
40189
40190/***/ }),
40191
vendor: 2,637 bytes, lines 40192-40275
40192/***/ "./node_modules/moment/locale/en-il.js":
40193/*!*********************************************!*\
40194  !*** ./node_modules/moment/locale/en-il.js ***!
40195  \*********************************************/
40196/*! no static exports found */
40197/***/ (function(module, exports, __webpack_require__) {
40198
40199//! moment.js locale configuration
40200//! locale : English (Israel) [en-il]
40201//! author : Chris Gedrim : https://github.com/chrisgedrim
40202
40203;(function (global, factory) {
40204    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
40205   undefined
40206}(this, (function (moment) { 'use strict';
40207
40208    //! moment.js locale configuration
40209
40210    var enIl = moment.defineLocale('en-il', {
40211        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
40212            '_'
40213        ),
40214        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
40215        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
40216            '_'
40217        ),
40218        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
40219        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
40220        longDateFormat: {
40221            LT: 'HH:mm',
40222            LTS: 'HH:mm:ss',
40223            L: 'DD/MM/YYYY',
40224            LL: 'D MMMM YYYY',
40225            LLL: 'D MMMM YYYY HH:mm',
40226            LLLL: 'dddd, D MMMM YYYY HH:mm',
40227        },
40228        calendar: {
40229            sameDay: '[Today at] LT',
40230            nextDay: '[Tomorrow at] LT',
40231            nextWeek: 'dddd [at] LT',
40232            lastDay: '[Yesterday at] LT',
40233            lastWeek: '[Last] dddd [at] LT',
40234            sameElse: 'L',
40235        },
40236        relativeTime: {
40237            future: 'in %s',
40238            past: '%s ago',
40239            s: 'a few seconds',
40240            ss: '%d seconds',
40241            m: 'a minute',
40242            mm: '%d minutes',
40243            h: 'an hour',
40244            hh: '%d hours',
40245            d: 'a day',
40246            dd: '%d days',
40247            M: 'a month',
40248            MM: '%d months',
40249            y: 'a year',
40250            yy: '%d years',
40251        },
40252        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
40253        ordinal: function (number) {
40254            var b = number % 10,
40255                output =
40256                    ~~((number % 100) / 10) === 1
40257                        ? 'th'
40258                        : b === 1
40259                          ? 'st'
40260                          : b === 2
40261                            ? 'nd'
40262                            : b === 3
40263                              ? 'rd'
40264                              : 'th';
40265            return number + output;
40266        },
40267    });
40268
40269    return enIl;
40270
40271})));
40272
40273
40274/***/ }),
40275
vendor: 2,811 bytes, lines 40276-40363
40276/***/ "./node_modules/moment/locale/en-in.js":
40277/*!*********************************************!*\
40278  !*** ./node_modules/moment/locale/en-in.js ***!
40279  \*********************************************/
40280/*! no static exports found */
40281/***/ (function(module, exports, __webpack_require__) {
40282
40283//! moment.js locale configuration
40284//! locale : English (India) [en-in]
40285//! author : Jatin Agrawal : https://github.com/jatinag22
40286
40287;(function (global, factory) {
40288    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
40289   undefined
40290}(this, (function (moment) { 'use strict';
40291
40292    //! moment.js locale configuration
40293
40294    var enIn = moment.defineLocale('en-in', {
40295        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
40296            '_'
40297        ),
40298        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
40299        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
40300            '_'
40301        ),
40302        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
40303        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
40304        longDateFormat: {
40305            LT: 'h:mm A',
40306            LTS: 'h:mm:ss A',
40307            L: 'DD/MM/YYYY',
40308            LL: 'D MMMM YYYY',
40309            LLL: 'D MMMM YYYY h:mm A',
40310            LLLL: 'dddd, D MMMM YYYY h:mm A',
40311        },
40312        calendar: {
40313            sameDay: '[Today at] LT',
40314            nextDay: '[Tomorrow at] LT',
40315            nextWeek: 'dddd [at] LT',
40316            lastDay: '[Yesterday at] LT',
40317            lastWeek: '[Last] dddd [at] LT',
40318            sameElse: 'L',
40319        },
40320        relativeTime: {
40321            future: 'in %s',
40322            past: '%s ago',
40323            s: 'a few seconds',
40324            ss: '%d seconds',
40325            m: 'a minute',
40326            mm: '%d minutes',
40327            h: 'an hour',
40328            hh: '%d hours',
40329            d: 'a day',
40330            dd: '%d days',
40331            M: 'a month',
40332            MM: '%d months',
40333            y: 'a year',
40334            yy: '%d years',
40335        },
40336        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
40337        ordinal: function (number) {
40338            var b = number % 10,
40339                output =
40340                    ~~((number % 100) / 10) === 1
40341                        ? 'th'
40342                        : b === 1
40343                          ? 'st'
40344                          : b === 2
40345                            ? 'nd'
40346                            : b === 3
40347                              ? 'rd'
40348                              : 'th';
40349            return number + output;
40350        },
40351        week: {
40352            dow: 0, // Sunday is the first day of the week.
40353            doy: 6, // The week that contains Jan 1st is the first week of the year.
40354        },
40355    });
40356
40357    return enIn;
40358
40359})));
40360
40361
40362/***/ }),
40363
vendor: 2,820 bytes, lines 40364-40451
40364/***/ "./node_modules/moment/locale/en-nz.js":
40365/*!*********************************************!*\
40366  !*** ./node_modules/moment/locale/en-nz.js ***!
40367  \*********************************************/
40368/*! no static exports found */
40369/***/ (function(module, exports, __webpack_require__) {
40370
40371//! moment.js locale configuration
40372//! locale : English (New Zealand) [en-nz]
40373//! author : Luke McGregor : https://github.com/lukemcgregor
40374
40375;(function (global, factory) {
40376    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
40377   undefined
40378}(this, (function (moment) { 'use strict';
40379
40380    //! moment.js locale configuration
40381
40382    var enNz = moment.defineLocale('en-nz', {
40383        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
40384            '_'
40385        ),
40386        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
40387        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
40388            '_'
40389        ),
40390        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
40391        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
40392        longDateFormat: {
40393            LT: 'h:mm A',
40394            LTS: 'h:mm:ss A',
40395            L: 'DD/MM/YYYY',
40396            LL: 'D MMMM YYYY',
40397            LLL: 'D MMMM YYYY h:mm A',
40398            LLLL: 'dddd, D MMMM YYYY h:mm A',
40399        },
40400        calendar: {
40401            sameDay: '[Today at] LT',
40402            nextDay: '[Tomorrow at] LT',
40403            nextWeek: 'dddd [at] LT',
40404            lastDay: '[Yesterday at] LT',
40405            lastWeek: '[Last] dddd [at] LT',
40406            sameElse: 'L',
40407        },
40408        relativeTime: {
40409            future: 'in %s',
40410            past: '%s ago',
40411            s: 'a few seconds',
40412            ss: '%d seconds',
40413            m: 'a minute',
40414            mm: '%d minutes',
40415            h: 'an hour',
40416            hh: '%d hours',
40417            d: 'a day',
40418            dd: '%d days',
40419            M: 'a month',
40420            MM: '%d months',
40421            y: 'a year',
40422            yy: '%d years',
40423        },
40424        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
40425        ordinal: function (number) {
40426            var b = number % 10,
40427                output =
40428                    ~~((number % 100) / 10) === 1
40429                        ? 'th'
40430                        : b === 1
40431                          ? 'st'
40432                          : b === 2
40433                            ? 'nd'
40434                            : b === 3
40435                              ? 'rd'
40436                              : 'th';
40437            return number + output;
40438        },
40439        week: {
40440            dow: 1, // Monday is the first day of the week.
40441            doy: 4, // The week that contains Jan 4th is the first week of the year.
40442        },
40443    });
40444
40445    return enNz;
40446
40447})));
40448
40449
40450/***/ }),
40451
vendor: 2,829 bytes, lines 40452-40539
40452/***/ "./node_modules/moment/locale/en-sg.js":
40453/*!*********************************************!*\
40454  !*** ./node_modules/moment/locale/en-sg.js ***!
40455  \*********************************************/
40456/*! no static exports found */
40457/***/ (function(module, exports, __webpack_require__) {
40458
40459//! moment.js locale configuration
40460//! locale : English (Singapore) [en-sg]
40461//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension
40462
40463;(function (global, factory) {
40464    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
40465   undefined
40466}(this, (function (moment) { 'use strict';
40467
40468    //! moment.js locale configuration
40469
40470    var enSg = moment.defineLocale('en-sg', {
40471        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
40472            '_'
40473        ),
40474        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
40475        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
40476            '_'
40477        ),
40478        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
40479        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
40480        longDateFormat: {
40481            LT: 'HH:mm',
40482            LTS: 'HH:mm:ss',
40483            L: 'DD/MM/YYYY',
40484            LL: 'D MMMM YYYY',
40485            LLL: 'D MMMM YYYY HH:mm',
40486            LLLL: 'dddd, D MMMM YYYY HH:mm',
40487        },
40488        calendar: {
40489            sameDay: '[Today at] LT',
40490            nextDay: '[Tomorrow at] LT',
40491            nextWeek: 'dddd [at] LT',
40492            lastDay: '[Yesterday at] LT',
40493            lastWeek: '[Last] dddd [at] LT',
40494            sameElse: 'L',
40495        },
40496        relativeTime: {
40497            future: 'in %s',
40498            past: '%s ago',
40499            s: 'a few seconds',
40500            ss: '%d seconds',
40501            m: 'a minute',
40502            mm: '%d minutes',
40503            h: 'an hour',
40504            hh: '%d hours',
40505            d: 'a day',
40506            dd: '%d days',
40507            M: 'a month',
40508            MM: '%d months',
40509            y: 'a year',
40510            yy: '%d years',
40511        },
40512        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
40513        ordinal: function (number) {
40514            var b = number % 10,
40515                output =
40516                    ~~((number % 100) / 10) === 1
40517                        ? 'th'
40518                        : b === 1
40519                          ? 'st'
40520                          : b === 2
40521                            ? 'nd'
40522                            : b === 3
40523                              ? 'rd'
40524                              : 'th';
40525            return number + output;
40526        },
40527        week: {
40528            dow: 1, // Monday is the first day of the week.
40529            doy: 4, // The week that contains Jan 4th is the first week of the year.
40530        },
40531    });
40532
40533    return enSg;
40534
40535})));
40536
40537
40538/***/ }),
40539
vendor: 3,068 bytes, lines 40540-40627
40540/***/ "./node_modules/moment/locale/eo.js":
40541/*!******************************************!*\
40542  !*** ./node_modules/moment/locale/eo.js ***!
40543  \******************************************/
40544/*! no static exports found */
40545/***/ (function(module, exports, __webpack_require__) {
40546
40547//! moment.js locale configuration
40548//! locale : Esperanto [eo]
40549//! author : Colin Dean : https://github.com/colindean
40550//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia
40551//! comment : miestasmia corrected the translation by colindean
40552//! comment : Vivakvo corrected the translation by colindean and miestasmia
40553
40554;(function (global, factory) {
40555    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
40556   undefined
40557}(this, (function (moment) { 'use strict';
40558
40559    //! moment.js locale configuration
40560
40561    var eo = moment.defineLocale('eo', {
40562        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aÅ­gusto_septembro_oktobro_novembro_decembro'.split(
40563            '_'
40564        ),
40565        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aÅ­g_sept_okt_nov_dec'.split('_'),
40566        weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),
40567        weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),
40568        weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),
40569        longDateFormat: {
40570            LT: 'HH:mm',
40571            LTS: 'HH:mm:ss',
40572            L: 'YYYY-MM-DD',
40573            LL: '[la] D[-an de] MMMM, YYYY',
40574            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',
40575            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',
40576            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',
40577        },
40578        meridiemParse: /[ap]\.t\.m/i,
40579        isPM: function (input) {
40580            return input.charAt(0).toLowerCase() === 'p';
40581        },
40582        meridiem: function (hours, minutes, isLower) {
40583            if (hours > 11) {
40584                return isLower ? 'p.t.m.' : 'P.T.M.';
40585            } else {
40586                return isLower ? 'a.t.m.' : 'A.T.M.';
40587            }
40588        },
40589        calendar: {
40590            sameDay: '[HodiaÅ­ je] LT',
40591            nextDay: '[MorgaÅ­ je] LT',
40592            nextWeek: 'dddd[n je] LT',
40593            lastDay: '[HieraÅ­ je] LT',
40594            lastWeek: '[pasintan] dddd[n je] LT',
40595            sameElse: 'L',
40596        },
40597        relativeTime: {
40598            future: 'post %s',
40599            past: 'antaÅ­ %s',
40600            s: 'kelkaj sekundoj',
40601            ss: '%d sekundoj',
40602            m: 'unu minuto',
40603            mm: '%d minutoj',
40604            h: 'unu horo',
40605            hh: '%d horoj',
40606            d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo
40607            dd: '%d tagoj',
40608            M: 'unu monato',
40609            MM: '%d monatoj',
40610            y: 'unu jaro',
40611            yy: '%d jaroj',
40612        },
40613        dayOfMonthOrdinalParse: /\d{1,2}a/,
40614        ordinal: '%da',
40615        week: {
40616            dow: 1, // Monday is the first day of the week.
40617            doy: 7, // The week that contains Jan 7th is the first week of the year.
40618        },
40619    });
40620
40621    return eo;
40622
40623})));
40624
40625
40626/***/ }),
40627
vendor: 4,359 bytes, lines 40628-40755
40628/***/ "./node_modules/moment/locale/es-do.js":
40629/*!*********************************************!*\
40630  !*** ./node_modules/moment/locale/es-do.js ***!
40631  \*********************************************/
40632/*! no static exports found */
40633/***/ (function(module, exports, __webpack_require__) {
40634
40635//! moment.js locale configuration
40636//! locale : Spanish (Dominican Republic) [es-do]
40637
40638;(function (global, factory) {
40639    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
40640   undefined
40641}(this, (function (moment) { 'use strict';
40642
40643    //! moment.js locale configuration
40644
40645    var monthsShortDot =
40646            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
40647                '_'
40648            ),
40649        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
40650        monthsParse = [
40651            /^ene/i,
40652            /^feb/i,
40653            /^mar/i,
40654            /^abr/i,
40655            /^may/i,
40656            /^jun/i,
40657            /^jul/i,
40658            /^ago/i,
40659            /^sep/i,
40660            /^oct/i,
40661            /^nov/i,
40662            /^dic/i,
40663        ],
40664        monthsRegex =
40665            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
40666
40667    var esDo = moment.defineLocale('es-do', {
40668        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
40669            '_'
40670        ),
40671        monthsShort: function (m, format) {
40672            if (!m) {
40673                return monthsShortDot;
40674            } else if (/-MMM-/.test(format)) {
40675                return monthsShort[m.month()];
40676            } else {
40677                return monthsShortDot[m.month()];
40678            }
40679        },
40680        monthsRegex: monthsRegex,
40681        monthsShortRegex: monthsRegex,
40682        monthsStrictRegex:
40683            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
40684        monthsShortStrictRegex:
40685            /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
40686        monthsParse: monthsParse,
40687        longMonthsParse: monthsParse,
40688        shortMonthsParse: monthsParse,
40689        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
40690        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
40691        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
40692        weekdaysParseExact: true,
40693        longDateFormat: {
40694            LT: 'h:mm A',
40695            LTS: 'h:mm:ss A',
40696            L: 'DD/MM/YYYY',
40697            LL: 'D [de] MMMM [de] YYYY',
40698            LLL: 'D [de] MMMM [de] YYYY h:mm A',
40699            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
40700        },
40701        calendar: {
40702            sameDay: function () {
40703                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
40704            },
40705            nextDay: function () {
40706                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
40707            },
40708            nextWeek: function () {
40709                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
40710            },
40711            lastDay: function () {
40712                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
40713            },
40714            lastWeek: function () {
40715                return (
40716                    '[el] dddd [pasado a la' +
40717                    (this.hours() !== 1 ? 's' : '') +
40718                    '] LT'
40719                );
40720            },
40721            sameElse: 'L',
40722        },
40723        relativeTime: {
40724            future: 'en %s',
40725            past: 'hace %s',
40726            s: 'unos segundos',
40727            ss: '%d segundos',
40728            m: 'un minuto',
40729            mm: '%d minutos',
40730            h: 'una hora',
40731            hh: '%d horas',
40732            d: 'un día',
40733            dd: '%d días',
40734            w: 'una semana',
40735            ww: '%d semanas',
40736            M: 'un mes',
40737            MM: '%d meses',
40738            y: 'un año',
40739            yy: '%d años',
40740        },
40741        dayOfMonthOrdinalParse: /\d{1,2}º/,
40742        ordinal: '%dº',
40743        week: {
40744            dow: 1, // Monday is the first day of the week.
40745            doy: 4, // The week that contains Jan 4th is the first week of the year.
40746        },
40747    });
40748
40749    return esDo;
40750
40751})));
40752
40753
40754/***/ }),
40755
vendor: 4,432 bytes, lines 40756-40885
40756/***/ "./node_modules/moment/locale/es-mx.js":
40757/*!*********************************************!*\
40758  !*** ./node_modules/moment/locale/es-mx.js ***!
40759  \*********************************************/
40760/*! no static exports found */
40761/***/ (function(module, exports, __webpack_require__) {
40762
40763//! moment.js locale configuration
40764//! locale : Spanish (Mexico) [es-mx]
40765//! author : JC Franco : https://github.com/jcfranco
40766
40767;(function (global, factory) {
40768    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
40769   undefined
40770}(this, (function (moment) { 'use strict';
40771
40772    //! moment.js locale configuration
40773
40774    var monthsShortDot =
40775            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
40776                '_'
40777            ),
40778        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
40779        monthsParse = [
40780            /^ene/i,
40781            /^feb/i,
40782            /^mar/i,
40783            /^abr/i,
40784            /^may/i,
40785            /^jun/i,
40786            /^jul/i,
40787            /^ago/i,
40788            /^sep/i,
40789            /^oct/i,
40790            /^nov/i,
40791            /^dic/i,
40792        ],
40793        monthsRegex =
40794            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
40795
40796    var esMx = moment.defineLocale('es-mx', {
40797        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
40798            '_'
40799        ),
40800        monthsShort: function (m, format) {
40801            if (!m) {
40802                return monthsShortDot;
40803            } else if (/-MMM-/.test(format)) {
40804                return monthsShort[m.month()];
40805            } else {
40806                return monthsShortDot[m.month()];
40807            }
40808        },
40809        monthsRegex: monthsRegex,
40810        monthsShortRegex: monthsRegex,
40811        monthsStrictRegex:
40812            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
40813        monthsShortStrictRegex:
40814            /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
40815        monthsParse: monthsParse,
40816        longMonthsParse: monthsParse,
40817        shortMonthsParse: monthsParse,
40818        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
40819        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
40820        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
40821        weekdaysParseExact: true,
40822        longDateFormat: {
40823            LT: 'H:mm',
40824            LTS: 'H:mm:ss',
40825            L: 'DD/MM/YYYY',
40826            LL: 'D [de] MMMM [de] YYYY',
40827            LLL: 'D [de] MMMM [de] YYYY H:mm',
40828            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
40829        },
40830        calendar: {
40831            sameDay: function () {
40832                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
40833            },
40834            nextDay: function () {
40835                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
40836            },
40837            nextWeek: function () {
40838                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
40839            },
40840            lastDay: function () {
40841                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
40842            },
40843            lastWeek: function () {
40844                return (
40845                    '[el] dddd [pasado a la' +
40846                    (this.hours() !== 1 ? 's' : '') +
40847                    '] LT'
40848                );
40849            },
40850            sameElse: 'L',
40851        },
40852        relativeTime: {
40853            future: 'en %s',
40854            past: 'hace %s',
40855            s: 'unos segundos',
40856            ss: '%d segundos',
40857            m: 'un minuto',
40858            mm: '%d minutos',
40859            h: 'una hora',
40860            hh: '%d horas',
40861            d: 'un día',
40862            dd: '%d días',
40863            w: 'una semana',
40864            ww: '%d semanas',
40865            M: 'un mes',
40866            MM: '%d meses',
40867            y: 'un año',
40868            yy: '%d años',
40869        },
40870        dayOfMonthOrdinalParse: /\d{1,2}º/,
40871        ordinal: '%dº',
40872        week: {
40873            dow: 0, // Sunday is the first day of the week.
40874            doy: 4, // The week that contains Jan 4th is the first week of the year.
40875        },
40876        invalidDate: 'Fecha inválida',
40877    });
40878
40879    return esMx;
40880
40881})));
40882
40883
40884/***/ }),
40885
vendor: 4,456 bytes, lines 40886-41015
40886/***/ "./node_modules/moment/locale/es-us.js":
40887/*!*********************************************!*\
40888  !*** ./node_modules/moment/locale/es-us.js ***!
40889  \*********************************************/
40890/*! no static exports found */
40891/***/ (function(module, exports, __webpack_require__) {
40892
40893//! moment.js locale configuration
40894//! locale : Spanish (United States) [es-us]
40895//! author : bustta : https://github.com/bustta
40896//! author : chrisrodz : https://github.com/chrisrodz
40897
40898;(function (global, factory) {
40899    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
40900   undefined
40901}(this, (function (moment) { 'use strict';
40902
40903    //! moment.js locale configuration
40904
40905    var monthsShortDot =
40906            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
40907                '_'
40908            ),
40909        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
40910        monthsParse = [
40911            /^ene/i,
40912            /^feb/i,
40913            /^mar/i,
40914            /^abr/i,
40915            /^may/i,
40916            /^jun/i,
40917            /^jul/i,
40918            /^ago/i,
40919            /^sep/i,
40920            /^oct/i,
40921            /^nov/i,
40922            /^dic/i,
40923        ],
40924        monthsRegex =
40925            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
40926
40927    var esUs = moment.defineLocale('es-us', {
40928        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
40929            '_'
40930        ),
40931        monthsShort: function (m, format) {
40932            if (!m) {
40933                return monthsShortDot;
40934            } else if (/-MMM-/.test(format)) {
40935                return monthsShort[m.month()];
40936            } else {
40937                return monthsShortDot[m.month()];
40938            }
40939        },
40940        monthsRegex: monthsRegex,
40941        monthsShortRegex: monthsRegex,
40942        monthsStrictRegex:
40943            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
40944        monthsShortStrictRegex:
40945            /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
40946        monthsParse: monthsParse,
40947        longMonthsParse: monthsParse,
40948        shortMonthsParse: monthsParse,
40949        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
40950        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
40951        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
40952        weekdaysParseExact: true,
40953        longDateFormat: {
40954            LT: 'h:mm A',
40955            LTS: 'h:mm:ss A',
40956            L: 'MM/DD/YYYY',
40957            LL: 'D [de] MMMM [de] YYYY',
40958            LLL: 'D [de] MMMM [de] YYYY h:mm A',
40959            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
40960        },
40961        calendar: {
40962            sameDay: function () {
40963                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
40964            },
40965            nextDay: function () {
40966                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
40967            },
40968            nextWeek: function () {
40969                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
40970            },
40971            lastDay: function () {
40972                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
40973            },
40974            lastWeek: function () {
40975                return (
40976                    '[el] dddd [pasado a la' +
40977                    (this.hours() !== 1 ? 's' : '') +
40978                    '] LT'
40979                );
40980            },
40981            sameElse: 'L',
40982        },
40983        relativeTime: {
40984            future: 'en %s',
40985            past: 'hace %s',
40986            s: 'unos segundos',
40987            ss: '%d segundos',
40988            m: 'un minuto',
40989            mm: '%d minutos',
40990            h: 'una hora',
40991            hh: '%d horas',
40992            d: 'un día',
40993            dd: '%d días',
40994            w: 'una semana',
40995            ww: '%d semanas',
40996            M: 'un mes',
40997            MM: '%d meses',
40998            y: 'un año',
40999            yy: '%d años',
41000        },
41001        dayOfMonthOrdinalParse: /\d{1,2}º/,
41002        ordinal: '%dº',
41003        week: {
41004            dow: 0, // Sunday is the first day of the week.
41005            doy: 6, // The week that contains Jan 6th is the first week of the year.
41006        },
41007    });
41008
41009    return esUs;
41010
41011})));
41012
41013
41014/***/ }),
41015
vendor: 4,404 bytes, lines 41016-41145
41016/***/ "./node_modules/moment/locale/es.js":
41017/*!******************************************!*\
41018  !*** ./node_modules/moment/locale/es.js ***!
41019  \******************************************/
41020/*! no static exports found */
41021/***/ (function(module, exports, __webpack_require__) {
41022
41023//! moment.js locale configuration
41024//! locale : Spanish [es]
41025//! author : Julio Napurí : https://github.com/julionc
41026
41027;(function (global, factory) {
41028    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
41029   undefined
41030}(this, (function (moment) { 'use strict';
41031
41032    //! moment.js locale configuration
41033
41034    var monthsShortDot =
41035            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
41036                '_'
41037            ),
41038        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
41039        monthsParse = [
41040            /^ene/i,
41041            /^feb/i,
41042            /^mar/i,
41043            /^abr/i,
41044            /^may/i,
41045            /^jun/i,
41046            /^jul/i,
41047            /^ago/i,
41048            /^sep/i,
41049            /^oct/i,
41050            /^nov/i,
41051            /^dic/i,
41052        ],
41053        monthsRegex =
41054            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
41055
41056    var es = moment.defineLocale('es', {
41057        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
41058            '_'
41059        ),
41060        monthsShort: function (m, format) {
41061            if (!m) {
41062                return monthsShortDot;
41063            } else if (/-MMM-/.test(format)) {
41064                return monthsShort[m.month()];
41065            } else {
41066                return monthsShortDot[m.month()];
41067            }
41068        },
41069        monthsRegex: monthsRegex,
41070        monthsShortRegex: monthsRegex,
41071        monthsStrictRegex:
41072            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
41073        monthsShortStrictRegex:
41074            /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
41075        monthsParse: monthsParse,
41076        longMonthsParse: monthsParse,
41077        shortMonthsParse: monthsParse,
41078        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
41079        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
41080        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
41081        weekdaysParseExact: true,
41082        longDateFormat: {
41083            LT: 'H:mm',
41084            LTS: 'H:mm:ss',
41085            L: 'DD/MM/YYYY',
41086            LL: 'D [de] MMMM [de] YYYY',
41087            LLL: 'D [de] MMMM [de] YYYY H:mm',
41088            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
41089        },
41090        calendar: {
41091            sameDay: function () {
41092                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
41093            },
41094            nextDay: function () {
41095                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
41096            },
41097            nextWeek: function () {
41098                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
41099            },
41100            lastDay: function () {
41101                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
41102            },
41103            lastWeek: function () {
41104                return (
41105                    '[el] dddd [pasado a la' +
41106                    (this.hours() !== 1 ? 's' : '') +
41107                    '] LT'
41108                );
41109            },
41110            sameElse: 'L',
41111        },
41112        relativeTime: {
41113            future: 'en %s',
41114            past: 'hace %s',
41115            s: 'unos segundos',
41116            ss: '%d segundos',
41117            m: 'un minuto',
41118            mm: '%d minutos',
41119            h: 'una hora',
41120            hh: '%d horas',
41121            d: 'un día',
41122            dd: '%d días',
41123            w: 'una semana',
41124            ww: '%d semanas',
41125            M: 'un mes',
41126            MM: '%d meses',
41127            y: 'un año',
41128            yy: '%d años',
41129        },
41130        dayOfMonthOrdinalParse: /\d{1,2}º/,
41131        ordinal: '%dº',
41132        week: {
41133            dow: 1, // Monday is the first day of the week.
41134            doy: 4, // The week that contains Jan 4th is the first week of the year.
41135        },
41136        invalidDate: 'Fecha inválida',
41137    });
41138
41139    return es;
41140
41141})));
41142
41143
41144/***/ }),
41145
vendor: 3,405 bytes, lines 41146-41243
41146/***/ "./node_modules/moment/locale/et.js":
41147/*!******************************************!*\
41148  !*** ./node_modules/moment/locale/et.js ***!
41149  \******************************************/
41150/*! no static exports found */
41151/***/ (function(module, exports, __webpack_require__) {
41152
41153//! moment.js locale configuration
41154//! locale : Estonian [et]
41155//! author : Henry Kehlmann : https://github.com/madhenry
41156//! improvements : Illimar Tambek : https://github.com/ragulka
41157
41158;(function (global, factory) {
41159    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
41160   undefined
41161}(this, (function (moment) { 'use strict';
41162
41163    //! moment.js locale configuration
41164
41165    function processRelativeTime(number, withoutSuffix, key, isFuture) {
41166        var format = {
41167            s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
41168            ss: [number + 'sekundi', number + 'sekundit'],
41169            m: ['ühe minuti', 'üks minut'],
41170            mm: [number + ' minuti', number + ' minutit'],
41171            h: ['ühe tunni', 'tund aega', 'üks tund'],
41172            hh: [number + ' tunni', number + ' tundi'],
41173            d: ['ühe päeva', 'üks päev'],
41174            M: ['kuu aja', 'kuu aega', 'üks kuu'],
41175            MM: [number + ' kuu', number + ' kuud'],
41176            y: ['ühe aasta', 'aasta', 'üks aasta'],
41177            yy: [number + ' aasta', number + ' aastat'],
41178        };
41179        if (withoutSuffix) {
41180            return format[key][2] ? format[key][2] : format[key][1];
41181        }
41182        return isFuture ? format[key][0] : format[key][1];
41183    }
41184
41185    var et = moment.defineLocale('et', {
41186        months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(
41187            '_'
41188        ),
41189        monthsShort:
41190            'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),
41191        weekdays:
41192            'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(
41193                '_'
41194            ),
41195        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),
41196        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),
41197        longDateFormat: {
41198            LT: 'H:mm',
41199            LTS: 'H:mm:ss',
41200            L: 'DD.MM.YYYY',
41201            LL: 'D. MMMM YYYY',
41202            LLL: 'D. MMMM YYYY H:mm',
41203            LLLL: 'dddd, D. MMMM YYYY H:mm',
41204        },
41205        calendar: {
41206            sameDay: '[Täna,] LT',
41207            nextDay: '[Homme,] LT',
41208            nextWeek: '[Järgmine] dddd LT',
41209            lastDay: '[Eile,] LT',
41210            lastWeek: '[Eelmine] dddd LT',
41211            sameElse: 'L',
41212        },
41213        relativeTime: {
41214            future: '%s pärast',
41215            past: '%s tagasi',
41216            s: processRelativeTime,
41217            ss: processRelativeTime,
41218            m: processRelativeTime,
41219            mm: processRelativeTime,
41220            h: processRelativeTime,
41221            hh: processRelativeTime,
41222            d: processRelativeTime,
41223            dd: '%d päeva',
41224            M: processRelativeTime,
41225            MM: processRelativeTime,
41226            y: processRelativeTime,
41227            yy: processRelativeTime,
41228        },
41229        dayOfMonthOrdinalParse: /\d{1,2}\./,
41230        ordinal: '%d.',
41231        week: {
41232            dow: 1, // Monday is the first day of the week.
41233            doy: 4, // The week that contains Jan 4th is the first week of the year.
41234        },
41235    });
41236
41237    return et;
41238
41239})));
41240
41241
41242/***/ }),
41243
vendor: 2,694 bytes, lines 41244-41328
41244/***/ "./node_modules/moment/locale/eu.js":
41245/*!******************************************!*\
41246  !*** ./node_modules/moment/locale/eu.js ***!
41247  \******************************************/
41248/*! no static exports found */
41249/***/ (function(module, exports, __webpack_require__) {
41250
41251//! moment.js locale configuration
41252//! locale : Basque [eu]
41253//! author : Eneko Illarramendi : https://github.com/eillarra
41254
41255;(function (global, factory) {
41256    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
41257   undefined
41258}(this, (function (moment) { 'use strict';
41259
41260    //! moment.js locale configuration
41261
41262    var eu = moment.defineLocale('eu', {
41263        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(
41264            '_'
41265        ),
41266        monthsShort:
41267            'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(
41268                '_'
41269            ),
41270        monthsParseExact: true,
41271        weekdays:
41272            'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(
41273                '_'
41274            ),
41275        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),
41276        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),
41277        weekdaysParseExact: true,
41278        longDateFormat: {
41279            LT: 'HH:mm',
41280            LTS: 'HH:mm:ss',
41281            L: 'YYYY-MM-DD',
41282            LL: 'YYYY[ko] MMMM[ren] D[a]',
41283            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',
41284            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
41285            l: 'YYYY-M-D',
41286            ll: 'YYYY[ko] MMM D[a]',
41287            lll: 'YYYY[ko] MMM D[a] HH:mm',
41288            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',
41289        },
41290        calendar: {
41291            sameDay: '[gaur] LT[etan]',
41292            nextDay: '[bihar] LT[etan]',
41293            nextWeek: 'dddd LT[etan]',
41294            lastDay: '[atzo] LT[etan]',
41295            lastWeek: '[aurreko] dddd LT[etan]',
41296            sameElse: 'L',
41297        },
41298        relativeTime: {
41299            future: '%s barru',
41300            past: 'duela %s',
41301            s: 'segundo batzuk',
41302            ss: '%d segundo',
41303            m: 'minutu bat',
41304            mm: '%d minutu',
41305            h: 'ordu bat',
41306            hh: '%d ordu',
41307            d: 'egun bat',
41308            dd: '%d egun',
41309            M: 'hilabete bat',
41310            MM: '%d hilabete',
41311            y: 'urte bat',
41312            yy: '%d urte',
41313        },
41314        dayOfMonthOrdinalParse: /\d{1,2}\./,
41315        ordinal: '%d.',
41316        week: {
41317            dow: 1, // Monday is the first day of the week.
41318            doy: 7, // The week that contains Jan 7th is the first week of the year.
41319        },
41320    });
41321
41322    return eu;
41323
41324})));
41325
41326
41327/***/ }),
41328
vendor: 4,148 bytes, lines 41329-41461
41329/***/ "./node_modules/moment/locale/fa.js":
41330/*!******************************************!*\
41331  !*** ./node_modules/moment/locale/fa.js ***!
41332  \******************************************/
41333/*! no static exports found */
41334/***/ (function(module, exports, __webpack_require__) {
41335
41336//! moment.js locale configuration
41337//! locale : Persian [fa]
41338//! author : Ebrahim Byagowi : https://github.com/ebraminio
41339
41340;(function (global, factory) {
41341    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
41342   undefined
41343}(this, (function (moment) { 'use strict';
41344
41345    //! moment.js locale configuration
41346
41347    var symbolMap = {
41348            1: 'Û±',
41349            2: 'Û²',
41350            3: 'Û³',
41351            4: 'Û´',
41352            5: 'Ûµ',
41353            6: 'Û¶',
41354            7: 'Û·',
41355            8: 'Û¸',
41356            9: 'Û¹',
41357            0: 'Û°',
41358        },
41359        numberMap = {
41360            'Û±': '1',
41361            'Û²': '2',
41362            'Û³': '3',
41363            'Û´': '4',
41364            'Ûµ': '5',
41365            'Û¶': '6',
41366            'Û·': '7',
41367            'Û¸': '8',
41368            'Û¹': '9',
41369            'Û°': '0',
41370        };
41371
41372    var fa = moment.defineLocale('fa', {
41373        months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(
41374            '_'
41375        ),
41376        monthsShort:
41377            'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(
41378                '_'
41379            ),
41380        weekdays:
41381            'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split(
41382                '_'
41383            ),
41384        weekdaysShort:
41385            'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split(
41386                '_'
41387            ),
41388        weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),
41389        weekdaysParseExact: true,
41390        longDateFormat: {
41391            LT: 'HH:mm',
41392            LTS: 'HH:mm:ss',
41393            L: 'DD/MM/YYYY',
41394            LL: 'D MMMM YYYY',
41395            LLL: 'D MMMM YYYY HH:mm',
41396            LLLL: 'dddd, D MMMM YYYY HH:mm',
41397        },
41398        meridiemParse: /قبل از ظهر|بعد از ظهر/,
41399        isPM: function (input) {
41400            return /بعد از ظهر/.test(input);
41401        },
41402        meridiem: function (hour, minute, isLower) {
41403            if (hour < 12) {
41404                return 'قبل از ظهر';
41405            } else {
41406                return 'بعد از ظهر';
41407            }
41408        },
41409        calendar: {
41410            sameDay: '[امروز ساعت] LT',
41411            nextDay: '[فردا ساعت] LT',
41412            nextWeek: 'dddd [ساعت] LT',
41413            lastDay: '[دیروز ساعت] LT',
41414            lastWeek: 'dddd [پیش] [ساعت] LT',
41415            sameElse: 'L',
41416        },
41417        relativeTime: {
41418            future: 'در %s',
41419            past: '%s پیش',
41420            s: 'چند ثانیه',
41421            ss: '%d ثانیه',
41422            m: 'یک دقیقه',
41423            mm: '%d دقیقه',
41424            h: 'یک ساعت',
41425            hh: '%d ساعت',
41426            d: 'یک روز',
41427            dd: '%d روز',
41428            M: 'یک ماه',
41429            MM: '%d ماه',
41430            y: 'یک سال',
41431            yy: '%d سال',
41432        },
41433        preparse: function (string) {
41434            return string
41435                .replace(/[Û°-Û¹]/g, function (match) {
41436                    return numberMap[match];
41437                })
41438                .replace(/،/g, ',');
41439        },
41440        postformat: function (string) {
41441            return string
41442                .replace(/\d/g, function (match) {
41443                    return symbolMap[match];
41444                })
41445                .replace(/,/g, '،');
41446        },
41447        dayOfMonthOrdinalParse: /\d{1,2}م/,
41448        ordinal: '%dم',
41449        week: {
41450            dow: 6, // Saturday is the first day of the week.
41451            doy: 12, // The week that contains Jan 12th is the first week of the year.
41452        },
41453    });
41454
41455    return fa;
41456
41457})));
41458
41459
41460/***/ }),
41461
vendor: 4,594 bytes, lines 41462-41605
41462/***/ "./node_modules/moment/locale/fi.js":
41463/*!******************************************!*\
41464  !*** ./node_modules/moment/locale/fi.js ***!
41465  \******************************************/
41466/*! no static exports found */
41467/***/ (function(module, exports, __webpack_require__) {
41468
41469//! moment.js locale configuration
41470//! locale : Finnish [fi]
41471//! author : Tarmo Aidantausta : https://github.com/bleadof
41472
41473;(function (global, factory) {
41474    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
41475   undefined
41476}(this, (function (moment) { 'use strict';
41477
41478    //! moment.js locale configuration
41479
41480    var numbersPast =
41481            'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(
41482                ' '
41483            ),
41484        numbersFuture = [
41485            'nolla',
41486            'yhden',
41487            'kahden',
41488            'kolmen',
41489            'neljän',
41490            'viiden',
41491            'kuuden',
41492            numbersPast[7],
41493            numbersPast[8],
41494            numbersPast[9],
41495        ];
41496    function translate(number, withoutSuffix, key, isFuture) {
41497        var result = '';
41498        switch (key) {
41499            case 's':
41500                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
41501            case 'ss':
41502                result = isFuture ? 'sekunnin' : 'sekuntia';
41503                break;
41504            case 'm':
41505                return isFuture ? 'minuutin' : 'minuutti';
41506            case 'mm':
41507                result = isFuture ? 'minuutin' : 'minuuttia';
41508                break;
41509            case 'h':
41510                return isFuture ? 'tunnin' : 'tunti';
41511            case 'hh':
41512                result = isFuture ? 'tunnin' : 'tuntia';
41513                break;
41514            case 'd':
41515                return isFuture ? 'päivän' : 'päivä';
41516            case 'dd':
41517                result = isFuture ? 'päivän' : 'päivää';
41518                break;
41519            case 'M':
41520                return isFuture ? 'kuukauden' : 'kuukausi';
41521            case 'MM':
41522                result = isFuture ? 'kuukauden' : 'kuukautta';
41523                break;
41524            case 'y':
41525                return isFuture ? 'vuoden' : 'vuosi';
41526            case 'yy':
41527                result = isFuture ? 'vuoden' : 'vuotta';
41528                break;
41529        }
41530        result = verbalNumber(number, isFuture) + ' ' + result;
41531        return result;
41532    }
41533    function verbalNumber(number, isFuture) {
41534        return number < 10
41535            ? isFuture
41536                ? numbersFuture[number]
41537                : numbersPast[number]
41538            : number;
41539    }
41540
41541    var fi = moment.defineLocale('fi', {
41542        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(
41543            '_'
41544        ),
41545        monthsShort:
41546            'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(
41547                '_'
41548            ),
41549        weekdays:
41550            'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(
41551                '_'
41552            ),
41553        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),
41554        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),
41555        longDateFormat: {
41556            LT: 'HH.mm',
41557            LTS: 'HH.mm.ss',
41558            L: 'DD.MM.YYYY',
41559            LL: 'Do MMMM[ta] YYYY',
41560            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',
41561            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
41562            l: 'D.M.YYYY',
41563            ll: 'Do MMM YYYY',
41564            lll: 'Do MMM YYYY, [klo] HH.mm',
41565            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',
41566        },
41567        calendar: {
41568            sameDay: '[tänään] [klo] LT',
41569            nextDay: '[huomenna] [klo] LT',
41570            nextWeek: 'dddd [klo] LT',
41571            lastDay: '[eilen] [klo] LT',
41572            lastWeek: '[viime] dddd[na] [klo] LT',
41573            sameElse: 'L',
41574        },
41575        relativeTime: {
41576            future: '%s päästä',
41577            past: '%s sitten',
41578            s: translate,
41579            ss: translate,
41580            m: translate,
41581            mm: translate,
41582            h: translate,
41583            hh: translate,
41584            d: translate,
41585            dd: translate,
41586            M: translate,
41587            MM: translate,
41588            y: translate,
41589            yy: translate,
41590        },
41591        dayOfMonthOrdinalParse: /\d{1,2}\./,
41592        ordinal: '%d.',
41593        week: {
41594            dow: 1, // Monday is the first day of the week.
41595            doy: 4, // The week that contains Jan 4th is the first week of the year.
41596        },
41597    });
41598
41599    return fi;
41600
41601})));
41602
41603
41604/***/ }),
41605
vendor: 2,480 bytes, lines 41606-41683
41606/***/ "./node_modules/moment/locale/fil.js":
41607/*!*******************************************!*\
41608  !*** ./node_modules/moment/locale/fil.js ***!
41609  \*******************************************/
41610/*! no static exports found */
41611/***/ (function(module, exports, __webpack_require__) {
41612
41613//! moment.js locale configuration
41614//! locale : Filipino [fil]
41615//! author : Dan Hagman : https://github.com/hagmandan
41616//! author : Matthew Co : https://github.com/matthewdeeco
41617
41618;(function (global, factory) {
41619    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
41620   undefined
41621}(this, (function (moment) { 'use strict';
41622
41623    //! moment.js locale configuration
41624
41625    var fil = moment.defineLocale('fil', {
41626        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
41627            '_'
41628        ),
41629        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
41630        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
41631            '_'
41632        ),
41633        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
41634        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
41635        longDateFormat: {
41636            LT: 'HH:mm',
41637            LTS: 'HH:mm:ss',
41638            L: 'MM/D/YYYY',
41639            LL: 'MMMM D, YYYY',
41640            LLL: 'MMMM D, YYYY HH:mm',
41641            LLLL: 'dddd, MMMM DD, YYYY HH:mm',
41642        },
41643        calendar: {
41644            sameDay: 'LT [ngayong araw]',
41645            nextDay: '[Bukas ng] LT',
41646            nextWeek: 'LT [sa susunod na] dddd',
41647            lastDay: 'LT [kahapon]',
41648            lastWeek: 'LT [noong nakaraang] dddd',
41649            sameElse: 'L',
41650        },
41651        relativeTime: {
41652            future: 'sa loob ng %s',
41653            past: '%s ang nakalipas',
41654            s: 'ilang segundo',
41655            ss: '%d segundo',
41656            m: 'isang minuto',
41657            mm: '%d minuto',
41658            h: 'isang oras',
41659            hh: '%d oras',
41660            d: 'isang araw',
41661            dd: '%d araw',
41662            M: 'isang buwan',
41663            MM: '%d buwan',
41664            y: 'isang taon',
41665            yy: '%d taon',
41666        },
41667        dayOfMonthOrdinalParse: /\d{1,2}/,
41668        ordinal: function (number) {
41669            return number;
41670        },
41671        week: {
41672            dow: 1, // Monday is the first day of the week.
41673            doy: 4, // The week that contains Jan 4th is the first week of the year.
41674        },
41675    });
41676
41677    return fil;
41678
41679})));
41680
41681
41682/***/ }),
41683
vendor: 2,466 bytes, lines 41684-41760
41684/***/ "./node_modules/moment/locale/fo.js":
41685/*!******************************************!*\
41686  !*** ./node_modules/moment/locale/fo.js ***!
41687  \******************************************/
41688/*! no static exports found */
41689/***/ (function(module, exports, __webpack_require__) {
41690
41691//! moment.js locale configuration
41692//! locale : Faroese [fo]
41693//! author : Ragnar Johannesen : https://github.com/ragnar123
41694//! author : Kristian Sakarisson : https://github.com/sakarisson
41695
41696;(function (global, factory) {
41697    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
41698   undefined
41699}(this, (function (moment) { 'use strict';
41700
41701    //! moment.js locale configuration
41702
41703    var fo = moment.defineLocale('fo', {
41704        months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(
41705            '_'
41706        ),
41707        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
41708        weekdays:
41709            'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(
41710                '_'
41711            ),
41712        weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
41713        weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),
41714        longDateFormat: {
41715            LT: 'HH:mm',
41716            LTS: 'HH:mm:ss',
41717            L: 'DD/MM/YYYY',
41718            LL: 'D MMMM YYYY',
41719            LLL: 'D MMMM YYYY HH:mm',
41720            LLLL: 'dddd D. MMMM, YYYY HH:mm',
41721        },
41722        calendar: {
41723            sameDay: '[Í dag kl.] LT',
41724            nextDay: '[Í morgin kl.] LT',
41725            nextWeek: 'dddd [kl.] LT',
41726            lastDay: '[Í gjár kl.] LT',
41727            lastWeek: '[síðstu] dddd [kl] LT',
41728            sameElse: 'L',
41729        },
41730        relativeTime: {
41731            future: 'um %s',
41732            past: '%s síðani',
41733            s: 'fá sekund',
41734            ss: '%d sekundir',
41735            m: 'ein minuttur',
41736            mm: '%d minuttir',
41737            h: 'ein tími',
41738            hh: '%d tímar',
41739            d: 'ein dagur',
41740            dd: '%d dagar',
41741            M: 'ein mánaður',
41742            MM: '%d mánaðir',
41743            y: 'eitt ár',
41744            yy: '%d ár',
41745        },
41746        dayOfMonthOrdinalParse: /\d{1,2}\./,
41747        ordinal: '%d.',
41748        week: {
41749            dow: 1, // Monday is the first day of the week.
41750            doy: 4, // The week that contains Jan 4th is the first week of the year.
41751        },
41752    });
41753
41754    return fo;
41755
41756})));
41757
41758
41759/***/ }),
41760
vendor: 2,866 bytes, lines 41761-41850
41761/***/ "./node_modules/moment/locale/fr-ca.js":
41762/*!*********************************************!*\
41763  !*** ./node_modules/moment/locale/fr-ca.js ***!
41764  \*********************************************/
41765/*! no static exports found */
41766/***/ (function(module, exports, __webpack_require__) {
41767
41768//! moment.js locale configuration
41769//! locale : French (Canada) [fr-ca]
41770//! author : Jonathan Abourbih : https://github.com/jonbca
41771
41772;(function (global, factory) {
41773    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
41774   undefined
41775}(this, (function (moment) { 'use strict';
41776
41777    //! moment.js locale configuration
41778
41779    var frCa = moment.defineLocale('fr-ca', {
41780        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
41781            '_'
41782        ),
41783        monthsShort:
41784            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
41785                '_'
41786            ),
41787        monthsParseExact: true,
41788        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
41789        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
41790        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
41791        weekdaysParseExact: true,
41792        longDateFormat: {
41793            LT: 'HH:mm',
41794            LTS: 'HH:mm:ss',
41795            L: 'YYYY-MM-DD',
41796            LL: 'D MMMM YYYY',
41797            LLL: 'D MMMM YYYY HH:mm',
41798            LLLL: 'dddd D MMMM YYYY HH:mm',
41799        },
41800        calendar: {
41801            sameDay: '[Aujourd’hui à] LT',
41802            nextDay: '[Demain à] LT',
41803            nextWeek: 'dddd [à] LT',
41804            lastDay: '[Hier à] LT',
41805            lastWeek: 'dddd [dernier à] LT',
41806            sameElse: 'L',
41807        },
41808        relativeTime: {
41809            future: 'dans %s',
41810            past: 'il y a %s',
41811            s: 'quelques secondes',
41812            ss: '%d secondes',
41813            m: 'une minute',
41814            mm: '%d minutes',
41815            h: 'une heure',
41816            hh: '%d heures',
41817            d: 'un jour',
41818            dd: '%d jours',
41819            M: 'un mois',
41820            MM: '%d mois',
41821            y: 'un an',
41822            yy: '%d ans',
41823        },
41824        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
41825        ordinal: function (number, period) {
41826            switch (period) {
41827                // Words with masculine grammatical gender: mois, trimestre, jour
41828                default:
41829                case 'M':
41830                case 'Q':
41831                case 'D':
41832                case 'DDD':
41833                case 'd':
41834                    return number + (number === 1 ? 'er' : 'e');
41835
41836                // Words with feminine grammatical gender: semaine
41837                case 'w':
41838                case 'W':
41839                    return number + (number === 1 ? 're' : 'e');
41840            }
41841        },
41842    });
41843
41844    return frCa;
41845
41846})));
41847
41848
41849/***/ }),
41850
vendor: 3,041 bytes, lines 41851-41944
41851/***/ "./node_modules/moment/locale/fr-ch.js":
41852/*!*********************************************!*\
41853  !*** ./node_modules/moment/locale/fr-ch.js ***!
41854  \*********************************************/
41855/*! no static exports found */
41856/***/ (function(module, exports, __webpack_require__) {
41857
41858//! moment.js locale configuration
41859//! locale : French (Switzerland) [fr-ch]
41860//! author : Gaspard Bucher : https://github.com/gaspard
41861
41862;(function (global, factory) {
41863    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
41864   undefined
41865}(this, (function (moment) { 'use strict';
41866
41867    //! moment.js locale configuration
41868
41869    var frCh = moment.defineLocale('fr-ch', {
41870        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
41871            '_'
41872        ),
41873        monthsShort:
41874            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
41875                '_'
41876            ),
41877        monthsParseExact: true,
41878        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
41879        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
41880        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
41881        weekdaysParseExact: true,
41882        longDateFormat: {
41883            LT: 'HH:mm',
41884            LTS: 'HH:mm:ss',
41885            L: 'DD.MM.YYYY',
41886            LL: 'D MMMM YYYY',
41887            LLL: 'D MMMM YYYY HH:mm',
41888            LLLL: 'dddd D MMMM YYYY HH:mm',
41889        },
41890        calendar: {
41891            sameDay: '[Aujourd’hui à] LT',
41892            nextDay: '[Demain à] LT',
41893            nextWeek: 'dddd [à] LT',
41894            lastDay: '[Hier à] LT',
41895            lastWeek: 'dddd [dernier à] LT',
41896            sameElse: 'L',
41897        },
41898        relativeTime: {
41899            future: 'dans %s',
41900            past: 'il y a %s',
41901            s: 'quelques secondes',
41902            ss: '%d secondes',
41903            m: 'une minute',
41904            mm: '%d minutes',
41905            h: 'une heure',
41906            hh: '%d heures',
41907            d: 'un jour',
41908            dd: '%d jours',
41909            M: 'un mois',
41910            MM: '%d mois',
41911            y: 'un an',
41912            yy: '%d ans',
41913        },
41914        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
41915        ordinal: function (number, period) {
41916            switch (period) {
41917                // Words with masculine grammatical gender: mois, trimestre, jour
41918                default:
41919                case 'M':
41920                case 'Q':
41921                case 'D':
41922                case 'DDD':
41923                case 'd':
41924                    return number + (number === 1 ? 'er' : 'e');
41925
41926                // Words with feminine grammatical gender: semaine
41927                case 'w':
41928                case 'W':
41929                    return number + (number === 1 ? 're' : 'e');
41930            }
41931        },
41932        week: {
41933            dow: 1, // Monday is the first day of the week.
41934            doy: 4, // The week that contains Jan 4th is the first week of the year.
41935        },
41936    });
41937
41938    return frCh;
41939
41940})));
41941
41942
41943/***/ }),
41944
vendor: 4,361 bytes, lines 41945-42072
41945/***/ "./node_modules/moment/locale/fr.js":
41946/*!******************************************!*\
41947  !*** ./node_modules/moment/locale/fr.js ***!
41948  \******************************************/
41949/*! no static exports found */
41950/***/ (function(module, exports, __webpack_require__) {
41951
41952//! moment.js locale configuration
41953//! locale : French [fr]
41954//! author : John Fischer : https://github.com/jfroffice
41955
41956;(function (global, factory) {
41957    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
41958   undefined
41959}(this, (function (moment) { 'use strict';
41960
41961    //! moment.js locale configuration
41962
41963    var monthsStrictRegex =
41964            /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
41965        monthsShortStrictRegex =
41966            /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i,
41967        monthsRegex =
41968            /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
41969        monthsParse = [
41970            /^janv/i,
41971            /^févr/i,
41972            /^mars/i,
41973            /^avr/i,
41974            /^mai/i,
41975            /^juin/i,
41976            /^juil/i,
41977            /^août/i,
41978            /^sept/i,
41979            /^oct/i,
41980            /^nov/i,
41981            /^déc/i,
41982        ];
41983
41984    var fr = moment.defineLocale('fr', {
41985        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
41986            '_'
41987        ),
41988        monthsShort:
41989            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
41990                '_'
41991            ),
41992        monthsRegex: monthsRegex,
41993        monthsShortRegex: monthsRegex,
41994        monthsStrictRegex: monthsStrictRegex,
41995        monthsShortStrictRegex: monthsShortStrictRegex,
41996        monthsParse: monthsParse,
41997        longMonthsParse: monthsParse,
41998        shortMonthsParse: monthsParse,
41999        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
42000        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
42001        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
42002        weekdaysParseExact: true,
42003        longDateFormat: {
42004            LT: 'HH:mm',
42005            LTS: 'HH:mm:ss',
42006            L: 'DD/MM/YYYY',
42007            LL: 'D MMMM YYYY',
42008            LLL: 'D MMMM YYYY HH:mm',
42009            LLLL: 'dddd D MMMM YYYY HH:mm',
42010        },
42011        calendar: {
42012            sameDay: '[Aujourd’hui à] LT',
42013            nextDay: '[Demain à] LT',
42014            nextWeek: 'dddd [à] LT',
42015            lastDay: '[Hier à] LT',
42016            lastWeek: 'dddd [dernier à] LT',
42017            sameElse: 'L',
42018        },
42019        relativeTime: {
42020            future: 'dans %s',
42021            past: 'il y a %s',
42022            s: 'quelques secondes',
42023            ss: '%d secondes',
42024            m: 'une minute',
42025            mm: '%d minutes',
42026            h: 'une heure',
42027            hh: '%d heures',
42028            d: 'un jour',
42029            dd: '%d jours',
42030            w: 'une semaine',
42031            ww: '%d semaines',
42032            M: 'un mois',
42033            MM: '%d mois',
42034            y: 'un an',
42035            yy: '%d ans',
42036        },
42037        dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
42038        ordinal: function (number, period) {
42039            switch (period) {
42040                // TODO: Return 'e' when day of month > 1. Move this case inside
42041                // block for masculine words below.
42042                // See https://github.com/moment/moment/issues/3375
42043                case 'D':
42044                    return number + (number === 1 ? 'er' : '');
42045
42046                // Words with masculine grammatical gender: mois, trimestre, jour
42047                default:
42048                case 'M':
42049                case 'Q':
42050                case 'DDD':
42051                case 'd':
42052                    return number + (number === 1 ? 'er' : 'e');
42053
42054                // Words with feminine grammatical gender: semaine
42055                case 'w':
42056                case 'W':
42057                    return number + (number === 1 ? 're' : 'e');
42058            }
42059        },
42060        week: {
42061            dow: 1, // Monday is the first day of the week.
42062            doy: 4, // The week that contains Jan 4th is the first week of the year.
42063        },
42064    });
42065
42066    return fr;
42067
42068})));
42069
42070
42071/***/ }),
42072
vendor: 3,041 bytes, lines 42073-42167
42073/***/ "./node_modules/moment/locale/fy.js":
42074/*!******************************************!*\
42075  !*** ./node_modules/moment/locale/fy.js ***!
42076  \******************************************/
42077/*! no static exports found */
42078/***/ (function(module, exports, __webpack_require__) {
42079
42080//! moment.js locale configuration
42081//! locale : Frisian [fy]
42082//! author : Robin van der Vliet : https://github.com/robin0van0der0v
42083
42084;(function (global, factory) {
42085    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
42086   undefined
42087}(this, (function (moment) { 'use strict';
42088
42089    //! moment.js locale configuration
42090
42091    var monthsShortWithDots =
42092            'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),
42093        monthsShortWithoutDots =
42094            'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');
42095
42096    var fy = moment.defineLocale('fy', {
42097        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(
42098            '_'
42099        ),
42100        monthsShort: function (m, format) {
42101            if (!m) {
42102                return monthsShortWithDots;
42103            } else if (/-MMM-/.test(format)) {
42104                return monthsShortWithoutDots[m.month()];
42105            } else {
42106                return monthsShortWithDots[m.month()];
42107            }
42108        },
42109        monthsParseExact: true,
42110        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(
42111            '_'
42112        ),
42113        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),
42114        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
42115        weekdaysParseExact: true,
42116        longDateFormat: {
42117            LT: 'HH:mm',
42118            LTS: 'HH:mm:ss',
42119            L: 'DD-MM-YYYY',
42120            LL: 'D MMMM YYYY',
42121            LLL: 'D MMMM YYYY HH:mm',
42122            LLLL: 'dddd D MMMM YYYY HH:mm',
42123        },
42124        calendar: {
42125            sameDay: '[hjoed om] LT',
42126            nextDay: '[moarn om] LT',
42127            nextWeek: 'dddd [om] LT',
42128            lastDay: '[juster om] LT',
42129            lastWeek: '[ôfrûne] dddd [om] LT',
42130            sameElse: 'L',
42131        },
42132        relativeTime: {
42133            future: 'oer %s',
42134            past: '%s lyn',
42135            s: 'in pear sekonden',
42136            ss: '%d sekonden',
42137            m: 'ien minút',
42138            mm: '%d minuten',
42139            h: 'ien oere',
42140            hh: '%d oeren',
42141            d: 'ien dei',
42142            dd: '%d dagen',
42143            M: 'ien moanne',
42144            MM: '%d moannen',
42145            y: 'ien jier',
42146            yy: '%d jierren',
42147        },
42148        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
42149        ordinal: function (number) {
42150            return (
42151                number +
42152                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
42153            );
42154        },
42155        week: {
42156            dow: 1, // Monday is the first day of the week.
42157            doy: 4, // The week that contains Jan 4th is the first week of the year.
42158        },
42159    });
42160
42161    return fy;
42162
42163})));
42164
42165
42166/***/ }),
42167
vendor: 3,206 bytes, lines 42168-42282
42168/***/ "./node_modules/moment/locale/ga.js":
42169/*!******************************************!*\
42170  !*** ./node_modules/moment/locale/ga.js ***!
42171  \******************************************/
42172/*! no static exports found */
42173/***/ (function(module, exports, __webpack_require__) {
42174
42175//! moment.js locale configuration
42176//! locale : Irish or Irish Gaelic [ga]
42177//! author : André Silva : https://github.com/askpt
42178
42179;(function (global, factory) {
42180    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
42181   undefined
42182}(this, (function (moment) { 'use strict';
42183
42184    //! moment.js locale configuration
42185
42186    var months = [
42187            'Eanáir',
42188            'Feabhra',
42189            'Márta',
42190            'Aibreán',
42191            'Bealtaine',
42192            'Meitheamh',
42193            'Iúil',
42194            'Lúnasa',
42195            'Meán Fómhair',
42196            'Deireadh Fómhair',
42197            'Samhain',
42198            'Nollaig',
42199        ],
42200        monthsShort = [
42201            'Ean',
42202            'Feabh',
42203            'Márt',
42204            'Aib',
42205            'Beal',
42206            'Meith',
42207            'Iúil',
42208            'Lún',
42209            'M.F.',
42210            'D.F.',
42211            'Samh',
42212            'Noll',
42213        ],
42214        weekdays = [
42215            'Dé Domhnaigh',
42216            'Dé Luain',
42217            'Dé Máirt',
42218            'Dé Céadaoin',
42219            'Déardaoin',
42220            'Dé hAoine',
42221            'Dé Sathairn',
42222        ],
42223        weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],
42224        weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];
42225
42226    var ga = moment.defineLocale('ga', {
42227        months: months,
42228        monthsShort: monthsShort,
42229        monthsParseExact: true,
42230        weekdays: weekdays,
42231        weekdaysShort: weekdaysShort,
42232        weekdaysMin: weekdaysMin,
42233        longDateFormat: {
42234            LT: 'HH:mm',
42235            LTS: 'HH:mm:ss',
42236            L: 'DD/MM/YYYY',
42237            LL: 'D MMMM YYYY',
42238            LLL: 'D MMMM YYYY HH:mm',
42239            LLLL: 'dddd, D MMMM YYYY HH:mm',
42240        },
42241        calendar: {
42242            sameDay: '[Inniu ag] LT',
42243            nextDay: '[Amárach ag] LT',
42244            nextWeek: 'dddd [ag] LT',
42245            lastDay: '[Inné ag] LT',
42246            lastWeek: 'dddd [seo caite] [ag] LT',
42247            sameElse: 'L',
42248        },
42249        relativeTime: {
42250            future: 'i %s',
42251            past: '%s ó shin',
42252            s: 'cúpla soicind',
42253            ss: '%d soicind',
42254            m: 'nóiméad',
42255            mm: '%d nóiméad',
42256            h: 'uair an chloig',
42257            hh: '%d uair an chloig',
42258            d: 'lá',
42259            dd: '%d lá',
42260            M: 'mí',
42261            MM: '%d míonna',
42262            y: 'bliain',
42263            yy: '%d bliain',
42264        },
42265        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
42266        ordinal: function (number) {
42267            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
42268            return number + output;
42269        },
42270        week: {
42271            dow: 1, // Monday is the first day of the week.
42272            doy: 4, // The week that contains Jan 4th is the first week of the year.
42273        },
42274    });
42275
42276    return ga;
42277
42278})));
42279
42280
42281/***/ }),
42282
vendor: 3,226 bytes, lines 42283-42397
42283/***/ "./node_modules/moment/locale/gd.js":
42284/*!******************************************!*\
42285  !*** ./node_modules/moment/locale/gd.js ***!
42286  \******************************************/
42287/*! no static exports found */
42288/***/ (function(module, exports, __webpack_require__) {
42289
42290//! moment.js locale configuration
42291//! locale : Scottish Gaelic [gd]
42292//! author : Jon Ashdown : https://github.com/jonashdown
42293
42294;(function (global, factory) {
42295    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
42296   undefined
42297}(this, (function (moment) { 'use strict';
42298
42299    //! moment.js locale configuration
42300
42301    var months = [
42302            'Am Faoilleach',
42303            'An Gearran',
42304            'Am Màrt',
42305            'An Giblean',
42306            'An Cèitean',
42307            'An t-Ògmhios',
42308            'An t-Iuchar',
42309            'An Lùnastal',
42310            'An t-Sultain',
42311            'An Dàmhair',
42312            'An t-Samhain',
42313            'An Dùbhlachd',
42314        ],
42315        monthsShort = [
42316            'Faoi',
42317            'Gear',
42318            'Màrt',
42319            'Gibl',
42320            'Cèit',
42321            'Ògmh',
42322            'Iuch',
42323            'Lùn',
42324            'Sult',
42325            'Dàmh',
42326            'Samh',
42327            'Dùbh',
42328        ],
42329        weekdays = [
42330            'Didòmhnaich',
42331            'Diluain',
42332            'Dimàirt',
42333            'Diciadain',
42334            'Diardaoin',
42335            'Dihaoine',
42336            'Disathairne',
42337        ],
42338        weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],
42339        weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
42340
42341    var gd = moment.defineLocale('gd', {
42342        months: months,
42343        monthsShort: monthsShort,
42344        monthsParseExact: true,
42345        weekdays: weekdays,
42346        weekdaysShort: weekdaysShort,
42347        weekdaysMin: weekdaysMin,
42348        longDateFormat: {
42349            LT: 'HH:mm',
42350            LTS: 'HH:mm:ss',
42351            L: 'DD/MM/YYYY',
42352            LL: 'D MMMM YYYY',
42353            LLL: 'D MMMM YYYY HH:mm',
42354            LLLL: 'dddd, D MMMM YYYY HH:mm',
42355        },
42356        calendar: {
42357            sameDay: '[An-diugh aig] LT',
42358            nextDay: '[A-màireach aig] LT',
42359            nextWeek: 'dddd [aig] LT',
42360            lastDay: '[An-dè aig] LT',
42361            lastWeek: 'dddd [seo chaidh] [aig] LT',
42362            sameElse: 'L',
42363        },
42364        relativeTime: {
42365            future: 'ann an %s',
42366            past: 'bho chionn %s',
42367            s: 'beagan diogan',
42368            ss: '%d diogan',
42369            m: 'mionaid',
42370            mm: '%d mionaidean',
42371            h: 'uair',
42372            hh: '%d uairean',
42373            d: 'latha',
42374            dd: '%d latha',
42375            M: 'mìos',
42376            MM: '%d mìosan',
42377            y: 'bliadhna',
42378            yy: '%d bliadhna',
42379        },
42380        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
42381        ordinal: function (number) {
42382            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
42383            return number + output;
42384        },
42385        week: {
42386            dow: 1, // Monday is the first day of the week.
42387            doy: 4, // The week that contains Jan 4th is the first week of the year.
42388        },
42389    });
42390
42391    return gd;
42392
42393})));
42394
42395
42396/***/ }),
42397
vendor: 3,117 bytes, lines 42398-42492
42398/***/ "./node_modules/moment/locale/gl.js":
42399/*!******************************************!*\
42400  !*** ./node_modules/moment/locale/gl.js ***!
42401  \******************************************/
42402/*! no static exports found */
42403/***/ (function(module, exports, __webpack_require__) {
42404
42405//! moment.js locale configuration
42406//! locale : Galician [gl]
42407//! author : Juan G. Hurtado : https://github.com/juanghurtado
42408
42409;(function (global, factory) {
42410    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
42411   undefined
42412}(this, (function (moment) { 'use strict';
42413
42414    //! moment.js locale configuration
42415
42416    var gl = moment.defineLocale('gl', {
42417        months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(
42418            '_'
42419        ),
42420        monthsShort:
42421            'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(
42422                '_'
42423            ),
42424        monthsParseExact: true,
42425        weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
42426        weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
42427        weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),
42428        weekdaysParseExact: true,
42429        longDateFormat: {
42430            LT: 'H:mm',
42431            LTS: 'H:mm:ss',
42432            L: 'DD/MM/YYYY',
42433            LL: 'D [de] MMMM [de] YYYY',
42434            LLL: 'D [de] MMMM [de] YYYY H:mm',
42435            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
42436        },
42437        calendar: {
42438            sameDay: function () {
42439                return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';
42440            },
42441            nextDay: function () {
42442                return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';
42443            },
42444            nextWeek: function () {
42445                return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';
42446            },
42447            lastDay: function () {
42448                return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';
42449            },
42450            lastWeek: function () {
42451                return (
42452                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'
42453                );
42454            },
42455            sameElse: 'L',
42456        },
42457        relativeTime: {
42458            future: function (str) {
42459                if (str.indexOf('un') === 0) {
42460                    return 'n' + str;
42461                }
42462                return 'en ' + str;
42463            },
42464            past: 'hai %s',
42465            s: 'uns segundos',
42466            ss: '%d segundos',
42467            m: 'un minuto',
42468            mm: '%d minutos',
42469            h: 'unha hora',
42470            hh: '%d horas',
42471            d: 'un día',
42472            dd: '%d días',
42473            M: 'un mes',
42474            MM: '%d meses',
42475            y: 'un ano',
42476            yy: '%d anos',
42477        },
42478        dayOfMonthOrdinalParse: /\d{1,2}º/,
42479        ordinal: '%dº',
42480        week: {
42481            dow: 1, // Monday is the first day of the week.
42482            doy: 4, // The week that contains Jan 4th is the first week of the year.
42483        },
42484    });
42485
42486    return gl;
42487
42488})));
42489
42490
42491/***/ }),
42492
vendor: 6,510 bytes, lines 42493-42638
42493/***/ "./node_modules/moment/locale/gom-deva.js":
42494/*!************************************************!*\
42495  !*** ./node_modules/moment/locale/gom-deva.js ***!
42496  \************************************************/
42497/*! no static exports found */
42498/***/ (function(module, exports, __webpack_require__) {
42499
42500//! moment.js locale configuration
42501//! locale : Konkani Devanagari script [gom-deva]
42502//! author : The Discoverer : https://github.com/WikiDiscoverer
42503
42504;(function (global, factory) {
42505    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
42506   undefined
42507}(this, (function (moment) { 'use strict';
42508
42509    //! moment.js locale configuration
42510
42511    function processRelativeTime(number, withoutSuffix, key, isFuture) {
42512        var format = {
42513            s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],
42514            ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],
42515            m: ['एका मिणटान', 'एक मिनूट'],
42516            mm: [number + ' मिणटांनी', number + ' मिणटां'],
42517            h: ['एका वरान', 'एक वर'],
42518            hh: [number + ' वरांनी', number + ' वरां'],
42519            d: ['एका दिसान', 'एक दीस'],
42520            dd: [number + ' दिसांनी', number + ' दीस'],
42521            M: ['एका म्हयन्यान', 'एक म्हयनो'],
42522            MM: [number + ' म्हयन्यानी', number + ' म्हयने'],
42523            y: ['एका वर्सान', 'एक वर्स'],
42524            yy: [number + ' वर्सांनी', number + ' वर्सां'],
42525        };
42526        return isFuture ? format[key][0] : format[key][1];
42527    }
42528
42529    var gomDeva = moment.defineLocale('gom-deva', {
42530        months: {
42531            standalone:
42532                'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(
42533                    '_'
42534                ),
42535            format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(
42536                '_'
42537            ),
42538            isFormat: /MMMM(\s)+D[oD]?/,
42539        },
42540        monthsShort:
42541            'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(
42542                '_'
42543            ),
42544        monthsParseExact: true,
42545        weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),
42546        weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),
42547        weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),
42548        weekdaysParseExact: true,
42549        longDateFormat: {
42550            LT: 'A h:mm [वाजतां]',
42551            LTS: 'A h:mm:ss [वाजतां]',
42552            L: 'DD-MM-YYYY',
42553            LL: 'D MMMM YYYY',
42554            LLL: 'D MMMM YYYY A h:mm [वाजतां]',
42555            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',
42556            llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',
42557        },
42558        calendar: {
42559            sameDay: '[आयज] LT',
42560            nextDay: '[फाल्यां] LT',
42561            nextWeek: '[फुडलो] dddd[,] LT',
42562            lastDay: '[काल] LT',
42563            lastWeek: '[फाटलो] dddd[,] LT',
42564            sameElse: 'L',
42565        },
42566        relativeTime: {
42567            future: '%s',
42568            past: '%s आदीं',
42569            s: processRelativeTime,
42570            ss: processRelativeTime,
42571            m: processRelativeTime,
42572            mm: processRelativeTime,
42573            h: processRelativeTime,
42574            hh: processRelativeTime,
42575            d: processRelativeTime,
42576            dd: processRelativeTime,
42577            M: processRelativeTime,
42578            MM: processRelativeTime,
42579            y: processRelativeTime,
42580            yy: processRelativeTime,
42581        },
42582        dayOfMonthOrdinalParse: /\d{1,2}(वेर)/,
42583        ordinal: function (number, period) {
42584            switch (period) {
42585                // the ordinal 'वेर' only applies to day of the month
42586                case 'D':
42587                    return number + 'वेर';
42588                default:
42589                case 'M':
42590                case 'Q':
42591                case 'DDD':
42592                case 'd':
42593                case 'w':
42594                case 'W':
42595                    return number;
42596            }
42597        },
42598        week: {
42599            dow: 0, // Sunday is the first day of the week
42600            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
42601        },
42602        meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,
42603        meridiemHour: function (hour, meridiem) {
42604            if (hour === 12) {
42605                hour = 0;
42606            }
42607            if (meridiem === 'राती') {
42608                return hour < 4 ? hour : hour + 12;
42609            } else if (meridiem === 'सकाळीं') {
42610                return hour;
42611            } else if (meridiem === 'दनपारां') {
42612                return hour > 12 ? hour : hour + 12;
42613            } else if (meridiem === 'सांजे') {
42614                return hour + 12;
42615            }
42616        },
42617        meridiem: function (hour, minute, isLower) {
42618            if (hour < 4) {
42619                return 'राती';
42620            } else if (hour < 12) {
42621                return 'सकाळीं';
42622            } else if (hour < 16) {
42623                return 'दनपारां';
42624            } else if (hour < 20) {
42625                return 'सांजे';
42626            } else {
42627                return 'राती';
42628            }
42629        },
42630    });
42631
42632    return gomDeva;
42633
42634})));
42635
42636
42637/***/ }),
42638
vendor: 5,126 bytes, lines 42639-42782
42639/***/ "./node_modules/moment/locale/gom-latn.js":
42640/*!************************************************!*\
42641  !*** ./node_modules/moment/locale/gom-latn.js ***!
42642  \************************************************/
42643/*! no static exports found */
42644/***/ (function(module, exports, __webpack_require__) {
42645
42646//! moment.js locale configuration
42647//! locale : Konkani Latin script [gom-latn]
42648//! author : The Discoverer : https://github.com/WikiDiscoverer
42649
42650;(function (global, factory) {
42651    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
42652   undefined
42653}(this, (function (moment) { 'use strict';
42654
42655    //! moment.js locale configuration
42656
42657    function processRelativeTime(number, withoutSuffix, key, isFuture) {
42658        var format = {
42659            s: ['thoddea sekondamni', 'thodde sekond'],
42660            ss: [number + ' sekondamni', number + ' sekond'],
42661            m: ['eka mintan', 'ek minut'],
42662            mm: [number + ' mintamni', number + ' mintam'],
42663            h: ['eka voran', 'ek vor'],
42664            hh: [number + ' voramni', number + ' voram'],
42665            d: ['eka disan', 'ek dis'],
42666            dd: [number + ' disamni', number + ' dis'],
42667            M: ['eka mhoinean', 'ek mhoino'],
42668            MM: [number + ' mhoineamni', number + ' mhoine'],
42669            y: ['eka vorsan', 'ek voros'],
42670            yy: [number + ' vorsamni', number + ' vorsam'],
42671        };
42672        return isFuture ? format[key][0] : format[key][1];
42673    }
42674
42675    var gomLatn = moment.defineLocale('gom-latn', {
42676        months: {
42677            standalone:
42678                'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(
42679                    '_'
42680                ),
42681            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(
42682                '_'
42683            ),
42684            isFormat: /MMMM(\s)+D[oD]?/,
42685        },
42686        monthsShort:
42687            'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),
42688        monthsParseExact: true,
42689        weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'),
42690        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),
42691        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),
42692        weekdaysParseExact: true,
42693        longDateFormat: {
42694            LT: 'A h:mm [vazta]',
42695            LTS: 'A h:mm:ss [vazta]',
42696            L: 'DD-MM-YYYY',
42697            LL: 'D MMMM YYYY',
42698            LLL: 'D MMMM YYYY A h:mm [vazta]',
42699            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',
42700            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',
42701        },
42702        calendar: {
42703            sameDay: '[Aiz] LT',
42704            nextDay: '[Faleam] LT',
42705            nextWeek: '[Fuddlo] dddd[,] LT',
42706            lastDay: '[Kal] LT',
42707            lastWeek: '[Fattlo] dddd[,] LT',
42708            sameElse: 'L',
42709        },
42710        relativeTime: {
42711            future: '%s',
42712            past: '%s adim',
42713            s: processRelativeTime,
42714            ss: processRelativeTime,
42715            m: processRelativeTime,
42716            mm: processRelativeTime,
42717            h: processRelativeTime,
42718            hh: processRelativeTime,
42719            d: processRelativeTime,
42720            dd: processRelativeTime,
42721            M: processRelativeTime,
42722            MM: processRelativeTime,
42723            y: processRelativeTime,
42724            yy: processRelativeTime,
42725        },
42726        dayOfMonthOrdinalParse: /\d{1,2}(er)/,
42727        ordinal: function (number, period) {
42728            switch (period) {
42729                // the ordinal 'er' only applies to day of the month
42730                case 'D':
42731                    return number + 'er';
42732                default:
42733                case 'M':
42734                case 'Q':
42735                case 'DDD':
42736                case 'd':
42737                case 'w':
42738                case 'W':
42739                    return number;
42740            }
42741        },
42742        week: {
42743            dow: 0, // Sunday is the first day of the week
42744            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
42745        },
42746        meridiemParse: /rati|sokallim|donparam|sanje/,
42747        meridiemHour: function (hour, meridiem) {
42748            if (hour === 12) {
42749                hour = 0;
42750            }
42751            if (meridiem === 'rati') {
42752                return hour < 4 ? hour : hour + 12;
42753            } else if (meridiem === 'sokallim') {
42754                return hour;
42755            } else if (meridiem === 'donparam') {
42756                return hour > 12 ? hour : hour + 12;
42757            } else if (meridiem === 'sanje') {
42758                return hour + 12;
42759            }
42760        },
42761        meridiem: function (hour, minute, isLower) {
42762            if (hour < 4) {
42763                return 'rati';
42764            } else if (hour < 12) {
42765                return 'sokallim';
42766            } else if (hour < 16) {
42767                return 'donparam';
42768            } else if (hour < 20) {
42769                return 'sanje';
42770            } else {
42771                return 'rati';
42772            }
42773        },
42774    });
42775
42776    return gomLatn;
42777
42778})));
42779
42780
42781/***/ }),
42782
vendor: 5,086 bytes, lines 42783-42924
42783/***/ "./node_modules/moment/locale/gu.js":
42784/*!******************************************!*\
42785  !*** ./node_modules/moment/locale/gu.js ***!
42786  \******************************************/
42787/*! no static exports found */
42788/***/ (function(module, exports, __webpack_require__) {
42789
42790//! moment.js locale configuration
42791//! locale : Gujarati [gu]
42792//! author : Kaushik Thanki : https://github.com/Kaushik1987
42793
42794;(function (global, factory) {
42795    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
42796   undefined
42797}(this, (function (moment) { 'use strict';
42798
42799    //! moment.js locale configuration
42800
42801    var symbolMap = {
42802            1: 'à«§',
42803            2: '૨',
42804            3: 'à«©',
42805            4: '૪',
42806            5: 'à««',
42807            6: '૬',
42808            7: 'à«­',
42809            8: 'à«®',
42810            9: '૯',
42811            0: '૦',
42812        },
42813        numberMap = {
42814            'à«§': '1',
42815            '૨': '2',
42816            'à«©': '3',
42817            '૪': '4',
42818            'à««': '5',
42819            '૬': '6',
42820            'à«­': '7',
42821            'à«®': '8',
42822            '૯': '9',
42823            '૦': '0',
42824        };
42825
42826    var gu = moment.defineLocale('gu', {
42827        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(
42828            '_'
42829        ),
42830        monthsShort:
42831            'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(
42832                '_'
42833            ),
42834        monthsParseExact: true,
42835        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(
42836            '_'
42837        ),
42838        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),
42839        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),
42840        longDateFormat: {
42841            LT: 'A h:mm વાગ્યે',
42842            LTS: 'A h:mm:ss વાગ્યે',
42843            L: 'DD/MM/YYYY',
42844            LL: 'D MMMM YYYY',
42845            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',
42846            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',
42847        },
42848        calendar: {
42849            sameDay: '[આજ] LT',
42850            nextDay: '[કાલે] LT',
42851            nextWeek: 'dddd, LT',
42852            lastDay: '[ગઇકાલે] LT',
42853            lastWeek: '[પાછલા] dddd, LT',
42854            sameElse: 'L',
42855        },
42856        relativeTime: {
42857            future: '%s મા',
42858            past: '%s પહેલા',
42859            s: 'અમુક પળો',
42860            ss: '%d સેકંડ',
42861            m: 'એક મિનિટ',
42862            mm: '%d મિનિટ',
42863            h: 'એક કલાક',
42864            hh: '%d કલાક',
42865            d: 'એક દિવસ',
42866            dd: '%d દિવસ',
42867            M: 'એક મહિનો',
42868            MM: '%d મહિનો',
42869            y: 'એક વર્ષ',
42870            yy: '%d વર્ષ',
42871        },
42872        preparse: function (string) {
42873            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {
42874                return numberMap[match];
42875            });
42876        },
42877        postformat: function (string) {
42878            return string.replace(/\d/g, function (match) {
42879                return symbolMap[match];
42880            });
42881        },
42882        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists
42883        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.
42884        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,
42885        meridiemHour: function (hour, meridiem) {
42886            if (hour === 12) {
42887                hour = 0;
42888            }
42889            if (meridiem === 'રાત') {
42890                return hour < 4 ? hour : hour + 12;
42891            } else if (meridiem === 'સવાર') {
42892                return hour;
42893            } else if (meridiem === 'બપોર') {
42894                return hour >= 10 ? hour : hour + 12;
42895            } else if (meridiem === 'સાંજ') {
42896                return hour + 12;
42897            }
42898        },
42899        meridiem: function (hour, minute, isLower) {
42900            if (hour < 4) {
42901                return 'રાત';
42902            } else if (hour < 10) {
42903                return 'સવાર';
42904            } else if (hour < 17) {
42905                return 'બપોર';
42906            } else if (hour < 20) {
42907                return 'સાંજ';
42908            } else {
42909                return 'રાત';
42910            }
42911        },
42912        week: {
42913            dow: 0, // Sunday is the first day of the week.
42914            doy: 6, // The week that contains Jan 6th is the first week of the year.
42915        },
42916    });
42917
42918    return gu;
42919
42920})));
42921
42922
42923/***/ }),
42924
vendor: 4,049 bytes, lines 42925-43038
42925/***/ "./node_modules/moment/locale/he.js":
42926/*!******************************************!*\
42927  !*** ./node_modules/moment/locale/he.js ***!
42928  \******************************************/
42929/*! no static exports found */
42930/***/ (function(module, exports, __webpack_require__) {
42931
42932//! moment.js locale configuration
42933//! locale : Hebrew [he]
42934//! author : Tomer Cohen : https://github.com/tomer
42935//! author : Moshe Simantov : https://github.com/DevelopmentIL
42936//! author : Tal Ater : https://github.com/TalAter
42937
42938;(function (global, factory) {
42939    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
42940   undefined
42941}(this, (function (moment) { 'use strict';
42942
42943    //! moment.js locale configuration
42944
42945    var he = moment.defineLocale('he', {
42946        months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(
42947            '_'
42948        ),
42949        monthsShort:
42950            'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),
42951        weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
42952        weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
42953        weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),
42954        longDateFormat: {
42955            LT: 'HH:mm',
42956            LTS: 'HH:mm:ss',
42957            L: 'DD/MM/YYYY',
42958            LL: 'D [ב]MMMM YYYY',
42959            LLL: 'D [ב]MMMM YYYY HH:mm',
42960            LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',
42961            l: 'D/M/YYYY',
42962            ll: 'D MMM YYYY',
42963            lll: 'D MMM YYYY HH:mm',
42964            llll: 'ddd, D MMM YYYY HH:mm',
42965        },
42966        calendar: {
42967            sameDay: '[היום ב־]LT',
42968            nextDay: '[מחר ב־]LT',
42969            nextWeek: 'dddd [בשעה] LT',
42970            lastDay: '[אתמול ב־]LT',
42971            lastWeek: '[ביום] dddd [האחרון בשעה] LT',
42972            sameElse: 'L',
42973        },
42974        relativeTime: {
42975            future: 'בעוד %s',
42976            past: 'לפני %s',
42977            s: 'מספר שניות',
42978            ss: '%d שניות',
42979            m: 'דקה',
42980            mm: '%d דקות',
42981            h: 'שעה',
42982            hh: function (number) {
42983                if (number === 2) {
42984                    return 'שעתיים';
42985                }
42986                return number + ' שעות';
42987            },
42988            d: 'יום',
42989            dd: function (number) {
42990                if (number === 2) {
42991                    return 'יומיים';
42992                }
42993                return number + ' ימים';
42994            },
42995            M: 'חודש',
42996            MM: function (number) {
42997                if (number === 2) {
42998                    return 'חודשיים';
42999                }
43000                return number + ' חודשים';
43001            },
43002            y: 'שנה',
43003            yy: function (number) {
43004                if (number === 2) {
43005                    return 'שנתיים';
43006                } else if (number % 10 === 0 && number !== 10) {
43007                    return number + ' שנה';
43008                }
43009                return number + ' שנים';
43010            },
43011        },
43012        meridiemParse:
43013            /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
43014        isPM: function (input) {
43015            return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
43016        },
43017        meridiem: function (hour, minute, isLower) {
43018            if (hour < 5) {
43019                return 'לפנות בוקר';
43020            } else if (hour < 10) {
43021                return 'בבוקר';
43022            } else if (hour < 12) {
43023                return isLower ? 'לפנה"צ' : 'לפני הצהריים';
43024            } else if (hour < 18) {
43025                return isLower ? 'אחה"צ' : 'אחרי הצהריים';
43026            } else {
43027                return 'בערב';
43028            }
43029        },
43030    });
43031
43032    return he;
43033
43034})));
43035
43036
43037/***/ }),
43038
vendor: 7,535 bytes, lines 43039-43226
43039/***/ "./node_modules/moment/locale/hi.js":
43040/*!******************************************!*\
43041  !*** ./node_modules/moment/locale/hi.js ***!
43042  \******************************************/
43043/*! no static exports found */
43044/***/ (function(module, exports, __webpack_require__) {
43045
43046//! moment.js locale configuration
43047//! locale : Hindi [hi]
43048//! author : Mayank Singhal : https://github.com/mayanksinghal
43049
43050;(function (global, factory) {
43051    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
43052   undefined
43053}(this, (function (moment) { 'use strict';
43054
43055    //! moment.js locale configuration
43056
43057    var symbolMap = {
43058            1: '१',
43059            2: '२',
43060            3: '३',
43061            4: '४',
43062            5: '५',
43063            6: '६',
43064            7: '७',
43065            8: '८',
43066            9: '९',
43067            0: '०',
43068        },
43069        numberMap = {
43070            '१': '1',
43071            '२': '2',
43072            '३': '3',
43073            '४': '4',
43074            '५': '5',
43075            '६': '6',
43076            '७': '7',
43077            '८': '8',
43078            '९': '9',
43079            '०': '0',
43080        },
43081        monthsParse = [
43082            /^जन/i,
43083            /^फ़र|फर/i,
43084            /^मार्च/i,
43085            /^अप्रै/i,
43086            /^मई/i,
43087            /^जून/i,
43088            /^जुल/i,
43089            /^अग/i,
43090            /^सितं|सित/i,
43091            /^अक्टू/i,
43092            /^नव|नवं/i,
43093            /^दिसं|दिस/i,
43094        ],
43095        shortMonthsParse = [
43096            /^जन/i,
43097            /^फ़र/i,
43098            /^मार्च/i,
43099            /^अप्रै/i,
43100            /^मई/i,
43101            /^जून/i,
43102            /^जुल/i,
43103            /^अग/i,
43104            /^सित/i,
43105            /^अक्टू/i,
43106            /^नव/i,
43107            /^दिस/i,
43108        ];
43109
43110    var hi = moment.defineLocale('hi', {
43111        months: {
43112            format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(
43113                '_'
43114            ),
43115            standalone:
43116                'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split(
43117                    '_'
43118                ),
43119        },
43120        monthsShort:
43121            'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),
43122        weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
43123        weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
43124        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),
43125        longDateFormat: {
43126            LT: 'A h:mm बजे',
43127            LTS: 'A h:mm:ss बजे',
43128            L: 'DD/MM/YYYY',
43129            LL: 'D MMMM YYYY',
43130            LLL: 'D MMMM YYYY, A h:mm बजे',
43131            LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',
43132        },
43133
43134        monthsParse: monthsParse,
43135        longMonthsParse: monthsParse,
43136        shortMonthsParse: shortMonthsParse,
43137
43138        monthsRegex:
43139            /^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i,
43140
43141        monthsShortRegex:
43142            /^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i,
43143
43144        monthsStrictRegex:
43145            /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,
43146
43147        monthsShortStrictRegex:
43148            /^(जन\.?|फ़र\.?|मार्च?|अप्रै\.?|मई?|जून?|जुल\.?|अग\.?|सित\.?|अक्टू\.?|नव\.?|दिस\.?)/i,
43149
43150        calendar: {
43151            sameDay: '[आज] LT',
43152            nextDay: '[कल] LT',
43153            nextWeek: 'dddd, LT',
43154            lastDay: '[कल] LT',
43155            lastWeek: '[पिछले] dddd, LT',
43156            sameElse: 'L',
43157        },
43158        relativeTime: {
43159            future: '%s में',
43160            past: '%s पहले',
43161            s: 'कुछ ही क्षण',
43162            ss: '%d सेकंड',
43163            m: 'एक मिनट',
43164            mm: '%d मिनट',
43165            h: 'एक घंटा',
43166            hh: '%d घंटे',
43167            d: 'एक दिन',
43168            dd: '%d दिन',
43169            M: 'एक महीने',
43170            MM: '%d महीने',
43171            y: 'एक वर्ष',
43172            yy: '%d वर्ष',
43173        },
43174        preparse: function (string) {
43175            return string.replace(/[१२३४५६७८९०]/g, function (match) {
43176                return numberMap[match];
43177            });
43178        },
43179        postformat: function (string) {
43180            return string.replace(/\d/g, function (match) {
43181                return symbolMap[match];
43182            });
43183        },
43184        // Hindi notation for meridiems are quite fuzzy in practice. While there exists
43185        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
43186        meridiemParse: /रात|सुबह|दोपहर|शाम/,
43187        meridiemHour: function (hour, meridiem) {
43188            if (hour === 12) {
43189                hour = 0;
43190            }
43191            if (meridiem === 'रात') {
43192                return hour < 4 ? hour : hour + 12;
43193            } else if (meridiem === 'सुबह') {
43194                return hour;
43195            } else if (meridiem === 'दोपहर') {
43196                return hour >= 10 ? hour : hour + 12;
43197            } else if (meridiem === 'शाम') {
43198                return hour + 12;
43199            }
43200        },
43201        meridiem: function (hour, minute, isLower) {
43202            if (hour < 4) {
43203                return 'रात';
43204            } else if (hour < 10) {
43205                return 'सुबह';
43206            } else if (hour < 17) {
43207                return 'दोपहर';
43208            } else if (hour < 20) {
43209                return 'शाम';
43210            } else {
43211                return 'रात';
43212            }
43213        },
43214        week: {
43215            dow: 0, // Sunday is the first day of the week.
43216            doy: 6, // The week that contains Jan 6th is the first week of the year.
43217        },
43218    });
43219
43220    return hi;
43221
43222})));
43223
43224
43225/***/ }),
43226
vendor: 5,808 bytes, lines 43227-43402
43227/***/ "./node_modules/moment/locale/hr.js":
43228/*!******************************************!*\
43229  !*** ./node_modules/moment/locale/hr.js ***!
43230  \******************************************/
43231/*! no static exports found */
43232/***/ (function(module, exports, __webpack_require__) {
43233
43234//! moment.js locale configuration
43235//! locale : Croatian [hr]
43236//! author : Bojan Marković : https://github.com/bmarkovic
43237
43238;(function (global, factory) {
43239    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
43240   undefined
43241}(this, (function (moment) { 'use strict';
43242
43243    //! moment.js locale configuration
43244
43245    function translate(number, withoutSuffix, key) {
43246        var result = number + ' ';
43247        switch (key) {
43248            case 'ss':
43249                if (number === 1) {
43250                    result += 'sekunda';
43251                } else if (number === 2 || number === 3 || number === 4) {
43252                    result += 'sekunde';
43253                } else {
43254                    result += 'sekundi';
43255                }
43256                return result;
43257            case 'm':
43258                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
43259            case 'mm':
43260                if (number === 1) {
43261                    result += 'minuta';
43262                } else if (number === 2 || number === 3 || number === 4) {
43263                    result += 'minute';
43264                } else {
43265                    result += 'minuta';
43266                }
43267                return result;
43268            case 'h':
43269                return withoutSuffix ? 'jedan sat' : 'jednog sata';
43270            case 'hh':
43271                if (number === 1) {
43272                    result += 'sat';
43273                } else if (number === 2 || number === 3 || number === 4) {
43274                    result += 'sata';
43275                } else {
43276                    result += 'sati';
43277                }
43278                return result;
43279            case 'dd':
43280                if (number === 1) {
43281                    result += 'dan';
43282                } else {
43283                    result += 'dana';
43284                }
43285                return result;
43286            case 'MM':
43287                if (number === 1) {
43288                    result += 'mjesec';
43289                } else if (number === 2 || number === 3 || number === 4) {
43290                    result += 'mjeseca';
43291                } else {
43292                    result += 'mjeseci';
43293                }
43294                return result;
43295            case 'yy':
43296                if (number === 1) {
43297                    result += 'godina';
43298                } else if (number === 2 || number === 3 || number === 4) {
43299                    result += 'godine';
43300                } else {
43301                    result += 'godina';
43302                }
43303                return result;
43304        }
43305    }
43306
43307    var hr = moment.defineLocale('hr', {
43308        months: {
43309            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(
43310                '_'
43311            ),
43312            standalone:
43313                'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(
43314                    '_'
43315                ),
43316        },
43317        monthsShort:
43318            'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(
43319                '_'
43320            ),
43321        monthsParseExact: true,
43322        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
43323            '_'
43324        ),
43325        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
43326        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
43327        weekdaysParseExact: true,
43328        longDateFormat: {
43329            LT: 'H:mm',
43330            LTS: 'H:mm:ss',
43331            L: 'DD.MM.YYYY',
43332            LL: 'Do MMMM YYYY',
43333            LLL: 'Do MMMM YYYY H:mm',
43334            LLLL: 'dddd, Do MMMM YYYY H:mm',
43335        },
43336        calendar: {
43337            sameDay: '[danas u] LT',
43338            nextDay: '[sutra u] LT',
43339            nextWeek: function () {
43340                switch (this.day()) {
43341                    case 0:
43342                        return '[u] [nedjelju] [u] LT';
43343                    case 3:
43344                        return '[u] [srijedu] [u] LT';
43345                    case 6:
43346                        return '[u] [subotu] [u] LT';
43347                    case 1:
43348                    case 2:
43349                    case 4:
43350                    case 5:
43351                        return '[u] dddd [u] LT';
43352                }
43353            },
43354            lastDay: '[jučer u] LT',
43355            lastWeek: function () {
43356                switch (this.day()) {
43357                    case 0:
43358                        return '[prošlu] [nedjelju] [u] LT';
43359                    case 3:
43360                        return '[prošlu] [srijedu] [u] LT';
43361                    case 6:
43362                        return '[prošle] [subote] [u] LT';
43363                    case 1:
43364                    case 2:
43365                    case 4:
43366                    case 5:
43367                        return '[prošli] dddd [u] LT';
43368                }
43369            },
43370            sameElse: 'L',
43371        },
43372        relativeTime: {
43373            future: 'za %s',
43374            past: 'prije %s',
43375            s: 'par sekundi',
43376            ss: translate,
43377            m: translate,
43378            mm: translate,
43379            h: translate,
43380            hh: translate,
43381            d: 'dan',
43382            dd: translate,
43383            M: 'mjesec',
43384            MM: translate,
43385            y: 'godinu',
43386            yy: translate,
43387        },
43388        dayOfMonthOrdinalParse: /\d{1,2}\./,
43389        ordinal: '%d.',
43390        week: {
43391            dow: 1, // Monday is the first day of the week.
43392            doy: 7, // The week that contains Jan 7th is the first week of the year.
43393        },
43394    });
43395
43396    return hr;
43397
43398})));
43399
43400
43401/***/ }),
43402
vendor: 4,749 bytes, lines 43403-43540
43403/***/ "./node_modules/moment/locale/hu.js":
43404/*!******************************************!*\
43405  !*** ./node_modules/moment/locale/hu.js ***!
43406  \******************************************/
43407/*! no static exports found */
43408/***/ (function(module, exports, __webpack_require__) {
43409
43410//! moment.js locale configuration
43411//! locale : Hungarian [hu]
43412//! author : Adam Brunner : https://github.com/adambrunner
43413//! author : Peter Viszt  : https://github.com/passatgt
43414
43415;(function (global, factory) {
43416    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
43417   undefined
43418}(this, (function (moment) { 'use strict';
43419
43420    //! moment.js locale configuration
43421
43422    var weekEndings =
43423        'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
43424    function translate(number, withoutSuffix, key, isFuture) {
43425        var num = number;
43426        switch (key) {
43427            case 's':
43428                return isFuture || withoutSuffix
43429                    ? 'néhány másodperc'
43430                    : 'néhány másodperce';
43431            case 'ss':
43432                return num + (isFuture || withoutSuffix)
43433                    ? ' másodperc'
43434                    : ' másodperce';
43435            case 'm':
43436                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
43437            case 'mm':
43438                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
43439            case 'h':
43440                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
43441            case 'hh':
43442                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
43443            case 'd':
43444                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
43445            case 'dd':
43446                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
43447            case 'M':
43448                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
43449            case 'MM':
43450                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
43451            case 'y':
43452                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
43453            case 'yy':
43454                return num + (isFuture || withoutSuffix ? ' év' : ' éve');
43455        }
43456        return '';
43457    }
43458    function week(isFuture) {
43459        return (
43460            (isFuture ? '' : '[múlt] ') +
43461            '[' +
43462            weekEndings[this.day()] +
43463            '] LT[-kor]'
43464        );
43465    }
43466
43467    var hu = moment.defineLocale('hu', {
43468        months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(
43469            '_'
43470        ),
43471        monthsShort:
43472            'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split(
43473                '_'
43474            ),
43475        monthsParseExact: true,
43476        weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
43477        weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
43478        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),
43479        longDateFormat: {
43480            LT: 'H:mm',
43481            LTS: 'H:mm:ss',
43482            L: 'YYYY.MM.DD.',
43483            LL: 'YYYY. MMMM D.',
43484            LLL: 'YYYY. MMMM D. H:mm',
43485            LLLL: 'YYYY. MMMM D., dddd H:mm',
43486        },
43487        meridiemParse: /de|du/i,
43488        isPM: function (input) {
43489            return input.charAt(1).toLowerCase() === 'u';
43490        },
43491        meridiem: function (hours, minutes, isLower) {
43492            if (hours < 12) {
43493                return isLower === true ? 'de' : 'DE';
43494            } else {
43495                return isLower === true ? 'du' : 'DU';
43496            }
43497        },
43498        calendar: {
43499            sameDay: '[ma] LT[-kor]',
43500            nextDay: '[holnap] LT[-kor]',
43501            nextWeek: function () {
43502                return week.call(this, true);
43503            },
43504            lastDay: '[tegnap] LT[-kor]',
43505            lastWeek: function () {
43506                return week.call(this, false);
43507            },
43508            sameElse: 'L',
43509        },
43510        relativeTime: {
43511            future: '%s múlva',
43512            past: '%s',
43513            s: translate,
43514            ss: translate,
43515            m: translate,
43516            mm: translate,
43517            h: translate,
43518            hh: translate,
43519            d: translate,
43520            dd: translate,
43521            M: translate,
43522            MM: translate,
43523            y: translate,
43524            yy: translate,
43525        },
43526        dayOfMonthOrdinalParse: /\d{1,2}\./,
43527        ordinal: '%d.',
43528        week: {
43529            dow: 1, // Monday is the first day of the week.
43530            doy: 4, // The week that contains Jan 4th is the first week of the year.
43531        },
43532    });
43533
43534    return hu;
43535
43536})));
43537
43538
43539/***/ }),
43540
vendor: 4,098 bytes, lines 43541-43654
43541/***/ "./node_modules/moment/locale/hy-am.js":
43542/*!*********************************************!*\
43543  !*** ./node_modules/moment/locale/hy-am.js ***!
43544  \*********************************************/
43545/*! no static exports found */
43546/***/ (function(module, exports, __webpack_require__) {
43547
43548//! moment.js locale configuration
43549//! locale : Armenian [hy-am]
43550//! author : Armendarabyan : https://github.com/armendarabyan
43551
43552;(function (global, factory) {
43553    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
43554   undefined
43555}(this, (function (moment) { 'use strict';
43556
43557    //! moment.js locale configuration
43558
43559    var hyAm = moment.defineLocale('hy-am', {
43560        months: {
43561            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(
43562                '_'
43563            ),
43564            standalone:
43565                'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(
43566                    '_'
43567                ),
43568        },
43569        monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
43570        weekdays:
43571            'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(
43572                '_'
43573            ),
43574        weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
43575        weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
43576        longDateFormat: {
43577            LT: 'HH:mm',
43578            LTS: 'HH:mm:ss',
43579            L: 'DD.MM.YYYY',
43580            LL: 'D MMMM YYYY Õ©.',
43581            LLL: 'D MMMM YYYY Õ©., HH:mm',
43582            LLLL: 'dddd, D MMMM YYYY Õ©., HH:mm',
43583        },
43584        calendar: {
43585            sameDay: '[այսօր] LT',
43586            nextDay: '[Õ¾Õ¡Õ²Õ¨] LT',
43587            lastDay: '[երեկ] LT',
43588            nextWeek: function () {
43589                return 'dddd [օրը ժամը] LT';
43590            },
43591            lastWeek: function () {
43592                return '[անցած] dddd [օրը ժամը] LT';
43593            },
43594            sameElse: 'L',
43595        },
43596        relativeTime: {
43597            future: '%s Õ°Õ¥Õ¿Õ¸',
43598            past: '%s Õ¡Õ¼Õ¡Õ»',
43599            s: 'մի քանի վայրկյան',
43600            ss: '%d վայրկյան',
43601            m: 'րոպե',
43602            mm: '%d րոպե',
43603            h: 'ÕªÕ¡Õ´',
43604            hh: '%d ÕªÕ¡Õ´',
43605            d: 'օր',
43606            dd: '%d օր',
43607            M: 'Õ¡Õ´Õ«Õ½',
43608            MM: '%d Õ¡Õ´Õ«Õ½',
43609            y: 'տարի',
43610            yy: '%d տարի',
43611        },
43612        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,
43613        isPM: function (input) {
43614            return /^(ցերեկվա|երեկոյան)$/.test(input);
43615        },
43616        meridiem: function (hour) {
43617            if (hour < 4) {
43618                return 'գիշերվա';
43619            } else if (hour < 12) {
43620                return 'Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡';
43621            } else if (hour < 17) {
43622                return 'ցերեկվա';
43623            } else {
43624                return 'երեկոյան';
43625            }
43626        },
43627        dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
43628        ordinal: function (number, period) {
43629            switch (period) {
43630                case 'DDD':
43631                case 'w':
43632                case 'W':
43633                case 'DDDo':
43634                    if (number === 1) {
43635                        return number + '-Õ«Õ¶';
43636                    }
43637                    return number + '-րդ';
43638                default:
43639                    return number;
43640            }
43641        },
43642        week: {
43643            dow: 1, // Monday is the first day of the week.
43644            doy: 7, // The week that contains Jan 7th is the first week of the year.
43645        },
43646    });
43647
43648    return hyAm;
43649
43650})));
43651
43652
43653/***/ }),
43654
vendor: 3,145 bytes, lines 43655-43750
43655/***/ "./node_modules/moment/locale/id.js":
43656/*!******************************************!*\
43657  !*** ./node_modules/moment/locale/id.js ***!
43658  \******************************************/
43659/*! no static exports found */
43660/***/ (function(module, exports, __webpack_require__) {
43661
43662//! moment.js locale configuration
43663//! locale : Indonesian [id]
43664//! author : Mohammad Satrio Utomo : https://github.com/tyok
43665//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
43666
43667;(function (global, factory) {
43668    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
43669   undefined
43670}(this, (function (moment) { 'use strict';
43671
43672    //! moment.js locale configuration
43673
43674    var id = moment.defineLocale('id', {
43675        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(
43676            '_'
43677        ),
43678        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),
43679        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
43680        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
43681        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
43682        longDateFormat: {
43683            LT: 'HH.mm',
43684            LTS: 'HH.mm.ss',
43685            L: 'DD/MM/YYYY',
43686            LL: 'D MMMM YYYY',
43687            LLL: 'D MMMM YYYY [pukul] HH.mm',
43688            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
43689        },
43690        meridiemParse: /pagi|siang|sore|malam/,
43691        meridiemHour: function (hour, meridiem) {
43692            if (hour === 12) {
43693                hour = 0;
43694            }
43695            if (meridiem === 'pagi') {
43696                return hour;
43697            } else if (meridiem === 'siang') {
43698                return hour >= 11 ? hour : hour + 12;
43699            } else if (meridiem === 'sore' || meridiem === 'malam') {
43700                return hour + 12;
43701            }
43702        },
43703        meridiem: function (hours, minutes, isLower) {
43704            if (hours < 11) {
43705                return 'pagi';
43706            } else if (hours < 15) {
43707                return 'siang';
43708            } else if (hours < 19) {
43709                return 'sore';
43710            } else {
43711                return 'malam';
43712            }
43713        },
43714        calendar: {
43715            sameDay: '[Hari ini pukul] LT',
43716            nextDay: '[Besok pukul] LT',
43717            nextWeek: 'dddd [pukul] LT',
43718            lastDay: '[Kemarin pukul] LT',
43719            lastWeek: 'dddd [lalu pukul] LT',
43720            sameElse: 'L',
43721        },
43722        relativeTime: {
43723            future: 'dalam %s',
43724            past: '%s yang lalu',
43725            s: 'beberapa detik',
43726            ss: '%d detik',
43727            m: 'semenit',
43728            mm: '%d menit',
43729            h: 'sejam',
43730            hh: '%d jam',
43731            d: 'sehari',
43732            dd: '%d hari',
43733            M: 'sebulan',
43734            MM: '%d bulan',
43735            y: 'setahun',
43736            yy: '%d tahun',
43737        },
43738        week: {
43739            dow: 0, // Sunday is the first day of the week.
43740            doy: 6, // The week that contains Jan 6th is the first week of the year.
43741        },
43742    });
43743
43744    return id;
43745
43746})));
43747
43748
43749/***/ }),
43750
vendor: 5,484 bytes, lines 43751-43910
43751/***/ "./node_modules/moment/locale/is.js":
43752/*!******************************************!*\
43753  !*** ./node_modules/moment/locale/is.js ***!
43754  \******************************************/
43755/*! no static exports found */
43756/***/ (function(module, exports, __webpack_require__) {
43757
43758//! moment.js locale configuration
43759//! locale : Icelandic [is]
43760//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
43761
43762;(function (global, factory) {
43763    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
43764   undefined
43765}(this, (function (moment) { 'use strict';
43766
43767    //! moment.js locale configuration
43768
43769    function plural(n) {
43770        if (n % 100 === 11) {
43771            return true;
43772        } else if (n % 10 === 1) {
43773            return false;
43774        }
43775        return true;
43776    }
43777    function translate(number, withoutSuffix, key, isFuture) {
43778        var result = number + ' ';
43779        switch (key) {
43780            case 's':
43781                return withoutSuffix || isFuture
43782                    ? 'nokkrar sekúndur'
43783                    : 'nokkrum sekúndum';
43784            case 'ss':
43785                if (plural(number)) {
43786                    return (
43787                        result +
43788                        (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')
43789                    );
43790                }
43791                return result + 'sekúnda';
43792            case 'm':
43793                return withoutSuffix ? 'mínúta' : 'mínútu';
43794            case 'mm':
43795                if (plural(number)) {
43796                    return (
43797                        result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')
43798                    );
43799                } else if (withoutSuffix) {
43800                    return result + 'mínúta';
43801                }
43802                return result + 'mínútu';
43803            case 'hh':
43804                if (plural(number)) {
43805                    return (
43806                        result +
43807                        (withoutSuffix || isFuture
43808                            ? 'klukkustundir'
43809                            : 'klukkustundum')
43810                    );
43811                }
43812                return result + 'klukkustund';
43813            case 'd':
43814                if (withoutSuffix) {
43815                    return 'dagur';
43816                }
43817                return isFuture ? 'dag' : 'degi';
43818            case 'dd':
43819                if (plural(number)) {
43820                    if (withoutSuffix) {
43821                        return result + 'dagar';
43822                    }
43823                    return result + (isFuture ? 'daga' : 'dögum');
43824                } else if (withoutSuffix) {
43825                    return result + 'dagur';
43826                }
43827                return result + (isFuture ? 'dag' : 'degi');
43828            case 'M':
43829                if (withoutSuffix) {
43830                    return 'mánuður';
43831                }
43832                return isFuture ? 'mánuð' : 'mánuði';
43833            case 'MM':
43834                if (plural(number)) {
43835                    if (withoutSuffix) {
43836                        return result + 'mánuðir';
43837                    }
43838                    return result + (isFuture ? 'mánuði' : 'mánuðum');
43839                } else if (withoutSuffix) {
43840                    return result + 'mánuður';
43841                }
43842                return result + (isFuture ? 'mánuð' : 'mánuði');
43843            case 'y':
43844                return withoutSuffix || isFuture ? 'ár' : 'ári';
43845            case 'yy':
43846                if (plural(number)) {
43847                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
43848                }
43849                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
43850        }
43851    }
43852
43853    var is = moment.defineLocale('is', {
43854        months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(
43855            '_'
43856        ),
43857        monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
43858        weekdays:
43859            'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(
43860                '_'
43861            ),
43862        weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
43863        weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
43864        longDateFormat: {
43865            LT: 'H:mm',
43866            LTS: 'H:mm:ss',
43867            L: 'DD.MM.YYYY',
43868            LL: 'D. MMMM YYYY',
43869            LLL: 'D. MMMM YYYY [kl.] H:mm',
43870            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',
43871        },
43872        calendar: {
43873            sameDay: '[í dag kl.] LT',
43874            nextDay: '[á morgun kl.] LT',
43875            nextWeek: 'dddd [kl.] LT',
43876            lastDay: '[í gær kl.] LT',
43877            lastWeek: '[síðasta] dddd [kl.] LT',
43878            sameElse: 'L',
43879        },
43880        relativeTime: {
43881            future: 'eftir %s',
43882            past: 'fyrir %s síðan',
43883            s: translate,
43884            ss: translate,
43885            m: translate,
43886            mm: translate,
43887            h: 'klukkustund',
43888            hh: translate,
43889            d: translate,
43890            dd: translate,
43891            M: translate,
43892            MM: translate,
43893            y: translate,
43894            yy: translate,
43895        },
43896        dayOfMonthOrdinalParse: /\d{1,2}\./,
43897        ordinal: '%d.',
43898        week: {
43899            dow: 1, // Monday is the first day of the week.
43900            doy: 4, // The week that contains Jan 4th is the first week of the year.
43901        },
43902    });
43903
43904    return is;
43905
43906})));
43907
43908
43909/***/ }),
43910
vendor: 2,683 bytes, lines 43911-43994
43911/***/ "./node_modules/moment/locale/it-ch.js":
43912/*!*********************************************!*\
43913  !*** ./node_modules/moment/locale/it-ch.js ***!
43914  \*********************************************/
43915/*! no static exports found */
43916/***/ (function(module, exports, __webpack_require__) {
43917
43918//! moment.js locale configuration
43919//! locale : Italian (Switzerland) [it-ch]
43920//! author : xfh : https://github.com/xfh
43921
43922;(function (global, factory) {
43923    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
43924   undefined
43925}(this, (function (moment) { 'use strict';
43926
43927    //! moment.js locale configuration
43928
43929    var itCh = moment.defineLocale('it-ch', {
43930        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
43931            '_'
43932        ),
43933        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
43934        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(
43935            '_'
43936        ),
43937        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
43938        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
43939        longDateFormat: {
43940            LT: 'HH:mm',
43941            LTS: 'HH:mm:ss',
43942            L: 'DD.MM.YYYY',
43943            LL: 'D MMMM YYYY',
43944            LLL: 'D MMMM YYYY HH:mm',
43945            LLLL: 'dddd D MMMM YYYY HH:mm',
43946        },
43947        calendar: {
43948            sameDay: '[Oggi alle] LT',
43949            nextDay: '[Domani alle] LT',
43950            nextWeek: 'dddd [alle] LT',
43951            lastDay: '[Ieri alle] LT',
43952            lastWeek: function () {
43953                switch (this.day()) {
43954                    case 0:
43955                        return '[la scorsa] dddd [alle] LT';
43956                    default:
43957                        return '[lo scorso] dddd [alle] LT';
43958                }
43959            },
43960            sameElse: 'L',
43961        },
43962        relativeTime: {
43963            future: function (s) {
43964                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;
43965            },
43966            past: '%s fa',
43967            s: 'alcuni secondi',
43968            ss: '%d secondi',
43969            m: 'un minuto',
43970            mm: '%d minuti',
43971            h: "un'ora",
43972            hh: '%d ore',
43973            d: 'un giorno',
43974            dd: '%d giorni',
43975            M: 'un mese',
43976            MM: '%d mesi',
43977            y: 'un anno',
43978            yy: '%d anni',
43979        },
43980        dayOfMonthOrdinalParse: /\d{1,2}º/,
43981        ordinal: '%dº',
43982        week: {
43983            dow: 1, // Monday is the first day of the week.
43984            doy: 4, // The week that contains Jan 4th is the first week of the year.
43985        },
43986    });
43987
43988    return itCh;
43989
43990})));
43991
43992
43993/***/ }),
43994
vendor: 4,145 bytes, lines 43995-44120
43995/***/ "./node_modules/moment/locale/it.js":
43996/*!******************************************!*\
43997  !*** ./node_modules/moment/locale/it.js ***!
43998  \******************************************/
43999/*! no static exports found */
44000/***/ (function(module, exports, __webpack_require__) {
44001
44002//! moment.js locale configuration
44003//! locale : Italian [it]
44004//! author : Lorenzo : https://github.com/aliem
44005//! author: Mattia Larentis: https://github.com/nostalgiaz
44006//! author: Marco : https://github.com/Manfre98
44007
44008;(function (global, factory) {
44009    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
44010   undefined
44011}(this, (function (moment) { 'use strict';
44012
44013    //! moment.js locale configuration
44014
44015    var it = moment.defineLocale('it', {
44016        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
44017            '_'
44018        ),
44019        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
44020        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(
44021            '_'
44022        ),
44023        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
44024        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
44025        longDateFormat: {
44026            LT: 'HH:mm',
44027            LTS: 'HH:mm:ss',
44028            L: 'DD/MM/YYYY',
44029            LL: 'D MMMM YYYY',
44030            LLL: 'D MMMM YYYY HH:mm',
44031            LLLL: 'dddd D MMMM YYYY HH:mm',
44032        },
44033        calendar: {
44034            sameDay: function () {
44035                return (
44036                    '[Oggi a' +
44037                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
44038                    ']LT'
44039                );
44040            },
44041            nextDay: function () {
44042                return (
44043                    '[Domani a' +
44044                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
44045                    ']LT'
44046                );
44047            },
44048            nextWeek: function () {
44049                return (
44050                    'dddd [a' +
44051                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
44052                    ']LT'
44053                );
44054            },
44055            lastDay: function () {
44056                return (
44057                    '[Ieri a' +
44058                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
44059                    ']LT'
44060                );
44061            },
44062            lastWeek: function () {
44063                switch (this.day()) {
44064                    case 0:
44065                        return (
44066                            '[La scorsa] dddd [a' +
44067                            (this.hours() > 1
44068                                ? 'lle '
44069                                : this.hours() === 0
44070                                  ? ' '
44071                                  : "ll'") +
44072                            ']LT'
44073                        );
44074                    default:
44075                        return (
44076                            '[Lo scorso] dddd [a' +
44077                            (this.hours() > 1
44078                                ? 'lle '
44079                                : this.hours() === 0
44080                                  ? ' '
44081                                  : "ll'") +
44082                            ']LT'
44083                        );
44084                }
44085            },
44086            sameElse: 'L',
44087        },
44088        relativeTime: {
44089            future: 'tra %s',
44090            past: '%s fa',
44091            s: 'alcuni secondi',
44092            ss: '%d secondi',
44093            m: 'un minuto',
44094            mm: '%d minuti',
44095            h: "un'ora",
44096            hh: '%d ore',
44097            d: 'un giorno',
44098            dd: '%d giorni',
44099            w: 'una settimana',
44100            ww: '%d settimane',
44101            M: 'un mese',
44102            MM: '%d mesi',
44103            y: 'un anno',
44104            yy: '%d anni',
44105        },
44106        dayOfMonthOrdinalParse: /\d{1,2}º/,
44107        ordinal: '%dº',
44108        week: {
44109            dow: 1, // Monday is the first day of the week.
44110            doy: 4, // The week that contains Jan 4th is the first week of the year.
44111        },
44112    });
44113
44114    return it;
44115
44116})));
44117
44118
44119/***/ }),
44120
vendor: 5,017 bytes, lines 44121-44288
44121/***/ "./node_modules/moment/locale/ja.js":
44122/*!******************************************!*\
44123  !*** ./node_modules/moment/locale/ja.js ***!
44124  \******************************************/
44125/*! no static exports found */
44126/***/ (function(module, exports, __webpack_require__) {
44127
44128//! moment.js locale configuration
44129//! locale : Japanese [ja]
44130//! author : LI Long : https://github.com/baryon
44131
44132;(function (global, factory) {
44133    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
44134   undefined
44135}(this, (function (moment) { 'use strict';
44136
44137    //! moment.js locale configuration
44138
44139    var ja = moment.defineLocale('ja', {
44140        eras: [
44141            {
44142                since: '2019-05-01',
44143                offset: 1,
44144                name: '令和',
44145                narrow: '㋿',
44146                abbr: 'R',
44147            },
44148            {
44149                since: '1989-01-08',
44150                until: '2019-04-30',
44151                offset: 1,
44152                name: '平成',
44153                narrow: '㍻',
44154                abbr: 'H',
44155            },
44156            {
44157                since: '1926-12-25',
44158                until: '1989-01-07',
44159                offset: 1,
44160                name: '昭和',
44161                narrow: '㍼',
44162                abbr: 'S',
44163            },
44164            {
44165                since: '1912-07-30',
44166                until: '1926-12-24',
44167                offset: 1,
44168                name: '大正',
44169                narrow: '㍽',
44170                abbr: 'T',
44171            },
44172            {
44173                since: '1873-01-01',
44174                until: '1912-07-29',
44175                offset: 6,
44176                name: '明治',
44177                narrow: '㍾',
44178                abbr: 'M',
44179            },
44180            {
44181                since: '0001-01-01',
44182                until: '1873-12-31',
44183                offset: 1,
44184                name: '西暦',
44185                narrow: 'AD',
44186                abbr: 'AD',
44187            },
44188            {
44189                since: '0000-12-31',
44190                until: -Infinity,
44191                offset: 1,
44192                name: '紀元前',
44193                narrow: 'BC',
44194                abbr: 'BC',
44195            },
44196        ],
44197        eraYearOrdinalRegex: /(元|\d+)年/,
44198        eraYearOrdinalParse: function (input, match) {
44199            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);
44200        },
44201        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
44202        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
44203            '_'
44204        ),
44205        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
44206        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),
44207        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),
44208        longDateFormat: {
44209            LT: 'HH:mm',
44210            LTS: 'HH:mm:ss',
44211            L: 'YYYY/MM/DD',
44212            LL: 'YYYY年M月D日',
44213            LLL: 'YYYY年M月D日 HH:mm',
44214            LLLL: 'YYYY年M月D日 dddd HH:mm',
44215            l: 'YYYY/MM/DD',
44216            ll: 'YYYY年M月D日',
44217            lll: 'YYYY年M月D日 HH:mm',
44218            llll: 'YYYY年M月D日(ddd) HH:mm',
44219        },
44220        meridiemParse: /午前|午後/i,
44221        isPM: function (input) {
44222            return input === '午後';
44223        },
44224        meridiem: function (hour, minute, isLower) {
44225            if (hour < 12) {
44226                return '午前';
44227            } else {
44228                return '午後';
44229            }
44230        },
44231        calendar: {
44232            sameDay: '[今日] LT',
44233            nextDay: '[明日] LT',
44234            nextWeek: function (now) {
44235                if (now.week() !== this.week()) {
44236                    return '[来週]dddd LT';
44237                } else {
44238                    return 'dddd LT';
44239                }
44240            },
44241            lastDay: '[昨日] LT',
44242            lastWeek: function (now) {
44243                if (this.week() !== now.week()) {
44244                    return '[先週]dddd LT';
44245                } else {
44246                    return 'dddd LT';
44247                }
44248            },
44249            sameElse: 'L',
44250        },
44251        dayOfMonthOrdinalParse: /\d{1,2}日/,
44252        ordinal: function (number, period) {
44253            switch (period) {
44254                case 'y':
44255                    return number === 1 ? '元年' : number + '年';
44256                case 'd':
44257                case 'D':
44258                case 'DDD':
44259                    return number + '日';
44260                default:
44261                    return number;
44262            }
44263        },
44264        relativeTime: {
44265            future: '%s後',
44266            past: '%s前',
44267            s: '数秒',
44268            ss: '%d秒',
44269            m: '1分',
44270            mm: '%d分',
44271            h: '1時間',
44272            hh: '%d時間',
44273            d: '1日',
44274            dd: '%d日',
44275            M: '1ヶ月',
44276            MM: '%dヶ月',
44277            y: '1å¹´',
44278            yy: '%då¹´',
44279        },
44280    });
44281
44282    return ja;
44283
44284})));
44285
44286
44287/***/ }),
44288
vendor: 3,154 bytes, lines 44289-44384
44289/***/ "./node_modules/moment/locale/jv.js":
44290/*!******************************************!*\
44291  !*** ./node_modules/moment/locale/jv.js ***!
44292  \******************************************/
44293/*! no static exports found */
44294/***/ (function(module, exports, __webpack_require__) {
44295
44296//! moment.js locale configuration
44297//! locale : Javanese [jv]
44298//! author : Rony Lantip : https://github.com/lantip
44299//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
44300
44301;(function (global, factory) {
44302    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
44303   undefined
44304}(this, (function (moment) { 'use strict';
44305
44306    //! moment.js locale configuration
44307
44308    var jv = moment.defineLocale('jv', {
44309        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(
44310            '_'
44311        ),
44312        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
44313        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
44314        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
44315        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
44316        longDateFormat: {
44317            LT: 'HH.mm',
44318            LTS: 'HH.mm.ss',
44319            L: 'DD/MM/YYYY',
44320            LL: 'D MMMM YYYY',
44321            LLL: 'D MMMM YYYY [pukul] HH.mm',
44322            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
44323        },
44324        meridiemParse: /enjing|siyang|sonten|ndalu/,
44325        meridiemHour: function (hour, meridiem) {
44326            if (hour === 12) {
44327                hour = 0;
44328            }
44329            if (meridiem === 'enjing') {
44330                return hour;
44331            } else if (meridiem === 'siyang') {
44332                return hour >= 11 ? hour : hour + 12;
44333            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
44334                return hour + 12;
44335            }
44336        },
44337        meridiem: function (hours, minutes, isLower) {
44338            if (hours < 11) {
44339                return 'enjing';
44340            } else if (hours < 15) {
44341                return 'siyang';
44342            } else if (hours < 19) {
44343                return 'sonten';
44344            } else {
44345                return 'ndalu';
44346            }
44347        },
44348        calendar: {
44349            sameDay: '[Dinten puniko pukul] LT',
44350            nextDay: '[Mbenjang pukul] LT',
44351            nextWeek: 'dddd [pukul] LT',
44352            lastDay: '[Kala wingi pukul] LT',
44353            lastWeek: 'dddd [kepengker pukul] LT',
44354            sameElse: 'L',
44355        },
44356        relativeTime: {
44357            future: 'wonten ing %s',
44358            past: '%s ingkang kepengker',
44359            s: 'sawetawis detik',
44360            ss: '%d detik',
44361            m: 'setunggal menit',
44362            mm: '%d menit',
44363            h: 'setunggal jam',
44364            hh: '%d jam',
44365            d: 'sedinten',
44366            dd: '%d dinten',
44367            M: 'sewulan',
44368            MM: '%d wulan',
44369            y: 'setaun',
44370            yy: '%d taun',
44371        },
44372        week: {
44373            dow: 1, // Monday is the first day of the week.
44374            doy: 7, // The week that contains Jan 7th is the first week of the year.
44375        },
44376    });
44377
44378    return jv;
44379
44380})));
44381
44382
44383/***/ }),
44384
vendor: 4,342 bytes, lines 44385-44496
44385/***/ "./node_modules/moment/locale/ka.js":
44386/*!******************************************!*\
44387  !*** ./node_modules/moment/locale/ka.js ***!
44388  \******************************************/
44389/*! no static exports found */
44390/***/ (function(module, exports, __webpack_require__) {
44391
44392//! moment.js locale configuration
44393//! locale : Georgian [ka]
44394//! author : Irakli Janiashvili : https://github.com/IrakliJani
44395
44396;(function (global, factory) {
44397    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
44398   undefined
44399}(this, (function (moment) { 'use strict';
44400
44401    //! moment.js locale configuration
44402
44403    var ka = moment.defineLocale('ka', {
44404        months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(
44405            '_'
44406        ),
44407        monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
44408        weekdays: {
44409            standalone:
44410                'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(
44411                    '_'
44412                ),
44413            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(
44414                '_'
44415            ),
44416            isFormat: /(წინა|შემდეგ)/,
44417        },
44418        weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
44419        weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
44420        longDateFormat: {
44421            LT: 'HH:mm',
44422            LTS: 'HH:mm:ss',
44423            L: 'DD/MM/YYYY',
44424            LL: 'D MMMM YYYY',
44425            LLL: 'D MMMM YYYY HH:mm',
44426            LLLL: 'dddd, D MMMM YYYY HH:mm',
44427        },
44428        calendar: {
44429            sameDay: '[დღეს] LT[-ზე]',
44430            nextDay: '[ხვალ] LT[-ზე]',
44431            lastDay: '[გუშინ] LT[-ზე]',
44432            nextWeek: '[შემდეგ] dddd LT[-ზე]',
44433            lastWeek: '[წინა] dddd LT-ზე',
44434            sameElse: 'L',
44435        },
44436        relativeTime: {
44437            future: function (s) {
44438                return s.replace(
44439                    /(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,
44440                    function ($0, $1, $2) {
44441                        return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';
44442                    }
44443                );
44444            },
44445            past: function (s) {
44446                if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {
44447                    return s.replace(/(ი|ე)$/, 'ის წინ');
44448                }
44449                if (/წელი/.test(s)) {
44450                    return s.replace(/წელი$/, 'წლის წინ');
44451                }
44452                return s;
44453            },
44454            s: 'რამდენიმე წამი',
44455            ss: '%d წამი',
44456            m: 'წუთი',
44457            mm: '%d წუთი',
44458            h: 'საათი',
44459            hh: '%d საათი',
44460            d: 'დღე',
44461            dd: '%d დღე',
44462            M: 'თვე',
44463            MM: '%d თვე',
44464            y: 'წელი',
44465            yy: '%d წელი',
44466        },
44467        dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
44468        ordinal: function (number) {
44469            if (number === 0) {
44470                return number;
44471            }
44472            if (number === 1) {
44473                return number + '-ლი';
44474            }
44475            if (
44476                number < 20 ||
44477                (number <= 100 && number % 20 === 0) ||
44478                number % 100 === 0
44479            ) {
44480                return 'მე-' + number;
44481            }
44482            return number + '-ე';
44483        },
44484        week: {
44485            dow: 1,
44486            doy: 7,
44487        },
44488    });
44489
44490    return ka;
44491
44492})));
44493
44494
44495/***/ }),
44496
vendor: 3,289 bytes, lines 44497-44598
44497/***/ "./node_modules/moment/locale/kk.js":
44498/*!******************************************!*\
44499  !*** ./node_modules/moment/locale/kk.js ***!
44500  \******************************************/
44501/*! no static exports found */
44502/***/ (function(module, exports, __webpack_require__) {
44503
44504//! moment.js locale configuration
44505//! locale : Kazakh [kk]
44506//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan
44507
44508;(function (global, factory) {
44509    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
44510   undefined
44511}(this, (function (moment) { 'use strict';
44512
44513    //! moment.js locale configuration
44514
44515    var suffixes = {
44516        0: '-ші',
44517        1: '-ші',
44518        2: '-ші',
44519        3: '-ші',
44520        4: '-ші',
44521        5: '-ші',
44522        6: '-шы',
44523        7: '-ші',
44524        8: '-ші',
44525        9: '-шы',
44526        10: '-шы',
44527        20: '-шы',
44528        30: '-шы',
44529        40: '-шы',
44530        50: '-ші',
44531        60: '-шы',
44532        70: '-ші',
44533        80: '-ші',
44534        90: '-шы',
44535        100: '-ші',
44536    };
44537
44538    var kk = moment.defineLocale('kk', {
44539        months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(
44540            '_'
44541        ),
44542        monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
44543        weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(
44544            '_'
44545        ),
44546        weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
44547        weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
44548        longDateFormat: {
44549            LT: 'HH:mm',
44550            LTS: 'HH:mm:ss',
44551            L: 'DD.MM.YYYY',
44552            LL: 'D MMMM YYYY',
44553            LLL: 'D MMMM YYYY HH:mm',
44554            LLLL: 'dddd, D MMMM YYYY HH:mm',
44555        },
44556        calendar: {
44557            sameDay: '[Бүгін сағат] LT',
44558            nextDay: '[Ертең сағат] LT',
44559            nextWeek: 'dddd [сағат] LT',
44560            lastDay: '[Кеше сағат] LT',
44561            lastWeek: '[Өткен аптаның] dddd [сағат] LT',
44562            sameElse: 'L',
44563        },
44564        relativeTime: {
44565            future: '%s ішінде',
44566            past: '%s бұрын',
44567            s: 'бірнеше секунд',
44568            ss: '%d секунд',
44569            m: 'бір минут',
44570            mm: '%d минут',
44571            h: 'бір сағат',
44572            hh: '%d сағат',
44573            d: 'бір күн',
44574            dd: '%d күн',
44575            M: 'бір ай',
44576            MM: '%d ай',
44577            y: 'бір жыл',
44578            yy: '%d жыл',
44579        },
44580        dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/,
44581        ordinal: function (number) {
44582            var a = number % 10,
44583                b = number >= 100 ? 100 : null;
44584            return number + (suffixes[number] || suffixes[a] || suffixes[b]);
44585        },
44586        week: {
44587            dow: 1, // Monday is the first day of the week.
44588            doy: 7, // The week that contains Jan 7th is the first week of the year.
44589        },
44590    });
44591
44592    return kk;
44593
44594})));
44595
44596
44597/***/ }),
44598
vendor: 4,240 bytes, lines 44599-44721
44599/***/ "./node_modules/moment/locale/km.js":
44600/*!******************************************!*\
44601  !*** ./node_modules/moment/locale/km.js ***!
44602  \******************************************/
44603/*! no static exports found */
44604/***/ (function(module, exports, __webpack_require__) {
44605
44606//! moment.js locale configuration
44607//! locale : Cambodian [km]
44608//! author : Kruy Vanna : https://github.com/kruyvanna
44609
44610;(function (global, factory) {
44611    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
44612   undefined
44613}(this, (function (moment) { 'use strict';
44614
44615    //! moment.js locale configuration
44616
44617    var symbolMap = {
44618            1: '១',
44619            2: '២',
44620            3: '៣',
44621            4: '៤',
44622            5: '៥',
44623            6: '៦',
44624            7: '៧',
44625            8: '៨',
44626            9: '៩',
44627            0: '០',
44628        },
44629        numberMap = {
44630            '១': '1',
44631            '២': '2',
44632            '៣': '3',
44633            '៤': '4',
44634            '៥': '5',
44635            '៦': '6',
44636            '៧': '7',
44637            '៨': '8',
44638            '៩': '9',
44639            '០': '0',
44640        };
44641
44642    var km = moment.defineLocale('km', {
44643        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(
44644            '_'
44645        ),
44646        monthsShort:
44647            'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(
44648                '_'
44649            ),
44650        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
44651        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
44652        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
44653        weekdaysParseExact: true,
44654        longDateFormat: {
44655            LT: 'HH:mm',
44656            LTS: 'HH:mm:ss',
44657            L: 'DD/MM/YYYY',
44658            LL: 'D MMMM YYYY',
44659            LLL: 'D MMMM YYYY HH:mm',
44660            LLLL: 'dddd, D MMMM YYYY HH:mm',
44661        },
44662        meridiemParse: /ព្រឹក|ល្ងាច/,
44663        isPM: function (input) {
44664            return input === 'ល្ងាច';
44665        },
44666        meridiem: function (hour, minute, isLower) {
44667            if (hour < 12) {
44668                return 'ព្រឹក';
44669            } else {
44670                return 'ល្ងាច';
44671            }
44672        },
44673        calendar: {
44674            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
44675            nextDay: '[ស្អែក ម៉ោង] LT',
44676            nextWeek: 'dddd [ម៉ោង] LT',
44677            lastDay: '[ម្សិលមិញ ម៉ោង] LT',
44678            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
44679            sameElse: 'L',
44680        },
44681        relativeTime: {
44682            future: '%sទៀត',
44683            past: '%sមុន',
44684            s: 'ប៉ុន្មានវិនាទី',
44685            ss: '%d វិនាទី',
44686            m: 'មួយនាទី',
44687            mm: '%d នាទី',
44688            h: 'មួយម៉ោង',
44689            hh: '%d ម៉ោង',
44690            d: 'មួយថ្ងៃ',
44691            dd: '%d ថ្ងៃ',
44692            M: 'មួយខែ',
44693            MM: '%d ខែ',
44694            y: 'មួយឆ្នាំ',
44695            yy: '%d ឆ្នាំ',
44696        },
44697        dayOfMonthOrdinalParse: /ទី\d{1,2}/,
44698        ordinal: 'ទី%d',
44699        preparse: function (string) {
44700            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {
44701                return numberMap[match];
44702            });
44703        },
44704        postformat: function (string) {
44705            return string.replace(/\d/g, function (match) {
44706                return symbolMap[match];
44707            });
44708        },
44709        week: {
44710            dow: 1, // Monday is the first day of the week.
44711            doy: 4, // The week that contains Jan 4th is the first week of the year.
44712        },
44713    });
44714
44715    return km;
44716
44717})));
44718
44719
44720/***/ }),
44721
vendor: 5,214 bytes, lines 44722-44865
44722/***/ "./node_modules/moment/locale/kn.js":
44723/*!******************************************!*\
44724  !*** ./node_modules/moment/locale/kn.js ***!
44725  \******************************************/
44726/*! no static exports found */
44727/***/ (function(module, exports, __webpack_require__) {
44728
44729//! moment.js locale configuration
44730//! locale : Kannada [kn]
44731//! author : Rajeev Naik : https://github.com/rajeevnaikte
44732
44733;(function (global, factory) {
44734    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
44735   undefined
44736}(this, (function (moment) { 'use strict';
44737
44738    //! moment.js locale configuration
44739
44740    var symbolMap = {
44741            1: 'à³§',
44742            2: '೨',
44743            3: '೩',
44744            4: '೪',
44745            5: '೫',
44746            6: '೬',
44747            7: 'à³­',
44748            8: 'à³®',
44749            9: '೯',
44750            0: '೦',
44751        },
44752        numberMap = {
44753            'à³§': '1',
44754            '೨': '2',
44755            '೩': '3',
44756            '೪': '4',
44757            '೫': '5',
44758            '೬': '6',
44759            'à³­': '7',
44760            'à³®': '8',
44761            '೯': '9',
44762            '೦': '0',
44763        };
44764
44765    var kn = moment.defineLocale('kn', {
44766        months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(
44767            '_'
44768        ),
44769        monthsShort:
44770            'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(
44771                '_'
44772            ),
44773        monthsParseExact: true,
44774        weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(
44775            '_'
44776        ),
44777        weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),
44778        weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),
44779        longDateFormat: {
44780            LT: 'A h:mm',
44781            LTS: 'A h:mm:ss',
44782            L: 'DD/MM/YYYY',
44783            LL: 'D MMMM YYYY',
44784            LLL: 'D MMMM YYYY, A h:mm',
44785            LLLL: 'dddd, D MMMM YYYY, A h:mm',
44786        },
44787        calendar: {
44788            sameDay: '[ಇಂದು] LT',
44789            nextDay: '[ನಾಳೆ] LT',
44790            nextWeek: 'dddd, LT',
44791            lastDay: '[ನಿನ್ನೆ] LT',
44792            lastWeek: '[ಕೊನೆಯ] dddd, LT',
44793            sameElse: 'L',
44794        },
44795        relativeTime: {
44796            future: '%s ನಂತರ',
44797            past: '%s ಹಿಂದೆ',
44798            s: 'ಕೆಲವು ಕ್ಷಣಗಳು',
44799            ss: '%d ಸೆಕೆಂಡುಗಳು',
44800            m: 'ಒಂದು ನಿಮಿಷ',
44801            mm: '%d ನಿಮಿಷ',
44802            h: 'ಒಂದು ಗಂಟೆ',
44803            hh: '%d ಗಂಟೆ',
44804            d: 'ಒಂದು ದಿನ',
44805            dd: '%d ದಿನ',
44806            M: 'ಒಂದು ತಿಂಗಳು',
44807            MM: '%d ತಿಂಗಳು',
44808            y: 'ಒಂದು ವರ್ಷ',
44809            yy: '%d ವರ್ಷ',
44810        },
44811        preparse: function (string) {
44812            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {
44813                return numberMap[match];
44814            });
44815        },
44816        postformat: function (string) {
44817            return string.replace(/\d/g, function (match) {
44818                return symbolMap[match];
44819            });
44820        },
44821        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,
44822        meridiemHour: function (hour, meridiem) {
44823            if (hour === 12) {
44824                hour = 0;
44825            }
44826            if (meridiem === 'ರಾತ್ರಿ') {
44827                return hour < 4 ? hour : hour + 12;
44828            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {
44829                return hour;
44830            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {
44831                return hour >= 10 ? hour : hour + 12;
44832            } else if (meridiem === 'ಸಂಜೆ') {
44833                return hour + 12;
44834            }
44835        },
44836        meridiem: function (hour, minute, isLower) {
44837            if (hour < 4) {
44838                return 'ರಾತ್ರಿ';
44839            } else if (hour < 10) {
44840                return 'ಬೆಳಿಗ್ಗೆ';
44841            } else if (hour < 17) {
44842                return 'ಮಧ್ಯಾಹ್ನ';
44843            } else if (hour < 20) {
44844                return 'ಸಂಜೆ';
44845            } else {
44846                return 'ರಾತ್ರಿ';
44847            }
44848        },
44849        dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/,
44850        ordinal: function (number) {
44851            return number + 'ನೇ';
44852        },
44853        week: {
44854            dow: 0, // Sunday is the first day of the week.
44855            doy: 6, // The week that contains Jan 6th is the first week of the year.
44856        },
44857    });
44858
44859    return kn;
44860
44861})));
44862
44863
44864/***/ }),
44865
vendor: 2,989 bytes, lines 44866-44960
44866/***/ "./node_modules/moment/locale/ko.js":
44867/*!******************************************!*\
44868  !*** ./node_modules/moment/locale/ko.js ***!
44869  \******************************************/
44870/*! no static exports found */
44871/***/ (function(module, exports, __webpack_require__) {
44872
44873//! moment.js locale configuration
44874//! locale : Korean [ko]
44875//! author : Kyungwook, Park : https://github.com/kyungw00k
44876//! author : Jeeeyul Lee <[email protected]>
44877
44878;(function (global, factory) {
44879    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
44880   undefined
44881}(this, (function (moment) { 'use strict';
44882
44883    //! moment.js locale configuration
44884
44885    var ko = moment.defineLocale('ko', {
44886        months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
44887        monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(
44888            '_'
44889        ),
44890        weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
44891        weekdaysShort: '일_월_화_수_목_금_토'.split('_'),
44892        weekdaysMin: '일_월_화_수_목_금_토'.split('_'),
44893        longDateFormat: {
44894            LT: 'A h:mm',
44895            LTS: 'A h:mm:ss',
44896            L: 'YYYY.MM.DD.',
44897            LL: 'YYYY년 MMMM D일',
44898            LLL: 'YYYY년 MMMM D일 A h:mm',
44899            LLLL: 'YYYY년 MMMM D일 dddd A h:mm',
44900            l: 'YYYY.MM.DD.',
44901            ll: 'YYYY년 MMMM D일',
44902            lll: 'YYYY년 MMMM D일 A h:mm',
44903            llll: 'YYYY년 MMMM D일 dddd A h:mm',
44904        },
44905        calendar: {
44906            sameDay: '오늘 LT',
44907            nextDay: '내일 LT',
44908            nextWeek: 'dddd LT',
44909            lastDay: '어제 LT',
44910            lastWeek: '지난주 dddd LT',
44911            sameElse: 'L',
44912        },
44913        relativeTime: {
44914            future: '%s 후',
44915            past: '%s 전',
44916            s: '몇 초',
44917            ss: '%d초',
44918            m: '1분',
44919            mm: '%d분',
44920            h: '한 시간',
44921            hh: '%d시간',
44922            d: '하루',
44923            dd: '%d일',
44924            M: '한 달',
44925            MM: '%d달',
44926            y: '일 년',
44927            yy: '%d년',
44928        },
44929        dayOfMonthOrdinalParse: /\d{1,2}(일|월|주)/,
44930        ordinal: function (number, period) {
44931            switch (period) {
44932                case 'd':
44933                case 'D':
44934                case 'DDD':
44935                    return number + '일';
44936                case 'M':
44937                    return number + '월';
44938                case 'w':
44939                case 'W':
44940                    return number + '주';
44941                default:
44942                    return number;
44943            }
44944        },
44945        meridiemParse: /오전|오후/,
44946        isPM: function (token) {
44947            return token === '오후';
44948        },
44949        meridiem: function (hour, minute, isUpper) {
44950            return hour < 12 ? '오전' : '오후';
44951        },
44952    });
44953
44954    return ko;
44955
44956})));
44957
44958
44959/***/ }),
44960
vendor: 5,056 bytes, lines 44961-45094
44961/***/ "./node_modules/moment/locale/ku-kmr.js":
44962/*!**********************************************!*\
44963  !*** ./node_modules/moment/locale/ku-kmr.js ***!
44964  \**********************************************/
44965/*! no static exports found */
44966/***/ (function(module, exports, __webpack_require__) {
44967
44968//! moment.js locale configuration
44969//! locale : Northern Kurdish [ku-kmr]
44970//! authors : Mazlum Özdogan : https://github.com/mergehez
44971
44972;(function (global, factory) {
44973    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
44974   undefined
44975}(this, (function (moment) { 'use strict';
44976
44977    //! moment.js locale configuration
44978
44979    function processRelativeTime(num, withoutSuffix, key, isFuture) {
44980        var format = {
44981            s: ['çend sanîye', 'çend sanîyeyan'],
44982            ss: [num + ' sanîye', num + ' sanîyeyan'],
44983            m: ['deqîqeyek', 'deqîqeyekê'],
44984            mm: [num + ' deqîqe', num + ' deqîqeyan'],
44985            h: ['saetek', 'saetekê'],
44986            hh: [num + ' saet', num + ' saetan'],
44987            d: ['rojek', 'rojekê'],
44988            dd: [num + ' roj', num + ' rojan'],
44989            w: ['hefteyek', 'hefteyekê'],
44990            ww: [num + ' hefte', num + ' hefteyan'],
44991            M: ['mehek', 'mehekê'],
44992            MM: [num + ' meh', num + ' mehan'],
44993            y: ['salek', 'salekê'],
44994            yy: [num + ' sal', num + ' salan'],
44995        };
44996        return withoutSuffix ? format[key][0] : format[key][1];
44997    }
44998    // function obliqueNumSuffix(num) {
44999    //     if(num.includes(':'))
45000    //         num = parseInt(num.split(':')[0]);
45001    //     else
45002    //         num = parseInt(num);
45003    //     return num == 0 || num % 10 == 1 ? 'ê'
45004    //                         : (num > 10 && num % 10 == 0 ? 'î' : 'an');
45005    // }
45006    function ezafeNumSuffix(num) {
45007        num = '' + num;
45008        var l = num.substring(num.length - 1),
45009            ll = num.length > 1 ? num.substring(num.length - 2) : '';
45010        if (
45011            !(ll == 12 || ll == 13) &&
45012            (l == '2' || l == '3' || ll == '50' || l == '70' || l == '80')
45013        )
45014            return 'yê';
45015        return 'ê';
45016    }
45017
45018    var kuKmr = moment.defineLocale('ku-kmr', {
45019        // According to the spelling rules defined by the work group of Weqfa Mezopotamyayê (Mesopotamia Foundation)
45020        // this should be: 'Kanûna Paşîn_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Çirîya Pêşîn_Çirîya Paşîn_Kanûna Pêşîn'
45021        // But the names below are more well known and handy
45022        months: 'Rêbendan_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Cotmeh_Mijdar_Berfanbar'.split(
45023            '_'
45024        ),
45025        monthsShort: 'Rêb_Sib_Ada_Nîs_Gul_Hez_Tîr_Teb_Îlo_Cot_Mij_Ber'.split('_'),
45026        monthsParseExact: true,
45027        weekdays: 'Yekşem_Duşem_Sêşem_Çarşem_Pêncşem_În_Şemî'.split('_'),
45028        weekdaysShort: 'Yek_Du_Sê_Çar_Pên_În_Şem'.split('_'),
45029        weekdaysMin: 'Ye_Du_Sê_Ça_Pê_În_Şe'.split('_'),
45030        meridiem: function (hours, minutes, isLower) {
45031            if (hours < 12) {
45032                return isLower ? 'bn' : 'BN';
45033            } else {
45034                return isLower ? 'pn' : 'PN';
45035            }
45036        },
45037        meridiemParse: /bn|BN|pn|PN/,
45038        longDateFormat: {
45039            LT: 'HH:mm',
45040            LTS: 'HH:mm:ss',
45041            L: 'DD.MM.YYYY',
45042            LL: 'Do MMMM[a] YYYY[an]',
45043            LLL: 'Do MMMM[a] YYYY[an] HH:mm',
45044            LLLL: 'dddd, Do MMMM[a] YYYY[an] HH:mm',
45045            ll: 'Do MMM[.] YYYY[an]',
45046            lll: 'Do MMM[.] YYYY[an] HH:mm',
45047            llll: 'ddd[.], Do MMM[.] YYYY[an] HH:mm',
45048        },
45049        calendar: {
45050            sameDay: '[Îro di saet] LT [de]',
45051            nextDay: '[Sibê di saet] LT [de]',
45052            nextWeek: 'dddd [di saet] LT [de]',
45053            lastDay: '[Duh di saet] LT [de]',
45054            lastWeek: 'dddd[a borî di saet] LT [de]',
45055            sameElse: 'L',
45056        },
45057        relativeTime: {
45058            future: 'di %s de',
45059            past: 'berî %s',
45060            s: processRelativeTime,
45061            ss: processRelativeTime,
45062            m: processRelativeTime,
45063            mm: processRelativeTime,
45064            h: processRelativeTime,
45065            hh: processRelativeTime,
45066            d: processRelativeTime,
45067            dd: processRelativeTime,
45068            w: processRelativeTime,
45069            ww: processRelativeTime,
45070            M: processRelativeTime,
45071            MM: processRelativeTime,
45072            y: processRelativeTime,
45073            yy: processRelativeTime,
45074        },
45075        dayOfMonthOrdinalParse: /\d{1,2}(?:yê|ê|\.)/,
45076        ordinal: function (num, period) {
45077            var p = period.toLowerCase();
45078            if (p.includes('w') || p.includes('m')) return num + '.';
45079
45080            return num + ezafeNumSuffix(num);
45081        },
45082        week: {
45083            dow: 1, // Monday is the first day of the week.
45084            doy: 4, // The week that contains Jan 4th is the first week of the year.
45085        },
45086    });
45087
45088    return kuKmr;
45089
45090})));
45091
45092
45093/***/ }),
45094
vendor: 4,268 bytes, lines 45095-45232
45095/***/ "./node_modules/moment/locale/ku.js":
45096/*!******************************************!*\
45097  !*** ./node_modules/moment/locale/ku.js ***!
45098  \******************************************/
45099/*! no static exports found */
45100/***/ (function(module, exports, __webpack_require__) {
45101
45102//! moment.js locale configuration
45103//! locale : Kurdish [ku]
45104//! author : Shahram Mebashar : https://github.com/ShahramMebashar
45105
45106;(function (global, factory) {
45107    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
45108   undefined
45109}(this, (function (moment) { 'use strict';
45110
45111    //! moment.js locale configuration
45112
45113    var symbolMap = {
45114            1: 'Ù¡',
45115            2: 'Ù¢',
45116            3: 'Ù£',
45117            4: 'Ù¤',
45118            5: 'Ù¥',
45119            6: 'Ù¦',
45120            7: 'Ù§',
45121            8: 'Ù¨',
45122            9: 'Ù©',
45123            0: 'Ù ',
45124        },
45125        numberMap = {
45126            'Ù¡': '1',
45127            'Ù¢': '2',
45128            'Ù£': '3',
45129            'Ù¤': '4',
45130            'Ù¥': '5',
45131            'Ù¦': '6',
45132            'Ù§': '7',
45133            'Ù¨': '8',
45134            'Ù©': '9',
45135            'Ù ': '0',
45136        },
45137        months = [
45138            'کانونی دووەم',
45139            'شوبات',
45140            'ئازار',
45141            'نیسان',
45142            'ئایار',
45143            'حوزەیران',
45144            'تەمموز',
45145            'ئاب',
45146            'ئەیلوول',
45147            'تشرینی یەكەم',
45148            'تشرینی دووەم',
45149            'كانونی یەکەم',
45150        ];
45151
45152    var ku = moment.defineLocale('ku', {
45153        months: months,
45154        monthsShort: months,
45155        weekdays:
45156            'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(
45157                '_'
45158            ),
45159        weekdaysShort:
45160            'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),
45161        weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),
45162        weekdaysParseExact: true,
45163        longDateFormat: {
45164            LT: 'HH:mm',
45165            LTS: 'HH:mm:ss',
45166            L: 'DD/MM/YYYY',
45167            LL: 'D MMMM YYYY',
45168            LLL: 'D MMMM YYYY HH:mm',
45169            LLLL: 'dddd, D MMMM YYYY HH:mm',
45170        },
45171        meridiemParse: /ئێواره‌|به‌یانی/,
45172        isPM: function (input) {
45173            return /ئێواره‌/.test(input);
45174        },
45175        meridiem: function (hour, minute, isLower) {
45176            if (hour < 12) {
45177                return 'به‌یانی';
45178            } else {
45179                return 'ئێواره‌';
45180            }
45181        },
45182        calendar: {
45183            sameDay: '[ئه‌مرۆ كاتژمێر] LT',
45184            nextDay: '[به‌یانی كاتژمێر] LT',
45185            nextWeek: 'dddd [كاتژمێر] LT',
45186            lastDay: '[دوێنێ كاتژمێر] LT',
45187            lastWeek: 'dddd [كاتژمێر] LT',
45188            sameElse: 'L',
45189        },
45190        relativeTime: {
45191            future: 'له‌ %s',
45192            past: '%s',
45193            s: 'چه‌ند چركه‌یه‌ك',
45194            ss: 'چركه‌ %d',
45195            m: 'یه‌ك خوله‌ك',
45196            mm: '%d خوله‌ك',
45197            h: 'یه‌ك كاتژمێر',
45198            hh: '%d كاتژمێر',
45199            d: 'یه‌ك ڕۆژ',
45200            dd: '%d ڕۆژ',
45201            M: 'یه‌ك مانگ',
45202            MM: '%d مانگ',
45203            y: 'یه‌ك ساڵ',
45204            yy: '%d ساڵ',
45205        },
45206        preparse: function (string) {
45207            return string
45208                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
45209                    return numberMap[match];
45210                })
45211                .replace(/،/g, ',');
45212        },
45213        postformat: function (string) {
45214            return string
45215                .replace(/\d/g, function (match) {
45216                    return symbolMap[match];
45217                })
45218                .replace(/,/g, '،');
45219        },
45220        week: {
45221            dow: 6, // Saturday is the first day of the week.
45222            doy: 12, // The week that contains Jan 12th is the first week of the year.
45223        },
45224    });
45225
45226    return ku;
45227
45228})));
45229
45230
45231/***/ }),
45232
vendor: 3,323 bytes, lines 45233-45336
45233/***/ "./node_modules/moment/locale/ky.js":
45234/*!******************************************!*\
45235  !*** ./node_modules/moment/locale/ky.js ***!
45236  \******************************************/
45237/*! no static exports found */
45238/***/ (function(module, exports, __webpack_require__) {
45239
45240//! moment.js locale configuration
45241//! locale : Kyrgyz [ky]
45242//! author : Chyngyz Arystan uulu : https://github.com/chyngyz
45243
45244;(function (global, factory) {
45245    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
45246   undefined
45247}(this, (function (moment) { 'use strict';
45248
45249    //! moment.js locale configuration
45250
45251    var suffixes = {
45252        0: '-чү',
45253        1: '-чи',
45254        2: '-чи',
45255        3: '-чү',
45256        4: '-чү',
45257        5: '-чи',
45258        6: '-чы',
45259        7: '-чи',
45260        8: '-чи',
45261        9: '-чу',
45262        10: '-чу',
45263        20: '-чы',
45264        30: '-чу',
45265        40: '-чы',
45266        50: '-чү',
45267        60: '-чы',
45268        70: '-чи',
45269        80: '-чи',
45270        90: '-чу',
45271        100: '-чү',
45272    };
45273
45274    var ky = moment.defineLocale('ky', {
45275        months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(
45276            '_'
45277        ),
45278        monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(
45279            '_'
45280        ),
45281        weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(
45282            '_'
45283        ),
45284        weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
45285        weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
45286        longDateFormat: {
45287            LT: 'HH:mm',
45288            LTS: 'HH:mm:ss',
45289            L: 'DD.MM.YYYY',
45290            LL: 'D MMMM YYYY',
45291            LLL: 'D MMMM YYYY HH:mm',
45292            LLLL: 'dddd, D MMMM YYYY HH:mm',
45293        },
45294        calendar: {
45295            sameDay: '[Бүгүн саат] LT',
45296            nextDay: '[Эртең саат] LT',
45297            nextWeek: 'dddd [саат] LT',
45298            lastDay: '[Кечээ саат] LT',
45299            lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',
45300            sameElse: 'L',
45301        },
45302        relativeTime: {
45303            future: '%s ичинде',
45304            past: '%s мурун',
45305            s: 'бирнече секунд',
45306            ss: '%d секунд',
45307            m: 'бир мүнөт',
45308            mm: '%d мүнөт',
45309            h: 'бир саат',
45310            hh: '%d саат',
45311            d: 'бир күн',
45312            dd: '%d күн',
45313            M: 'бир ай',
45314            MM: '%d ай',
45315            y: 'бир жыл',
45316            yy: '%d жыл',
45317        },
45318        dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
45319        ordinal: function (number) {
45320            var a = number % 10,
45321                b = number >= 100 ? 100 : null;
45322            return number + (suffixes[number] || suffixes[a] || suffixes[b]);
45323        },
45324        week: {
45325            dow: 1, // Monday is the first day of the week.
45326            doy: 7, // The week that contains Jan 7th is the first week of the year.
45327        },
45328    });
45329
45330    return ky;
45331
45332})));
45333
45334
45335/***/ }),
45336
vendor: 5,279 bytes, lines 45337-45493
45337/***/ "./node_modules/moment/locale/lb.js":
45338/*!******************************************!*\
45339  !*** ./node_modules/moment/locale/lb.js ***!
45340  \******************************************/
45341/*! no static exports found */
45342/***/ (function(module, exports, __webpack_require__) {
45343
45344//! moment.js locale configuration
45345//! locale : Luxembourgish [lb]
45346//! author : mweimerskirch : https://github.com/mweimerskirch
45347//! author : David Raison : https://github.com/kwisatz
45348
45349;(function (global, factory) {
45350    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
45351   undefined
45352}(this, (function (moment) { 'use strict';
45353
45354    //! moment.js locale configuration
45355
45356    function processRelativeTime(number, withoutSuffix, key, isFuture) {
45357        var format = {
45358            m: ['eng Minutt', 'enger Minutt'],
45359            h: ['eng Stonn', 'enger Stonn'],
45360            d: ['een Dag', 'engem Dag'],
45361            M: ['ee Mount', 'engem Mount'],
45362            y: ['ee Joer', 'engem Joer'],
45363        };
45364        return withoutSuffix ? format[key][0] : format[key][1];
45365    }
45366    function processFutureTime(string) {
45367        var number = string.substr(0, string.indexOf(' '));
45368        if (eifelerRegelAppliesToNumber(number)) {
45369            return 'a ' + string;
45370        }
45371        return 'an ' + string;
45372    }
45373    function processPastTime(string) {
45374        var number = string.substr(0, string.indexOf(' '));
45375        if (eifelerRegelAppliesToNumber(number)) {
45376            return 'viru ' + string;
45377        }
45378        return 'virun ' + string;
45379    }
45380    /**
45381     * Returns true if the word before the given number loses the '-n' ending.
45382     * e.g. 'an 10 Deeg' but 'a 5 Deeg'
45383     *
45384     * @param number {integer}
45385     * @returns {boolean}
45386     */
45387    function eifelerRegelAppliesToNumber(number) {
45388        number = parseInt(number, 10);
45389        if (isNaN(number)) {
45390            return false;
45391        }
45392        if (number < 0) {
45393            // Negative Number --> always true
45394            return true;
45395        } else if (number < 10) {
45396            // Only 1 digit
45397            if (4 <= number && number <= 7) {
45398                return true;
45399            }
45400            return false;
45401        } else if (number < 100) {
45402            // 2 digits
45403            var lastDigit = number % 10,
45404                firstDigit = number / 10;
45405            if (lastDigit === 0) {
45406                return eifelerRegelAppliesToNumber(firstDigit);
45407            }
45408            return eifelerRegelAppliesToNumber(lastDigit);
45409        } else if (number < 10000) {
45410            // 3 or 4 digits --> recursively check first digit
45411            while (number >= 10) {
45412                number = number / 10;
45413            }
45414            return eifelerRegelAppliesToNumber(number);
45415        } else {
45416            // Anything larger than 4 digits: recursively check first n-3 digits
45417            number = number / 1000;
45418            return eifelerRegelAppliesToNumber(number);
45419        }
45420    }
45421
45422    var lb = moment.defineLocale('lb', {
45423        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(
45424            '_'
45425        ),
45426        monthsShort:
45427            'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(
45428                '_'
45429            ),
45430        monthsParseExact: true,
45431        weekdays:
45432            'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(
45433                '_'
45434            ),
45435        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
45436        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
45437        weekdaysParseExact: true,
45438        longDateFormat: {
45439            LT: 'H:mm [Auer]',
45440            LTS: 'H:mm:ss [Auer]',
45441            L: 'DD.MM.YYYY',
45442            LL: 'D. MMMM YYYY',
45443            LLL: 'D. MMMM YYYY H:mm [Auer]',
45444            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',
45445        },
45446        calendar: {
45447            sameDay: '[Haut um] LT',
45448            sameElse: 'L',
45449            nextDay: '[Muer um] LT',
45450            nextWeek: 'dddd [um] LT',
45451            lastDay: '[Gëschter um] LT',
45452            lastWeek: function () {
45453                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
45454                switch (this.day()) {
45455                    case 2:
45456                    case 4:
45457                        return '[Leschten] dddd [um] LT';
45458                    default:
45459                        return '[Leschte] dddd [um] LT';
45460                }
45461            },
45462        },
45463        relativeTime: {
45464            future: processFutureTime,
45465            past: processPastTime,
45466            s: 'e puer Sekonnen',
45467            ss: '%d Sekonnen',
45468            m: processRelativeTime,
45469            mm: '%d Minutten',
45470            h: processRelativeTime,
45471            hh: '%d Stonnen',
45472            d: processRelativeTime,
45473            dd: '%d Deeg',
45474            M: processRelativeTime,
45475            MM: '%d Méint',
45476            y: processRelativeTime,
45477            yy: '%d Joer',
45478        },
45479        dayOfMonthOrdinalParse: /\d{1,2}\./,
45480        ordinal: '%d.',
45481        week: {
45482            dow: 1, // Monday is the first day of the week.
45483            doy: 4, // The week that contains Jan 4th is the first week of the year.
45484        },
45485    });
45486
45487    return lb;
45488
45489})));
45490
45491
45492/***/ }),
45493
vendor: 3,319 bytes, lines 45494-45579
45494/***/ "./node_modules/moment/locale/lo.js":
45495/*!******************************************!*\
45496  !*** ./node_modules/moment/locale/lo.js ***!
45497  \******************************************/
45498/*! no static exports found */
45499/***/ (function(module, exports, __webpack_require__) {
45500
45501//! moment.js locale configuration
45502//! locale : Lao [lo]
45503//! author : Ryan Hart : https://github.com/ryanhart2
45504
45505;(function (global, factory) {
45506    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
45507   undefined
45508}(this, (function (moment) { 'use strict';
45509
45510    //! moment.js locale configuration
45511
45512    var lo = moment.defineLocale('lo', {
45513        months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(
45514            '_'
45515        ),
45516        monthsShort:
45517            'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(
45518                '_'
45519            ),
45520        weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
45521        weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
45522        weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
45523        weekdaysParseExact: true,
45524        longDateFormat: {
45525            LT: 'HH:mm',
45526            LTS: 'HH:mm:ss',
45527            L: 'DD/MM/YYYY',
45528            LL: 'D MMMM YYYY',
45529            LLL: 'D MMMM YYYY HH:mm',
45530            LLLL: 'ວັນdddd D MMMM YYYY HH:mm',
45531        },
45532        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
45533        isPM: function (input) {
45534            return input === 'ຕອນແລງ';
45535        },
45536        meridiem: function (hour, minute, isLower) {
45537            if (hour < 12) {
45538                return 'ຕອນເຊົ້າ';
45539            } else {
45540                return 'ຕອນແລງ';
45541            }
45542        },
45543        calendar: {
45544            sameDay: '[ມື້ນີ້ເວລາ] LT',
45545            nextDay: '[ມື້ອື່ນເວລາ] LT',
45546            nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',
45547            lastDay: '[ມື້ວານນີ້ເວລາ] LT',
45548            lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
45549            sameElse: 'L',
45550        },
45551        relativeTime: {
45552            future: 'ອີກ %s',
45553            past: '%sຜ່ານມາ',
45554            s: 'ບໍ່ເທົ່າໃດວິນາທີ',
45555            ss: '%d ວິນາທີ',
45556            m: '1 ນາທີ',
45557            mm: '%d ນາທີ',
45558            h: '1 ຊົ່ວໂມງ',
45559            hh: '%d ຊົ່ວໂມງ',
45560            d: '1 ມື້',
45561            dd: '%d ມື້',
45562            M: '1 ເດືອນ',
45563            MM: '%d ເດືອນ',
45564            y: '1 ປີ',
45565            yy: '%d ປີ',
45566        },
45567        dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/,
45568        ordinal: function (number) {
45569            return 'ທີ່' + number;
45570        },
45571    });
45572
45573    return lo;
45574
45575})));
45576
45577
45578/***/ }),
45579
vendor: 4,979 bytes, lines 45580-45724
45580/***/ "./node_modules/moment/locale/lt.js":
45581/*!******************************************!*\
45582  !*** ./node_modules/moment/locale/lt.js ***!
45583  \******************************************/
45584/*! no static exports found */
45585/***/ (function(module, exports, __webpack_require__) {
45586
45587//! moment.js locale configuration
45588//! locale : Lithuanian [lt]
45589//! author : Mindaugas Mozūras : https://github.com/mmozuras
45590
45591;(function (global, factory) {
45592    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
45593   undefined
45594}(this, (function (moment) { 'use strict';
45595
45596    //! moment.js locale configuration
45597
45598    var units = {
45599        ss: 'sekundė_sekundžių_sekundes',
45600        m: 'minutė_minutės_minutę',
45601        mm: 'minutės_minučių_minutes',
45602        h: 'valanda_valandos_valandą',
45603        hh: 'valandos_valandų_valandas',
45604        d: 'diena_dienos_dieną',
45605        dd: 'dienos_dienų_dienas',
45606        M: 'mėnuo_mėnesio_mėnesį',
45607        MM: 'mėnesiai_mėnesių_mėnesius',
45608        y: 'metai_metų_metus',
45609        yy: 'metai_metų_metus',
45610    };
45611    function translateSeconds(number, withoutSuffix, key, isFuture) {
45612        if (withoutSuffix) {
45613            return 'kelios sekundės';
45614        } else {
45615            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
45616        }
45617    }
45618    function translateSingular(number, withoutSuffix, key, isFuture) {
45619        return withoutSuffix
45620            ? forms(key)[0]
45621            : isFuture
45622              ? forms(key)[1]
45623              : forms(key)[2];
45624    }
45625    function special(number) {
45626        return number % 10 === 0 || (number > 10 && number < 20);
45627    }
45628    function forms(key) {
45629        return units[key].split('_');
45630    }
45631    function translate(number, withoutSuffix, key, isFuture) {
45632        var result = number + ' ';
45633        if (number === 1) {
45634            return (
45635                result + translateSingular(number, withoutSuffix, key[0], isFuture)
45636            );
45637        } else if (withoutSuffix) {
45638            return result + (special(number) ? forms(key)[1] : forms(key)[0]);
45639        } else {
45640            if (isFuture) {
45641                return result + forms(key)[1];
45642            } else {
45643                return result + (special(number) ? forms(key)[1] : forms(key)[2]);
45644            }
45645        }
45646    }
45647    var lt = moment.defineLocale('lt', {
45648        months: {
45649            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(
45650                '_'
45651            ),
45652            standalone:
45653                'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(
45654                    '_'
45655                ),
45656            isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,
45657        },
45658        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
45659        weekdays: {
45660            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(
45661                '_'
45662            ),
45663            standalone:
45664                'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(
45665                    '_'
45666                ),
45667            isFormat: /dddd HH:mm/,
45668        },
45669        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
45670        weekdaysMin: 'S_P_A_T_K_Pn_Å '.split('_'),
45671        weekdaysParseExact: true,
45672        longDateFormat: {
45673            LT: 'HH:mm',
45674            LTS: 'HH:mm:ss',
45675            L: 'YYYY-MM-DD',
45676            LL: 'YYYY [m.] MMMM D [d.]',
45677            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
45678            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
45679            l: 'YYYY-MM-DD',
45680            ll: 'YYYY [m.] MMMM D [d.]',
45681            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
45682            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',
45683        },
45684        calendar: {
45685            sameDay: '[Å iandien] LT',
45686            nextDay: '[Rytoj] LT',
45687            nextWeek: 'dddd LT',
45688            lastDay: '[Vakar] LT',
45689            lastWeek: '[Praėjusį] dddd LT',
45690            sameElse: 'L',
45691        },
45692        relativeTime: {
45693            future: 'po %s',
45694            past: 'prieš %s',
45695            s: translateSeconds,
45696            ss: translate,
45697            m: translateSingular,
45698            mm: translate,
45699            h: translateSingular,
45700            hh: translate,
45701            d: translateSingular,
45702            dd: translate,
45703            M: translateSingular,
45704            MM: translate,
45705            y: translateSingular,
45706            yy: translate,
45707        },
45708        dayOfMonthOrdinalParse: /\d{1,2}-oji/,
45709        ordinal: function (number) {
45710            return number + '-oji';
45711        },
45712        week: {
45713            dow: 1, // Monday is the first day of the week.
45714            doy: 4, // The week that contains Jan 4th is the first week of the year.
45715        },
45716    });
45717
45718    return lt;
45719
45720})));
45721
45722
45723/***/ }),
45724
vendor: 4,287 bytes, lines 45725-45838
45725/***/ "./node_modules/moment/locale/lv.js":
45726/*!******************************************!*\
45727  !*** ./node_modules/moment/locale/lv.js ***!
45728  \******************************************/
45729/*! no static exports found */
45730/***/ (function(module, exports, __webpack_require__) {
45731
45732//! moment.js locale configuration
45733//! locale : Latvian [lv]
45734//! author : Kristaps Karlsons : https://github.com/skakri
45735//! author : Jānis Elmeris : https://github.com/JanisE
45736
45737;(function (global, factory) {
45738    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
45739   undefined
45740}(this, (function (moment) { 'use strict';
45741
45742    //! moment.js locale configuration
45743
45744    var units = {
45745        ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),
45746        m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),
45747        mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),
45748        h: 'stundas_stundām_stunda_stundas'.split('_'),
45749        hh: 'stundas_stundām_stunda_stundas'.split('_'),
45750        d: 'dienas_dienām_diena_dienas'.split('_'),
45751        dd: 'dienas_dienām_diena_dienas'.split('_'),
45752        M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
45753        MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
45754        y: 'gada_gadiem_gads_gadi'.split('_'),
45755        yy: 'gada_gadiem_gads_gadi'.split('_'),
45756    };
45757    /**
45758     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
45759     */
45760    function format(forms, number, withoutSuffix) {
45761        if (withoutSuffix) {
45762            // E.g. "21 minūte", "3 minūtes".
45763            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
45764        } else {
45765            // E.g. "21 minūtes" as in "pēc 21 minūtes".
45766            // E.g. "3 minūtēm" as in "pēc 3 minūtēm".
45767            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
45768        }
45769    }
45770    function relativeTimeWithPlural(number, withoutSuffix, key) {
45771        return number + ' ' + format(units[key], number, withoutSuffix);
45772    }
45773    function relativeTimeWithSingular(number, withoutSuffix, key) {
45774        return format(units[key], number, withoutSuffix);
45775    }
45776    function relativeSeconds(number, withoutSuffix) {
45777        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
45778    }
45779
45780    var lv = moment.defineLocale('lv', {
45781        months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(
45782            '_'
45783        ),
45784        monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
45785        weekdays:
45786            'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(
45787                '_'
45788            ),
45789        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),
45790        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),
45791        weekdaysParseExact: true,
45792        longDateFormat: {
45793            LT: 'HH:mm',
45794            LTS: 'HH:mm:ss',
45795            L: 'DD.MM.YYYY.',
45796            LL: 'YYYY. [gada] D. MMMM',
45797            LLL: 'YYYY. [gada] D. MMMM, HH:mm',
45798            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',
45799        },
45800        calendar: {
45801            sameDay: '[Å odien pulksten] LT',
45802            nextDay: '[Rīt pulksten] LT',
45803            nextWeek: 'dddd [pulksten] LT',
45804            lastDay: '[Vakar pulksten] LT',
45805            lastWeek: '[Pagājušā] dddd [pulksten] LT',
45806            sameElse: 'L',
45807        },
45808        relativeTime: {
45809            future: 'pēc %s',
45810            past: 'pirms %s',
45811            s: relativeSeconds,
45812            ss: relativeTimeWithPlural,
45813            m: relativeTimeWithSingular,
45814            mm: relativeTimeWithPlural,
45815            h: relativeTimeWithSingular,
45816            hh: relativeTimeWithPlural,
45817            d: relativeTimeWithSingular,
45818            dd: relativeTimeWithPlural,
45819            M: relativeTimeWithSingular,
45820            MM: relativeTimeWithPlural,
45821            y: relativeTimeWithSingular,
45822            yy: relativeTimeWithPlural,
45823        },
45824        dayOfMonthOrdinalParse: /\d{1,2}\./,
45825        ordinal: '%d.',
45826        week: {
45827            dow: 1, // Monday is the first day of the week.
45828            doy: 4, // The week that contains Jan 4th is the first week of the year.
45829        },
45830    });
45831
45832    return lv;
45833
45834})));
45835
45836
45837/***/ }),
45838
vendor: 4,595 bytes, lines 45839-45975
45839/***/ "./node_modules/moment/locale/me.js":
45840/*!******************************************!*\
45841  !*** ./node_modules/moment/locale/me.js ***!
45842  \******************************************/
45843/*! no static exports found */
45844/***/ (function(module, exports, __webpack_require__) {
45845
45846//! moment.js locale configuration
45847//! locale : Montenegrin [me]
45848//! author : Miodrag Nikač <[email protected]> : https://github.com/miodragnikac
45849
45850;(function (global, factory) {
45851    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
45852   undefined
45853}(this, (function (moment) { 'use strict';
45854
45855    //! moment.js locale configuration
45856
45857    var translator = {
45858        words: {
45859            //Different grammatical cases
45860            ss: ['sekund', 'sekunda', 'sekundi'],
45861            m: ['jedan minut', 'jednog minuta'],
45862            mm: ['minut', 'minuta', 'minuta'],
45863            h: ['jedan sat', 'jednog sata'],
45864            hh: ['sat', 'sata', 'sati'],
45865            dd: ['dan', 'dana', 'dana'],
45866            MM: ['mjesec', 'mjeseca', 'mjeseci'],
45867            yy: ['godina', 'godine', 'godina'],
45868        },
45869        correctGrammaticalCase: function (number, wordKey) {
45870            return number === 1
45871                ? wordKey[0]
45872                : number >= 2 && number <= 4
45873                  ? wordKey[1]
45874                  : wordKey[2];
45875        },
45876        translate: function (number, withoutSuffix, key) {
45877            var wordKey = translator.words[key];
45878            if (key.length === 1) {
45879                return withoutSuffix ? wordKey[0] : wordKey[1];
45880            } else {
45881                return (
45882                    number +
45883                    ' ' +
45884                    translator.correctGrammaticalCase(number, wordKey)
45885                );
45886            }
45887        },
45888    };
45889
45890    var me = moment.defineLocale('me', {
45891        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
45892            '_'
45893        ),
45894        monthsShort:
45895            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
45896        monthsParseExact: true,
45897        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
45898            '_'
45899        ),
45900        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
45901        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
45902        weekdaysParseExact: true,
45903        longDateFormat: {
45904            LT: 'H:mm',
45905            LTS: 'H:mm:ss',
45906            L: 'DD.MM.YYYY',
45907            LL: 'D. MMMM YYYY',
45908            LLL: 'D. MMMM YYYY H:mm',
45909            LLLL: 'dddd, D. MMMM YYYY H:mm',
45910        },
45911        calendar: {
45912            sameDay: '[danas u] LT',
45913            nextDay: '[sjutra u] LT',
45914
45915            nextWeek: function () {
45916                switch (this.day()) {
45917                    case 0:
45918                        return '[u] [nedjelju] [u] LT';
45919                    case 3:
45920                        return '[u] [srijedu] [u] LT';
45921                    case 6:
45922                        return '[u] [subotu] [u] LT';
45923                    case 1:
45924                    case 2:
45925                    case 4:
45926                    case 5:
45927                        return '[u] dddd [u] LT';
45928                }
45929            },
45930            lastDay: '[juče u] LT',
45931            lastWeek: function () {
45932                var lastWeekDays = [
45933                    '[prošle] [nedjelje] [u] LT',
45934                    '[prošlog] [ponedjeljka] [u] LT',
45935                    '[prošlog] [utorka] [u] LT',
45936                    '[prošle] [srijede] [u] LT',
45937                    '[prošlog] [četvrtka] [u] LT',
45938                    '[prošlog] [petka] [u] LT',
45939                    '[prošle] [subote] [u] LT',
45940                ];
45941                return lastWeekDays[this.day()];
45942            },
45943            sameElse: 'L',
45944        },
45945        relativeTime: {
45946            future: 'za %s',
45947            past: 'prije %s',
45948            s: 'nekoliko sekundi',
45949            ss: translator.translate,
45950            m: translator.translate,
45951            mm: translator.translate,
45952            h: translator.translate,
45953            hh: translator.translate,
45954            d: 'dan',
45955            dd: translator.translate,
45956            M: 'mjesec',
45957            MM: translator.translate,
45958            y: 'godinu',
45959            yy: translator.translate,
45960        },
45961        dayOfMonthOrdinalParse: /\d{1,2}\./,
45962        ordinal: '%d.',
45963        week: {
45964            dow: 1, // Monday is the first day of the week.
45965            doy: 7, // The week that contains Jan 7th is the first week of the year.
45966        },
45967    });
45968
45969    return me;
45970
45971})));
45972
45973
45974/***/ }),
45975
vendor: 2,733 bytes, lines 45976-46055
45976/***/ "./node_modules/moment/locale/mi.js":
45977/*!******************************************!*\
45978  !*** ./node_modules/moment/locale/mi.js ***!
45979  \******************************************/
45980/*! no static exports found */
45981/***/ (function(module, exports, __webpack_require__) {
45982
45983//! moment.js locale configuration
45984//! locale : Maori [mi]
45985//! author : John Corrigan <[email protected]> : https://github.com/johnideal
45986
45987;(function (global, factory) {
45988    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
45989   undefined
45990}(this, (function (moment) { 'use strict';
45991
45992    //! moment.js locale configuration
45993
45994    var mi = moment.defineLocale('mi', {
45995        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(
45996            '_'
45997        ),
45998        monthsShort:
45999            'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(
46000                '_'
46001            ),
46002        monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
46003        monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
46004        monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
46005        monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
46006        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
46007        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
46008        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
46009        longDateFormat: {
46010            LT: 'HH:mm',
46011            LTS: 'HH:mm:ss',
46012            L: 'DD/MM/YYYY',
46013            LL: 'D MMMM YYYY',
46014            LLL: 'D MMMM YYYY [i] HH:mm',
46015            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',
46016        },
46017        calendar: {
46018            sameDay: '[i teie mahana, i] LT',
46019            nextDay: '[apopo i] LT',
46020            nextWeek: 'dddd [i] LT',
46021            lastDay: '[inanahi i] LT',
46022            lastWeek: 'dddd [whakamutunga i] LT',
46023            sameElse: 'L',
46024        },
46025        relativeTime: {
46026            future: 'i roto i %s',
46027            past: '%s i mua',
46028            s: 'te hēkona ruarua',
46029            ss: '%d hēkona',
46030            m: 'he meneti',
46031            mm: '%d meneti',
46032            h: 'te haora',
46033            hh: '%d haora',
46034            d: 'he ra',
46035            dd: '%d ra',
46036            M: 'he marama',
46037            MM: '%d marama',
46038            y: 'he tau',
46039            yy: '%d tau',
46040        },
46041        dayOfMonthOrdinalParse: /\d{1,2}º/,
46042        ordinal: '%dº',
46043        week: {
46044            dow: 1, // Monday is the first day of the week.
46045            doy: 4, // The week that contains Jan 4th is the first week of the year.
46046        },
46047    });
46048
46049    return mi;
46050
46051})));
46052
46053
46054/***/ }),
46055
vendor: 3,832 bytes, lines 46056-46161
46056/***/ "./node_modules/moment/locale/mk.js":
46057/*!******************************************!*\
46058  !*** ./node_modules/moment/locale/mk.js ***!
46059  \******************************************/
46060/*! no static exports found */
46061/***/ (function(module, exports, __webpack_require__) {
46062
46063//! moment.js locale configuration
46064//! locale : Macedonian [mk]
46065//! author : Borislav Mickov : https://github.com/B0k0
46066//! author : Sashko Todorov : https://github.com/bkyceh
46067
46068;(function (global, factory) {
46069    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
46070   undefined
46071}(this, (function (moment) { 'use strict';
46072
46073    //! moment.js locale configuration
46074
46075    var mk = moment.defineLocale('mk', {
46076        months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(
46077            '_'
46078        ),
46079        monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
46080        weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(
46081            '_'
46082        ),
46083        weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
46084        weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),
46085        longDateFormat: {
46086            LT: 'H:mm',
46087            LTS: 'H:mm:ss',
46088            L: 'D.MM.YYYY',
46089            LL: 'D MMMM YYYY',
46090            LLL: 'D MMMM YYYY H:mm',
46091            LLLL: 'dddd, D MMMM YYYY H:mm',
46092        },
46093        calendar: {
46094            sameDay: '[Денес во] LT',
46095            nextDay: '[Утре во] LT',
46096            nextWeek: '[Во] dddd [во] LT',
46097            lastDay: '[Вчера во] LT',
46098            lastWeek: function () {
46099                switch (this.day()) {
46100                    case 0:
46101                    case 3:
46102                    case 6:
46103                        return '[Изминатата] dddd [во] LT';
46104                    case 1:
46105                    case 2:
46106                    case 4:
46107                    case 5:
46108                        return '[Изминатиот] dddd [во] LT';
46109                }
46110            },
46111            sameElse: 'L',
46112        },
46113        relativeTime: {
46114            future: 'за %s',
46115            past: 'пред %s',
46116            s: 'неколку секунди',
46117            ss: '%d секунди',
46118            m: 'една минута',
46119            mm: '%d минути',
46120            h: 'еден час',
46121            hh: '%d часа',
46122            d: 'еден ден',
46123            dd: '%d дена',
46124            M: 'еден месец',
46125            MM: '%d месеци',
46126            y: 'една година',
46127            yy: '%d години',
46128        },
46129        dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
46130        ordinal: function (number) {
46131            var lastDigit = number % 10,
46132                last2Digits = number % 100;
46133            if (number === 0) {
46134                return number + '-ев';
46135            } else if (last2Digits === 0) {
46136                return number + '-ен';
46137            } else if (last2Digits > 10 && last2Digits < 20) {
46138                return number + '-ти';
46139            } else if (lastDigit === 1) {
46140                return number + '-ви';
46141            } else if (lastDigit === 2) {
46142                return number + '-ри';
46143            } else if (lastDigit === 7 || lastDigit === 8) {
46144                return number + '-ми';
46145            } else {
46146                return number + '-ти';
46147            }
46148        },
46149        week: {
46150            dow: 1, // Monday is the first day of the week.
46151            doy: 7, // The week that contains Jan 7th is the first week of the year.
46152        },
46153    });
46154
46155    return mk;
46156
46157})));
46158
46159
46160/***/ }),
46161
vendor: 4,085 bytes, lines 46162-46263
46162/***/ "./node_modules/moment/locale/ml.js":
46163/*!******************************************!*\
46164  !*** ./node_modules/moment/locale/ml.js ***!
46165  \******************************************/
46166/*! no static exports found */
46167/***/ (function(module, exports, __webpack_require__) {
46168
46169//! moment.js locale configuration
46170//! locale : Malayalam [ml]
46171//! author : Floyd Pink : https://github.com/floydpink
46172
46173;(function (global, factory) {
46174    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
46175   undefined
46176}(this, (function (moment) { 'use strict';
46177
46178    //! moment.js locale configuration
46179
46180    var ml = moment.defineLocale('ml', {
46181        months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(
46182            '_'
46183        ),
46184        monthsShort:
46185            'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(
46186                '_'
46187            ),
46188        monthsParseExact: true,
46189        weekdays:
46190            'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(
46191                '_'
46192            ),
46193        weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
46194        weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
46195        longDateFormat: {
46196            LT: 'A h:mm -നു',
46197            LTS: 'A h:mm:ss -നു',
46198            L: 'DD/MM/YYYY',
46199            LL: 'D MMMM YYYY',
46200            LLL: 'D MMMM YYYY, A h:mm -നു',
46201            LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',
46202        },
46203        calendar: {
46204            sameDay: '[ഇന്ന്] LT',
46205            nextDay: '[നാളെ] LT',
46206            nextWeek: 'dddd, LT',
46207            lastDay: '[ഇന്നലെ] LT',
46208            lastWeek: '[കഴിഞ്ഞ] dddd, LT',
46209            sameElse: 'L',
46210        },
46211        relativeTime: {
46212            future: '%s കഴിഞ്ഞ്',
46213            past: '%s മുൻപ്',
46214            s: 'അൽപ നിമിഷങ്ങൾ',
46215            ss: '%d സെക്കൻഡ്',
46216            m: 'ഒരു മിനിറ്റ്',
46217            mm: '%d മിനിറ്റ്',
46218            h: 'ഒരു മണിക്കൂർ',
46219            hh: '%d മണിക്കൂർ',
46220            d: 'ഒരു ദിവസം',
46221            dd: '%d ദിവസം',
46222            M: 'ഒരു മാസം',
46223            MM: '%d മാസം',
46224            y: 'ഒരു വർഷം',
46225            yy: '%d വർഷം',
46226        },
46227        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
46228        meridiemHour: function (hour, meridiem) {
46229            if (hour === 12) {
46230                hour = 0;
46231            }
46232            if (
46233                (meridiem === 'രാത്രി' && hour >= 4) ||
46234                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||
46235                meridiem === 'വൈകുന്നേരം'
46236            ) {
46237                return hour + 12;
46238            } else {
46239                return hour;
46240            }
46241        },
46242        meridiem: function (hour, minute, isLower) {
46243            if (hour < 4) {
46244                return 'രാത്രി';
46245            } else if (hour < 12) {
46246                return 'രാവിലെ';
46247            } else if (hour < 17) {
46248                return 'ഉച്ച കഴിഞ്ഞ്';
46249            } else if (hour < 20) {
46250                return 'വൈകുന്നേരം';
46251            } else {
46252                return 'രാത്രി';
46253            }
46254        },
46255    });
46256
46257    return ml;
46258
46259})));
46260
46261
46262/***/ }),
46263
vendor: 4,280 bytes, lines 46264-46383
46264/***/ "./node_modules/moment/locale/mn.js":
46265/*!******************************************!*\
46266  !*** ./node_modules/moment/locale/mn.js ***!
46267  \******************************************/
46268/*! no static exports found */
46269/***/ (function(module, exports, __webpack_require__) {
46270
46271//! moment.js locale configuration
46272//! locale : Mongolian [mn]
46273//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7
46274
46275;(function (global, factory) {
46276    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
46277   undefined
46278}(this, (function (moment) { 'use strict';
46279
46280    //! moment.js locale configuration
46281
46282    function translate(number, withoutSuffix, key, isFuture) {
46283        switch (key) {
46284            case 's':
46285                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';
46286            case 'ss':
46287                return number + (withoutSuffix ? ' секунд' : ' секундын');
46288            case 'm':
46289            case 'mm':
46290                return number + (withoutSuffix ? ' минут' : ' минутын');
46291            case 'h':
46292            case 'hh':
46293                return number + (withoutSuffix ? ' цаг' : ' цагийн');
46294            case 'd':
46295            case 'dd':
46296                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');
46297            case 'M':
46298            case 'MM':
46299                return number + (withoutSuffix ? ' сар' : ' сарын');
46300            case 'y':
46301            case 'yy':
46302                return number + (withoutSuffix ? ' жил' : ' жилийн');
46303            default:
46304                return number;
46305        }
46306    }
46307
46308    var mn = moment.defineLocale('mn', {
46309        months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(
46310            '_'
46311        ),
46312        monthsShort:
46313            '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(
46314                '_'
46315            ),
46316        monthsParseExact: true,
46317        weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),
46318        weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),
46319        weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),
46320        weekdaysParseExact: true,
46321        longDateFormat: {
46322            LT: 'HH:mm',
46323            LTS: 'HH:mm:ss',
46324            L: 'YYYY-MM-DD',
46325            LL: 'YYYY оны MMMMын D',
46326            LLL: 'YYYY оны MMMMын D HH:mm',
46327            LLLL: 'dddd, YYYY оны MMMMын D HH:mm',
46328        },
46329        meridiemParse: /ҮӨ|ҮХ/i,
46330        isPM: function (input) {
46331            return input === 'ҮХ';
46332        },
46333        meridiem: function (hour, minute, isLower) {
46334            if (hour < 12) {
46335                return 'Ò®Ó¨';
46336            } else {
46337                return 'ҮХ';
46338            }
46339        },
46340        calendar: {
46341            sameDay: '[Өнөөдөр] LT',
46342            nextDay: '[Маргааш] LT',
46343            nextWeek: '[Ирэх] dddd LT',
46344            lastDay: '[Өчигдөр] LT',
46345            lastWeek: '[Өнгөрсөн] dddd LT',
46346            sameElse: 'L',
46347        },
46348        relativeTime: {
46349            future: '%s дараа',
46350            past: '%s өмнө',
46351            s: translate,
46352            ss: translate,
46353            m: translate,
46354            mm: translate,
46355            h: translate,
46356            hh: translate,
46357            d: translate,
46358            dd: translate,
46359            M: translate,
46360            MM: translate,
46361            y: translate,
46362            yy: translate,
46363        },
46364        dayOfMonthOrdinalParse: /\d{1,2} өдөр/,
46365        ordinal: function (number, period) {
46366            switch (period) {
46367                case 'd':
46368                case 'D':
46369                case 'DDD':
46370                    return number + ' өдөр';
46371                default:
46372                    return number;
46373            }
46374        },
46375    });
46376
46377    return mn;
46378
46379})));
46380
46381
46382/***/ }),
46383
vendor: 7,844 bytes, lines 46384-46606
46384/***/ "./node_modules/moment/locale/mr.js":
46385/*!******************************************!*\
46386  !*** ./node_modules/moment/locale/mr.js ***!
46387  \******************************************/
46388/*! no static exports found */
46389/***/ (function(module, exports, __webpack_require__) {
46390
46391//! moment.js locale configuration
46392//! locale : Marathi [mr]
46393//! author : Harshad Kale : https://github.com/kalehv
46394//! author : Vivek Athalye : https://github.com/vnathalye
46395
46396;(function (global, factory) {
46397    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
46398   undefined
46399}(this, (function (moment) { 'use strict';
46400
46401    //! moment.js locale configuration
46402
46403    var symbolMap = {
46404            1: '१',
46405            2: '२',
46406            3: '३',
46407            4: '४',
46408            5: '५',
46409            6: '६',
46410            7: '७',
46411            8: '८',
46412            9: '९',
46413            0: '०',
46414        },
46415        numberMap = {
46416            '१': '1',
46417            '२': '2',
46418            '३': '3',
46419            '४': '4',
46420            '५': '5',
46421            '६': '6',
46422            '७': '7',
46423            '८': '8',
46424            '९': '9',
46425            '०': '0',
46426        };
46427
46428    function relativeTimeMr(number, withoutSuffix, string, isFuture) {
46429        var output = '';
46430        if (withoutSuffix) {
46431            switch (string) {
46432                case 's':
46433                    output = 'काही सेकंद';
46434                    break;
46435                case 'ss':
46436                    output = '%d सेकंद';
46437                    break;
46438                case 'm':
46439                    output = 'एक मिनिट';
46440                    break;
46441                case 'mm':
46442                    output = '%d मिनिटे';
46443                    break;
46444                case 'h':
46445                    output = 'एक तास';
46446                    break;
46447                case 'hh':
46448                    output = '%d तास';
46449                    break;
46450                case 'd':
46451                    output = 'एक दिवस';
46452                    break;
46453                case 'dd':
46454                    output = '%d दिवस';
46455                    break;
46456                case 'M':
46457                    output = 'एक महिना';
46458                    break;
46459                case 'MM':
46460                    output = '%d महिने';
46461                    break;
46462                case 'y':
46463                    output = 'एक वर्ष';
46464                    break;
46465                case 'yy':
46466                    output = '%d वर्षे';
46467                    break;
46468            }
46469        } else {
46470            switch (string) {
46471                case 's':
46472                    output = 'काही सेकंदां';
46473                    break;
46474                case 'ss':
46475                    output = '%d सेकंदां';
46476                    break;
46477                case 'm':
46478                    output = 'एका मिनिटा';
46479                    break;
46480                case 'mm':
46481                    output = '%d मिनिटां';
46482                    break;
46483                case 'h':
46484                    output = 'एका तासा';
46485                    break;
46486                case 'hh':
46487                    output = '%d तासां';
46488                    break;
46489                case 'd':
46490                    output = 'एका दिवसा';
46491                    break;
46492                case 'dd':
46493                    output = '%d दिवसां';
46494                    break;
46495                case 'M':
46496                    output = 'एका महिन्या';
46497                    break;
46498                case 'MM':
46499                    output = '%d महिन्यां';
46500                    break;
46501                case 'y':
46502                    output = 'एका वर्षा';
46503                    break;
46504                case 'yy':
46505                    output = '%d वर्षां';
46506                    break;
46507            }
46508        }
46509        return output.replace(/%d/i, number);
46510    }
46511
46512    var mr = moment.defineLocale('mr', {
46513        months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(
46514            '_'
46515        ),
46516        monthsShort:
46517            'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(
46518                '_'
46519            ),
46520        monthsParseExact: true,
46521        weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
46522        weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
46523        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),
46524        longDateFormat: {
46525            LT: 'A h:mm वाजता',
46526            LTS: 'A h:mm:ss वाजता',
46527            L: 'DD/MM/YYYY',
46528            LL: 'D MMMM YYYY',
46529            LLL: 'D MMMM YYYY, A h:mm वाजता',
46530            LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',
46531        },
46532        calendar: {
46533            sameDay: '[आज] LT',
46534            nextDay: '[उद्या] LT',
46535            nextWeek: 'dddd, LT',
46536            lastDay: '[काल] LT',
46537            lastWeek: '[मागील] dddd, LT',
46538            sameElse: 'L',
46539        },
46540        relativeTime: {
46541            future: '%sमध्ये',
46542            past: '%sपूर्वी',
46543            s: relativeTimeMr,
46544            ss: relativeTimeMr,
46545            m: relativeTimeMr,
46546            mm: relativeTimeMr,
46547            h: relativeTimeMr,
46548            hh: relativeTimeMr,
46549            d: relativeTimeMr,
46550            dd: relativeTimeMr,
46551            M: relativeTimeMr,
46552            MM: relativeTimeMr,
46553            y: relativeTimeMr,
46554            yy: relativeTimeMr,
46555        },
46556        preparse: function (string) {
46557            return string.replace(/[१२३४५६७८९०]/g, function (match) {
46558                return numberMap[match];
46559            });
46560        },
46561        postformat: function (string) {
46562            return string.replace(/\d/g, function (match) {
46563                return symbolMap[match];
46564            });
46565        },
46566        meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,
46567        meridiemHour: function (hour, meridiem) {
46568            if (hour === 12) {
46569                hour = 0;
46570            }
46571            if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {
46572                return hour;
46573            } else if (
46574                meridiem === 'दुपारी' ||
46575                meridiem === 'सायंकाळी' ||
46576                meridiem === 'रात्री'
46577            ) {
46578                return hour >= 12 ? hour : hour + 12;
46579            }
46580        },
46581        meridiem: function (hour, minute, isLower) {
46582            if (hour >= 0 && hour < 6) {
46583                return 'पहाटे';
46584            } else if (hour < 12) {
46585                return 'सकाळी';
46586            } else if (hour < 17) {
46587                return 'दुपारी';
46588            } else if (hour < 20) {
46589                return 'सायंकाळी';
46590            } else {
46591                return 'रात्री';
46592            }
46593        },
46594        week: {
46595            dow: 0, // Sunday is the first day of the week.
46596            doy: 6, // The week that contains Jan 6th is the first week of the year.
46597        },
46598    });
46599
46600    return mr;
46601
46602})));
46603
46604
46605/***/ }),
46606
vendor: 3,116 bytes, lines 46607-46702
46607/***/ "./node_modules/moment/locale/ms-my.js":
46608/*!*********************************************!*\
46609  !*** ./node_modules/moment/locale/ms-my.js ***!
46610  \*********************************************/
46611/*! no static exports found */
46612/***/ (function(module, exports, __webpack_require__) {
46613
46614//! moment.js locale configuration
46615//! locale : Malay [ms-my]
46616//! note : DEPRECATED, the correct one is [ms]
46617//! author : Weldan Jamili : https://github.com/weldan
46618
46619;(function (global, factory) {
46620    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
46621   undefined
46622}(this, (function (moment) { 'use strict';
46623
46624    //! moment.js locale configuration
46625
46626    var msMy = moment.defineLocale('ms-my', {
46627        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
46628            '_'
46629        ),
46630        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
46631        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
46632        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
46633        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
46634        longDateFormat: {
46635            LT: 'HH.mm',
46636            LTS: 'HH.mm.ss',
46637            L: 'DD/MM/YYYY',
46638            LL: 'D MMMM YYYY',
46639            LLL: 'D MMMM YYYY [pukul] HH.mm',
46640            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
46641        },
46642        meridiemParse: /pagi|tengahari|petang|malam/,
46643        meridiemHour: function (hour, meridiem) {
46644            if (hour === 12) {
46645                hour = 0;
46646            }
46647            if (meridiem === 'pagi') {
46648                return hour;
46649            } else if (meridiem === 'tengahari') {
46650                return hour >= 11 ? hour : hour + 12;
46651            } else if (meridiem === 'petang' || meridiem === 'malam') {
46652                return hour + 12;
46653            }
46654        },
46655        meridiem: function (hours, minutes, isLower) {
46656            if (hours < 11) {
46657                return 'pagi';
46658            } else if (hours < 15) {
46659                return 'tengahari';
46660            } else if (hours < 19) {
46661                return 'petang';
46662            } else {
46663                return 'malam';
46664            }
46665        },
46666        calendar: {
46667            sameDay: '[Hari ini pukul] LT',
46668            nextDay: '[Esok pukul] LT',
46669            nextWeek: 'dddd [pukul] LT',
46670            lastDay: '[Kelmarin pukul] LT',
46671            lastWeek: 'dddd [lepas pukul] LT',
46672            sameElse: 'L',
46673        },
46674        relativeTime: {
46675            future: 'dalam %s',
46676            past: '%s yang lepas',
46677            s: 'beberapa saat',
46678            ss: '%d saat',
46679            m: 'seminit',
46680            mm: '%d minit',
46681            h: 'sejam',
46682            hh: '%d jam',
46683            d: 'sehari',
46684            dd: '%d hari',
46685            M: 'sebulan',
46686            MM: '%d bulan',
46687            y: 'setahun',
46688            yy: '%d tahun',
46689        },
46690        week: {
46691            dow: 1, // Monday is the first day of the week.
46692            doy: 7, // The week that contains Jan 7th is the first week of the year.
46693        },
46694    });
46695
46696    return msMy;
46697
46698})));
46699
46700
46701/***/ }),
46702
vendor: 3,047 bytes, lines 46703-46797
46703/***/ "./node_modules/moment/locale/ms.js":
46704/*!******************************************!*\
46705  !*** ./node_modules/moment/locale/ms.js ***!
46706  \******************************************/
46707/*! no static exports found */
46708/***/ (function(module, exports, __webpack_require__) {
46709
46710//! moment.js locale configuration
46711//! locale : Malay [ms]
46712//! author : Weldan Jamili : https://github.com/weldan
46713
46714;(function (global, factory) {
46715    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
46716   undefined
46717}(this, (function (moment) { 'use strict';
46718
46719    //! moment.js locale configuration
46720
46721    var ms = moment.defineLocale('ms', {
46722        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
46723            '_'
46724        ),
46725        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
46726        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
46727        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
46728        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
46729        longDateFormat: {
46730            LT: 'HH.mm',
46731            LTS: 'HH.mm.ss',
46732            L: 'DD/MM/YYYY',
46733            LL: 'D MMMM YYYY',
46734            LLL: 'D MMMM YYYY [pukul] HH.mm',
46735            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
46736        },
46737        meridiemParse: /pagi|tengahari|petang|malam/,
46738        meridiemHour: function (hour, meridiem) {
46739            if (hour === 12) {
46740                hour = 0;
46741            }
46742            if (meridiem === 'pagi') {
46743                return hour;
46744            } else if (meridiem === 'tengahari') {
46745                return hour >= 11 ? hour : hour + 12;
46746            } else if (meridiem === 'petang' || meridiem === 'malam') {
46747                return hour + 12;
46748            }
46749        },
46750        meridiem: function (hours, minutes, isLower) {
46751            if (hours < 11) {
46752                return 'pagi';
46753            } else if (hours < 15) {
46754                return 'tengahari';
46755            } else if (hours < 19) {
46756                return 'petang';
46757            } else {
46758                return 'malam';
46759            }
46760        },
46761        calendar: {
46762            sameDay: '[Hari ini pukul] LT',
46763            nextDay: '[Esok pukul] LT',
46764            nextWeek: 'dddd [pukul] LT',
46765            lastDay: '[Kelmarin pukul] LT',
46766            lastWeek: 'dddd [lepas pukul] LT',
46767            sameElse: 'L',
46768        },
46769        relativeTime: {
46770            future: 'dalam %s',
46771            past: '%s yang lepas',
46772            s: 'beberapa saat',
46773            ss: '%d saat',
46774            m: 'seminit',
46775            mm: '%d minit',
46776            h: 'sejam',
46777            hh: '%d jam',
46778            d: 'sehari',
46779            dd: '%d hari',
46780            M: 'sebulan',
46781            MM: '%d bulan',
46782            y: 'setahun',
46783            yy: '%d tahun',
46784        },
46785        week: {
46786            dow: 1, // Monday is the first day of the week.
46787            doy: 7, // The week that contains Jan 7th is the first week of the year.
46788        },
46789    });
46790
46791    return ms;
46792
46793})));
46794
46795
46796/***/ }),
46797
vendor: 2,378 bytes, lines 46798-46873
46798/***/ "./node_modules/moment/locale/mt.js":
46799/*!******************************************!*\
46800  !*** ./node_modules/moment/locale/mt.js ***!
46801  \******************************************/
46802/*! no static exports found */
46803/***/ (function(module, exports, __webpack_require__) {
46804
46805//! moment.js locale configuration
46806//! locale : Maltese (Malta) [mt]
46807//! author : Alessandro Maruccia : https://github.com/alesma
46808
46809;(function (global, factory) {
46810    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
46811   undefined
46812}(this, (function (moment) { 'use strict';
46813
46814    //! moment.js locale configuration
46815
46816    var mt = moment.defineLocale('mt', {
46817        months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(
46818            '_'
46819        ),
46820        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),
46821        weekdays:
46822            'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(
46823                '_'
46824            ),
46825        weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),
46826        weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),
46827        longDateFormat: {
46828            LT: 'HH:mm',
46829            LTS: 'HH:mm:ss',
46830            L: 'DD/MM/YYYY',
46831            LL: 'D MMMM YYYY',
46832            LLL: 'D MMMM YYYY HH:mm',
46833            LLLL: 'dddd, D MMMM YYYY HH:mm',
46834        },
46835        calendar: {
46836            sameDay: '[Illum fil-]LT',
46837            nextDay: '[Għada fil-]LT',
46838            nextWeek: 'dddd [fil-]LT',
46839            lastDay: '[Il-bieraħ fil-]LT',
46840            lastWeek: 'dddd [li għadda] [fil-]LT',
46841            sameElse: 'L',
46842        },
46843        relativeTime: {
46844            future: 'f’ %s',
46845            past: '%s ilu',
46846            s: 'ftit sekondi',
46847            ss: '%d sekondi',
46848            m: 'minuta',
46849            mm: '%d minuti',
46850            h: 'siegħa',
46851            hh: '%d siegħat',
46852            d: 'ġurnata',
46853            dd: '%d ġranet',
46854            M: 'xahar',
46855            MM: '%d xhur',
46856            y: 'sena',
46857            yy: '%d sni',
46858        },
46859        dayOfMonthOrdinalParse: /\d{1,2}º/,
46860        ordinal: '%dº',
46861        week: {
46862            dow: 1, // Monday is the first day of the week.
46863            doy: 4, // The week that contains Jan 4th is the first week of the year.
46864        },
46865    });
46866
46867    return mt;
46868
46869})));
46870
46871
46872/***/ }),
46873
vendor: 3,912 bytes, lines 46874-46984
46874/***/ "./node_modules/moment/locale/my.js":
46875/*!******************************************!*\
46876  !*** ./node_modules/moment/locale/my.js ***!
46877  \******************************************/
46878/*! no static exports found */
46879/***/ (function(module, exports, __webpack_require__) {
46880
46881//! moment.js locale configuration
46882//! locale : Burmese [my]
46883//! author : Squar team, mysquar.com
46884//! author : David Rossellat : https://github.com/gholadr
46885//! author : Tin Aung Lin : https://github.com/thanyawzinmin
46886
46887;(function (global, factory) {
46888    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
46889   undefined
46890}(this, (function (moment) { 'use strict';
46891
46892    //! moment.js locale configuration
46893
46894    var symbolMap = {
46895            1: '၁',
46896            2: '၂',
46897            3: '၃',
46898            4: '၄',
46899            5: '၅',
46900            6: '၆',
46901            7: '၇',
46902            8: '၈',
46903            9: '၉',
46904            0: '၀',
46905        },
46906        numberMap = {
46907            '၁': '1',
46908            '၂': '2',
46909            '၃': '3',
46910            '၄': '4',
46911            '၅': '5',
46912            '၆': '6',
46913            '၇': '7',
46914            '၈': '8',
46915            '၉': '9',
46916            '၀': '0',
46917        };
46918
46919    var my = moment.defineLocale('my', {
46920        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(
46921            '_'
46922        ),
46923        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
46924        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(
46925            '_'
46926        ),
46927        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
46928        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
46929
46930        longDateFormat: {
46931            LT: 'HH:mm',
46932            LTS: 'HH:mm:ss',
46933            L: 'DD/MM/YYYY',
46934            LL: 'D MMMM YYYY',
46935            LLL: 'D MMMM YYYY HH:mm',
46936            LLLL: 'dddd D MMMM YYYY HH:mm',
46937        },
46938        calendar: {
46939            sameDay: '[ယနေ.] LT [မှာ]',
46940            nextDay: '[မနက်ဖြန်] LT [မှာ]',
46941            nextWeek: 'dddd LT [မှာ]',
46942            lastDay: '[မနေ.က] LT [မှာ]',
46943            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
46944            sameElse: 'L',
46945        },
46946        relativeTime: {
46947            future: 'လာမည့် %s မှာ',
46948            past: 'လွန်ခဲ့သော %s က',
46949            s: 'စက္ကန်.အနည်းငယ်',
46950            ss: '%d စက္ကန့်',
46951            m: 'တစ်မိနစ်',
46952            mm: '%d မိနစ်',
46953            h: 'တစ်နာရီ',
46954            hh: '%d နာရီ',
46955            d: 'တစ်ရက်',
46956            dd: '%d ရက်',
46957            M: 'တစ်လ',
46958            MM: '%d လ',
46959            y: 'တစ်နှစ်',
46960            yy: '%d နှစ်',
46961        },
46962        preparse: function (string) {
46963            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
46964                return numberMap[match];
46965            });
46966        },
46967        postformat: function (string) {
46968            return string.replace(/\d/g, function (match) {
46969                return symbolMap[match];
46970            });
46971        },
46972        week: {
46973            dow: 1, // Monday is the first day of the week.
46974            doy: 4, // The week that contains Jan 4th is the first week of the year.
46975        },
46976    });
46977
46978    return my;
46979
46980})));
46981
46982
46983/***/ }),
46984
vendor: 2,605 bytes, lines 46985-47064
46985/***/ "./node_modules/moment/locale/nb.js":
46986/*!******************************************!*\
46987  !*** ./node_modules/moment/locale/nb.js ***!
46988  \******************************************/
46989/*! no static exports found */
46990/***/ (function(module, exports, __webpack_require__) {
46991
46992//! moment.js locale configuration
46993//! locale : Norwegian Bokmål [nb]
46994//! authors : Espen Hovlandsdal : https://github.com/rexxars
46995//!           Sigurd Gartmann : https://github.com/sigurdga
46996//!           Stephen Ramthun : https://github.com/stephenramthun
46997
46998;(function (global, factory) {
46999    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
47000   undefined
47001}(this, (function (moment) { 'use strict';
47002
47003    //! moment.js locale configuration
47004
47005    var nb = moment.defineLocale('nb', {
47006        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
47007            '_'
47008        ),
47009        monthsShort:
47010            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
47011        monthsParseExact: true,
47012        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
47013        weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),
47014        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
47015        weekdaysParseExact: true,
47016        longDateFormat: {
47017            LT: 'HH:mm',
47018            LTS: 'HH:mm:ss',
47019            L: 'DD.MM.YYYY',
47020            LL: 'D. MMMM YYYY',
47021            LLL: 'D. MMMM YYYY [kl.] HH:mm',
47022            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
47023        },
47024        calendar: {
47025            sameDay: '[i dag kl.] LT',
47026            nextDay: '[i morgen kl.] LT',
47027            nextWeek: 'dddd [kl.] LT',
47028            lastDay: '[i går kl.] LT',
47029            lastWeek: '[forrige] dddd [kl.] LT',
47030            sameElse: 'L',
47031        },
47032        relativeTime: {
47033            future: 'om %s',
47034            past: '%s siden',
47035            s: 'noen sekunder',
47036            ss: '%d sekunder',
47037            m: 'ett minutt',
47038            mm: '%d minutter',
47039            h: 'én time',
47040            hh: '%d timer',
47041            d: 'én dag',
47042            dd: '%d dager',
47043            w: 'én uke',
47044            ww: '%d uker',
47045            M: 'én måned',
47046            MM: '%d måneder',
47047            y: 'ett år',
47048            yy: '%d år',
47049        },
47050        dayOfMonthOrdinalParse: /\d{1,2}\./,
47051        ordinal: '%d.',
47052        week: {
47053            dow: 1, // Monday is the first day of the week.
47054            doy: 4, // The week that contains Jan 4th is the first week of the year.
47055        },
47056    });
47057
47058    return nb;
47059
47060})));
47061
47062
47063/***/ }),
47064
vendor: 4,981 bytes, lines 47065-47205
47065/***/ "./node_modules/moment/locale/ne.js":
47066/*!******************************************!*\
47067  !*** ./node_modules/moment/locale/ne.js ***!
47068  \******************************************/
47069/*! no static exports found */
47070/***/ (function(module, exports, __webpack_require__) {
47071
47072//! moment.js locale configuration
47073//! locale : Nepalese [ne]
47074//! author : suvash : https://github.com/suvash
47075
47076;(function (global, factory) {
47077    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
47078   undefined
47079}(this, (function (moment) { 'use strict';
47080
47081    //! moment.js locale configuration
47082
47083    var symbolMap = {
47084            1: '१',
47085            2: '२',
47086            3: '३',
47087            4: '४',
47088            5: '५',
47089            6: '६',
47090            7: '७',
47091            8: '८',
47092            9: '९',
47093            0: '०',
47094        },
47095        numberMap = {
47096            '१': '1',
47097            '२': '2',
47098            '३': '3',
47099            '४': '4',
47100            '५': '5',
47101            '६': '6',
47102            '७': '7',
47103            '८': '8',
47104            '९': '9',
47105            '०': '0',
47106        };
47107
47108    var ne = moment.defineLocale('ne', {
47109        months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(
47110            '_'
47111        ),
47112        monthsShort:
47113            'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(
47114                '_'
47115            ),
47116        monthsParseExact: true,
47117        weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(
47118            '_'
47119        ),
47120        weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
47121        weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
47122        weekdaysParseExact: true,
47123        longDateFormat: {
47124            LT: 'Aको h:mm बजे',
47125            LTS: 'Aको h:mm:ss बजे',
47126            L: 'DD/MM/YYYY',
47127            LL: 'D MMMM YYYY',
47128            LLL: 'D MMMM YYYY, Aको h:mm बजे',
47129            LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',
47130        },
47131        preparse: function (string) {
47132            return string.replace(/[१२३४५६७८९०]/g, function (match) {
47133                return numberMap[match];
47134            });
47135        },
47136        postformat: function (string) {
47137            return string.replace(/\d/g, function (match) {
47138                return symbolMap[match];
47139            });
47140        },
47141        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
47142        meridiemHour: function (hour, meridiem) {
47143            if (hour === 12) {
47144                hour = 0;
47145            }
47146            if (meridiem === 'राति') {
47147                return hour < 4 ? hour : hour + 12;
47148            } else if (meridiem === 'बिहान') {
47149                return hour;
47150            } else if (meridiem === 'दिउँसो') {
47151                return hour >= 10 ? hour : hour + 12;
47152            } else if (meridiem === 'साँझ') {
47153                return hour + 12;
47154            }
47155        },
47156        meridiem: function (hour, minute, isLower) {
47157            if (hour < 3) {
47158                return 'राति';
47159            } else if (hour < 12) {
47160                return 'बिहान';
47161            } else if (hour < 16) {
47162                return 'दिउँसो';
47163            } else if (hour < 20) {
47164                return 'साँझ';
47165            } else {
47166                return 'राति';
47167            }
47168        },
47169        calendar: {
47170            sameDay: '[आज] LT',
47171            nextDay: '[भोलि] LT',
47172            nextWeek: '[आउँदो] dddd[,] LT',
47173            lastDay: '[हिजो] LT',
47174            lastWeek: '[गएको] dddd[,] LT',
47175            sameElse: 'L',
47176        },
47177        relativeTime: {
47178            future: '%sमा',
47179            past: '%s अगाडि',
47180            s: 'केही क्षण',
47181            ss: '%d सेकेण्ड',
47182            m: 'एक मिनेट',
47183            mm: '%d मिनेट',
47184            h: 'एक घण्टा',
47185            hh: '%d घण्टा',
47186            d: 'एक दिन',
47187            dd: '%d दिन',
47188            M: 'एक महिना',
47189            MM: '%d महिना',
47190            y: 'एक बर्ष',
47191            yy: '%d बर्ष',
47192        },
47193        week: {
47194            dow: 0, // Sunday is the first day of the week.
47195            doy: 6, // The week that contains Jan 6th is the first week of the year.
47196        },
47197    });
47198
47199    return ne;
47200
47201})));
47202
47203
47204/***/ }),
47205
vendor: 4,046 bytes, lines 47206-47327
47206/***/ "./node_modules/moment/locale/nl-be.js":
47207/*!*********************************************!*\
47208  !*** ./node_modules/moment/locale/nl-be.js ***!
47209  \*********************************************/
47210/*! no static exports found */
47211/***/ (function(module, exports, __webpack_require__) {
47212
47213//! moment.js locale configuration
47214//! locale : Dutch (Belgium) [nl-be]
47215//! author : Joris Röling : https://github.com/jorisroling
47216//! author : Jacob Middag : https://github.com/middagj
47217
47218;(function (global, factory) {
47219    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
47220   undefined
47221}(this, (function (moment) { 'use strict';
47222
47223    //! moment.js locale configuration
47224
47225    var monthsShortWithDots =
47226            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
47227        monthsShortWithoutDots =
47228            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),
47229        monthsParse = [
47230            /^jan/i,
47231            /^feb/i,
47232            /^(maart|mrt\.?)$/i,
47233            /^apr/i,
47234            /^mei$/i,
47235            /^jun[i.]?$/i,
47236            /^jul[i.]?$/i,
47237            /^aug/i,
47238            /^sep/i,
47239            /^okt/i,
47240            /^nov/i,
47241            /^dec/i,
47242        ],
47243        monthsRegex =
47244            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
47245
47246    var nlBe = moment.defineLocale('nl-be', {
47247        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
47248            '_'
47249        ),
47250        monthsShort: function (m, format) {
47251            if (!m) {
47252                return monthsShortWithDots;
47253            } else if (/-MMM-/.test(format)) {
47254                return monthsShortWithoutDots[m.month()];
47255            } else {
47256                return monthsShortWithDots[m.month()];
47257            }
47258        },
47259
47260        monthsRegex: monthsRegex,
47261        monthsShortRegex: monthsRegex,
47262        monthsStrictRegex:
47263            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
47264        monthsShortStrictRegex:
47265            /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
47266
47267        monthsParse: monthsParse,
47268        longMonthsParse: monthsParse,
47269        shortMonthsParse: monthsParse,
47270
47271        weekdays:
47272            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
47273        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
47274        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
47275        weekdaysParseExact: true,
47276        longDateFormat: {
47277            LT: 'HH:mm',
47278            LTS: 'HH:mm:ss',
47279            L: 'DD/MM/YYYY',
47280            LL: 'D MMMM YYYY',
47281            LLL: 'D MMMM YYYY HH:mm',
47282            LLLL: 'dddd D MMMM YYYY HH:mm',
47283        },
47284        calendar: {
47285            sameDay: '[vandaag om] LT',
47286            nextDay: '[morgen om] LT',
47287            nextWeek: 'dddd [om] LT',
47288            lastDay: '[gisteren om] LT',
47289            lastWeek: '[afgelopen] dddd [om] LT',
47290            sameElse: 'L',
47291        },
47292        relativeTime: {
47293            future: 'over %s',
47294            past: '%s geleden',
47295            s: 'een paar seconden',
47296            ss: '%d seconden',
47297            m: 'één minuut',
47298            mm: '%d minuten',
47299            h: 'één uur',
47300            hh: '%d uur',
47301            d: 'één dag',
47302            dd: '%d dagen',
47303            M: 'één maand',
47304            MM: '%d maanden',
47305            y: 'één jaar',
47306            yy: '%d jaar',
47307        },
47308        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
47309        ordinal: function (number) {
47310            return (
47311                number +
47312                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
47313            );
47314        },
47315        week: {
47316            dow: 1, // Monday is the first day of the week.
47317            doy: 4, // The week that contains Jan 4th is the first week of the year.
47318        },
47319    });
47320
47321    return nlBe;
47322
47323})));
47324
47325
47326/***/ }),
47327
vendor: 4,071 bytes, lines 47328-47451
47328/***/ "./node_modules/moment/locale/nl.js":
47329/*!******************************************!*\
47330  !*** ./node_modules/moment/locale/nl.js ***!
47331  \******************************************/
47332/*! no static exports found */
47333/***/ (function(module, exports, __webpack_require__) {
47334
47335//! moment.js locale configuration
47336//! locale : Dutch [nl]
47337//! author : Joris Röling : https://github.com/jorisroling
47338//! author : Jacob Middag : https://github.com/middagj
47339
47340;(function (global, factory) {
47341    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
47342   undefined
47343}(this, (function (moment) { 'use strict';
47344
47345    //! moment.js locale configuration
47346
47347    var monthsShortWithDots =
47348            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
47349        monthsShortWithoutDots =
47350            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),
47351        monthsParse = [
47352            /^jan/i,
47353            /^feb/i,
47354            /^(maart|mrt\.?)$/i,
47355            /^apr/i,
47356            /^mei$/i,
47357            /^jun[i.]?$/i,
47358            /^jul[i.]?$/i,
47359            /^aug/i,
47360            /^sep/i,
47361            /^okt/i,
47362            /^nov/i,
47363            /^dec/i,
47364        ],
47365        monthsRegex =
47366            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
47367
47368    var nl = moment.defineLocale('nl', {
47369        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
47370            '_'
47371        ),
47372        monthsShort: function (m, format) {
47373            if (!m) {
47374                return monthsShortWithDots;
47375            } else if (/-MMM-/.test(format)) {
47376                return monthsShortWithoutDots[m.month()];
47377            } else {
47378                return monthsShortWithDots[m.month()];
47379            }
47380        },
47381
47382        monthsRegex: monthsRegex,
47383        monthsShortRegex: monthsRegex,
47384        monthsStrictRegex:
47385            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
47386        monthsShortStrictRegex:
47387            /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
47388
47389        monthsParse: monthsParse,
47390        longMonthsParse: monthsParse,
47391        shortMonthsParse: monthsParse,
47392
47393        weekdays:
47394            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
47395        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
47396        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
47397        weekdaysParseExact: true,
47398        longDateFormat: {
47399            LT: 'HH:mm',
47400            LTS: 'HH:mm:ss',
47401            L: 'DD-MM-YYYY',
47402            LL: 'D MMMM YYYY',
47403            LLL: 'D MMMM YYYY HH:mm',
47404            LLLL: 'dddd D MMMM YYYY HH:mm',
47405        },
47406        calendar: {
47407            sameDay: '[vandaag om] LT',
47408            nextDay: '[morgen om] LT',
47409            nextWeek: 'dddd [om] LT',
47410            lastDay: '[gisteren om] LT',
47411            lastWeek: '[afgelopen] dddd [om] LT',
47412            sameElse: 'L',
47413        },
47414        relativeTime: {
47415            future: 'over %s',
47416            past: '%s geleden',
47417            s: 'een paar seconden',
47418            ss: '%d seconden',
47419            m: 'één minuut',
47420            mm: '%d minuten',
47421            h: 'één uur',
47422            hh: '%d uur',
47423            d: 'één dag',
47424            dd: '%d dagen',
47425            w: 'één week',
47426            ww: '%d weken',
47427            M: 'één maand',
47428            MM: '%d maanden',
47429            y: 'één jaar',
47430            yy: '%d jaar',
47431        },
47432        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
47433        ordinal: function (number) {
47434            return (
47435                number +
47436                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
47437            );
47438        },
47439        week: {
47440            dow: 1, // Monday is the first day of the week.
47441            doy: 4, // The week that contains Jan 4th is the first week of the year.
47442        },
47443    });
47444
47445    return nl;
47446
47447})));
47448
47449
47450/***/ }),
47451
vendor: 2,530 bytes, lines 47452-47530
47452/***/ "./node_modules/moment/locale/nn.js":
47453/*!******************************************!*\
47454  !*** ./node_modules/moment/locale/nn.js ***!
47455  \******************************************/
47456/*! no static exports found */
47457/***/ (function(module, exports, __webpack_require__) {
47458
47459//! moment.js locale configuration
47460//! locale : Nynorsk [nn]
47461//! authors : https://github.com/mechuwind
47462//!           Stephen Ramthun : https://github.com/stephenramthun
47463
47464;(function (global, factory) {
47465    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
47466   undefined
47467}(this, (function (moment) { 'use strict';
47468
47469    //! moment.js locale configuration
47470
47471    var nn = moment.defineLocale('nn', {
47472        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
47473            '_'
47474        ),
47475        monthsShort:
47476            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
47477        monthsParseExact: true,
47478        weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
47479        weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),
47480        weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),
47481        weekdaysParseExact: true,
47482        longDateFormat: {
47483            LT: 'HH:mm',
47484            LTS: 'HH:mm:ss',
47485            L: 'DD.MM.YYYY',
47486            LL: 'D. MMMM YYYY',
47487            LLL: 'D. MMMM YYYY [kl.] H:mm',
47488            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
47489        },
47490        calendar: {
47491            sameDay: '[I dag klokka] LT',
47492            nextDay: '[I morgon klokka] LT',
47493            nextWeek: 'dddd [klokka] LT',
47494            lastDay: '[I går klokka] LT',
47495            lastWeek: '[Føregåande] dddd [klokka] LT',
47496            sameElse: 'L',
47497        },
47498        relativeTime: {
47499            future: 'om %s',
47500            past: '%s sidan',
47501            s: 'nokre sekund',
47502            ss: '%d sekund',
47503            m: 'eit minutt',
47504            mm: '%d minutt',
47505            h: 'ein time',
47506            hh: '%d timar',
47507            d: 'ein dag',
47508            dd: '%d dagar',
47509            w: 'ei veke',
47510            ww: '%d veker',
47511            M: 'ein månad',
47512            MM: '%d månader',
47513            y: 'eit år',
47514            yy: '%d år',
47515        },
47516        dayOfMonthOrdinalParse: /\d{1,2}\./,
47517        ordinal: '%d.',
47518        week: {
47519            dow: 1, // Monday is the first day of the week.
47520            doy: 4, // The week that contains Jan 4th is the first week of the year.
47521        },
47522    });
47523
47524    return nn;
47525
47526})));
47527
47528
47529/***/ }),
47530
vendor: 3,328 bytes, lines 47531-47635
47531/***/ "./node_modules/moment/locale/oc-lnc.js":
47532/*!**********************************************!*\
47533  !*** ./node_modules/moment/locale/oc-lnc.js ***!
47534  \**********************************************/
47535/*! no static exports found */
47536/***/ (function(module, exports, __webpack_require__) {
47537
47538//! moment.js locale configuration
47539//! locale : Occitan, lengadocian dialecte [oc-lnc]
47540//! author : Quentin PAGÈS : https://github.com/Quenty31
47541
47542;(function (global, factory) {
47543    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
47544   undefined
47545}(this, (function (moment) { 'use strict';
47546
47547    //! moment.js locale configuration
47548
47549    var ocLnc = moment.defineLocale('oc-lnc', {
47550        months: {
47551            standalone:
47552                'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(
47553                    '_'
47554                ),
47555            format: "de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split(
47556                '_'
47557            ),
47558            isFormat: /D[oD]?(\s)+MMMM/,
47559        },
47560        monthsShort:
47561            'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(
47562                '_'
47563            ),
47564        monthsParseExact: true,
47565        weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(
47566            '_'
47567        ),
47568        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),
47569        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),
47570        weekdaysParseExact: true,
47571        longDateFormat: {
47572            LT: 'H:mm',
47573            LTS: 'H:mm:ss',
47574            L: 'DD/MM/YYYY',
47575            LL: 'D MMMM [de] YYYY',
47576            ll: 'D MMM YYYY',
47577            LLL: 'D MMMM [de] YYYY [a] H:mm',
47578            lll: 'D MMM YYYY, H:mm',
47579            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',
47580            llll: 'ddd D MMM YYYY, H:mm',
47581        },
47582        calendar: {
47583            sameDay: '[uèi a] LT',
47584            nextDay: '[deman a] LT',
47585            nextWeek: 'dddd [a] LT',
47586            lastDay: '[ièr a] LT',
47587            lastWeek: 'dddd [passat a] LT',
47588            sameElse: 'L',
47589        },
47590        relativeTime: {
47591            future: "d'aquí %s",
47592            past: 'fa %s',
47593            s: 'unas segondas',
47594            ss: '%d segondas',
47595            m: 'una minuta',
47596            mm: '%d minutas',
47597            h: 'una ora',
47598            hh: '%d oras',
47599            d: 'un jorn',
47600            dd: '%d jorns',
47601            M: 'un mes',
47602            MM: '%d meses',
47603            y: 'un an',
47604            yy: '%d ans',
47605        },
47606        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
47607        ordinal: function (number, period) {
47608            var output =
47609                number === 1
47610                    ? 'r'
47611                    : number === 2
47612                      ? 'n'
47613                      : number === 3
47614                        ? 'r'
47615                        : number === 4
47616                          ? 't'
47617                          : 'è';
47618            if (period === 'w' || period === 'W') {
47619                output = 'a';
47620            }
47621            return number + output;
47622        },
47623        week: {
47624            dow: 1, // Monday is the first day of the week.
47625            doy: 4,
47626        },
47627    });
47628
47629    return ocLnc;
47630
47631})));
47632
47633
47634/***/ }),
47635
vendor: 5,168 bytes, lines 47636-47777
47636/***/ "./node_modules/moment/locale/pa-in.js":
47637/*!*********************************************!*\
47638  !*** ./node_modules/moment/locale/pa-in.js ***!
47639  \*********************************************/
47640/*! no static exports found */
47641/***/ (function(module, exports, __webpack_require__) {
47642
47643//! moment.js locale configuration
47644//! locale : Punjabi (India) [pa-in]
47645//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit
47646
47647;(function (global, factory) {
47648    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
47649   undefined
47650}(this, (function (moment) { 'use strict';
47651
47652    //! moment.js locale configuration
47653
47654    var symbolMap = {
47655            1: 'à©§',
47656            2: '੨',
47657            3: 'à©©',
47658            4: '੪',
47659            5: 'à©«',
47660            6: '੬',
47661            7: 'à©­',
47662            8: 'à©®',
47663            9: '੯',
47664            0: '੦',
47665        },
47666        numberMap = {
47667            'à©§': '1',
47668            '੨': '2',
47669            'à©©': '3',
47670            '੪': '4',
47671            'à©«': '5',
47672            '੬': '6',
47673            'à©­': '7',
47674            'à©®': '8',
47675            '੯': '9',
47676            '੦': '0',
47677        };
47678
47679    var paIn = moment.defineLocale('pa-in', {
47680        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.
47681        months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(
47682            '_'
47683        ),
47684        monthsShort:
47685            'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(
47686                '_'
47687            ),
47688        weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(
47689            '_'
47690        ),
47691        weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
47692        weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
47693        longDateFormat: {
47694            LT: 'A h:mm ਵਜੇ',
47695            LTS: 'A h:mm:ss ਵਜੇ',
47696            L: 'DD/MM/YYYY',
47697            LL: 'D MMMM YYYY',
47698            LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',
47699            LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',
47700        },
47701        calendar: {
47702            sameDay: '[ਅਜ] LT',
47703            nextDay: '[ਕਲ] LT',
47704            nextWeek: '[ਅਗਲਾ] dddd, LT',
47705            lastDay: '[ਕਲ] LT',
47706            lastWeek: '[ਪਿਛਲੇ] dddd, LT',
47707            sameElse: 'L',
47708        },
47709        relativeTime: {
47710            future: '%s ਵਿੱਚ',
47711            past: '%s ਪਿਛਲੇ',
47712            s: 'ਕੁਝ ਸਕਿੰਟ',
47713            ss: '%d ਸਕਿੰਟ',
47714            m: 'ਇਕ ਮਿੰਟ',
47715            mm: '%d ਮਿੰਟ',
47716            h: 'ਇੱਕ ਘੰਟਾ',
47717            hh: '%d ਘੰਟੇ',
47718            d: 'ਇੱਕ ਦਿਨ',
47719            dd: '%d ਦਿਨ',
47720            M: 'ਇੱਕ ਮਹੀਨਾ',
47721            MM: '%d ਮਹੀਨੇ',
47722            y: 'ਇੱਕ ਸਾਲ',
47723            yy: '%d ਸਾਲ',
47724        },
47725        preparse: function (string) {
47726            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
47727                return numberMap[match];
47728            });
47729        },
47730        postformat: function (string) {
47731            return string.replace(/\d/g, function (match) {
47732                return symbolMap[match];
47733            });
47734        },
47735        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
47736        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
47737        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
47738        meridiemHour: function (hour, meridiem) {
47739            if (hour === 12) {
47740                hour = 0;
47741            }
47742            if (meridiem === 'ਰਾਤ') {
47743                return hour < 4 ? hour : hour + 12;
47744            } else if (meridiem === 'ਸਵੇਰ') {
47745                return hour;
47746            } else if (meridiem === 'ਦੁਪਹਿਰ') {
47747                return hour >= 10 ? hour : hour + 12;
47748            } else if (meridiem === 'ਸ਼ਾਮ') {
47749                return hour + 12;
47750            }
47751        },
47752        meridiem: function (hour, minute, isLower) {
47753            if (hour < 4) {
47754                return 'ਰਾਤ';
47755            } else if (hour < 10) {
47756                return 'ਸਵੇਰ';
47757            } else if (hour < 17) {
47758                return 'ਦੁਪਹਿਰ';
47759            } else if (hour < 20) {
47760                return 'ਸ਼ਾਮ';
47761            } else {
47762                return 'ਰਾਤ';
47763            }
47764        },
47765        week: {
47766            dow: 0, // Sunday is the first day of the week.
47767            doy: 6, // The week that contains Jan 6th is the first week of the year.
47768        },
47769    });
47770
47771    return paIn;
47772
47773})));
47774
47775
47776/***/ }),
47777
vendor: 5,176 bytes, lines 47778-47937
47778/***/ "./node_modules/moment/locale/pl.js":
47779/*!******************************************!*\
47780  !*** ./node_modules/moment/locale/pl.js ***!
47781  \******************************************/
47782/*! no static exports found */
47783/***/ (function(module, exports, __webpack_require__) {
47784
47785//! moment.js locale configuration
47786//! locale : Polish [pl]
47787//! author : Rafal Hirsz : https://github.com/evoL
47788
47789;(function (global, factory) {
47790    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
47791   undefined
47792}(this, (function (moment) { 'use strict';
47793
47794    //! moment.js locale configuration
47795
47796    var monthsNominative =
47797            'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(
47798                '_'
47799            ),
47800        monthsSubjective =
47801            'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(
47802                '_'
47803            ),
47804        monthsParse = [
47805            /^sty/i,
47806            /^lut/i,
47807            /^mar/i,
47808            /^kwi/i,
47809            /^maj/i,
47810            /^cze/i,
47811            /^lip/i,
47812            /^sie/i,
47813            /^wrz/i,
47814            /^paź/i,
47815            /^lis/i,
47816            /^gru/i,
47817        ];
47818    function plural(n) {
47819        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;
47820    }
47821    function translate(number, withoutSuffix, key) {
47822        var result = number + ' ';
47823        switch (key) {
47824            case 'ss':
47825                return result + (plural(number) ? 'sekundy' : 'sekund');
47826            case 'm':
47827                return withoutSuffix ? 'minuta' : 'minutę';
47828            case 'mm':
47829                return result + (plural(number) ? 'minuty' : 'minut');
47830            case 'h':
47831                return withoutSuffix ? 'godzina' : 'godzinę';
47832            case 'hh':
47833                return result + (plural(number) ? 'godziny' : 'godzin');
47834            case 'ww':
47835                return result + (plural(number) ? 'tygodnie' : 'tygodni');
47836            case 'MM':
47837                return result + (plural(number) ? 'miesiące' : 'miesięcy');
47838            case 'yy':
47839                return result + (plural(number) ? 'lata' : 'lat');
47840        }
47841    }
47842
47843    var pl = moment.defineLocale('pl', {
47844        months: function (momentToFormat, format) {
47845            if (!momentToFormat) {
47846                return monthsNominative;
47847            } else if (/D MMMM/.test(format)) {
47848                return monthsSubjective[momentToFormat.month()];
47849            } else {
47850                return monthsNominative[momentToFormat.month()];
47851            }
47852        },
47853        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
47854        monthsParse: monthsParse,
47855        longMonthsParse: monthsParse,
47856        shortMonthsParse: monthsParse,
47857        weekdays:
47858            'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
47859        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
47860        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
47861        longDateFormat: {
47862            LT: 'HH:mm',
47863            LTS: 'HH:mm:ss',
47864            L: 'DD.MM.YYYY',
47865            LL: 'D MMMM YYYY',
47866            LLL: 'D MMMM YYYY HH:mm',
47867            LLLL: 'dddd, D MMMM YYYY HH:mm',
47868        },
47869        calendar: {
47870            sameDay: '[Dziś o] LT',
47871            nextDay: '[Jutro o] LT',
47872            nextWeek: function () {
47873                switch (this.day()) {
47874                    case 0:
47875                        return '[W niedzielę o] LT';
47876
47877                    case 2:
47878                        return '[We wtorek o] LT';
47879
47880                    case 3:
47881                        return '[W środę o] LT';
47882
47883                    case 6:
47884                        return '[W sobotę o] LT';
47885
47886                    default:
47887                        return '[W] dddd [o] LT';
47888                }
47889            },
47890            lastDay: '[Wczoraj o] LT',
47891            lastWeek: function () {
47892                switch (this.day()) {
47893                    case 0:
47894                        return '[W zeszłą niedzielę o] LT';
47895                    case 3:
47896                        return '[W zeszłą środę o] LT';
47897                    case 6:
47898                        return '[W zeszłą sobotę o] LT';
47899                    default:
47900                        return '[W zeszły] dddd [o] LT';
47901                }
47902            },
47903            sameElse: 'L',
47904        },
47905        relativeTime: {
47906            future: 'za %s',
47907            past: '%s temu',
47908            s: 'kilka sekund',
47909            ss: translate,
47910            m: translate,
47911            mm: translate,
47912            h: translate,
47913            hh: translate,
47914            d: '1 dzień',
47915            dd: '%d dni',
47916            w: 'tydzień',
47917            ww: translate,
47918            M: 'miesiąc',
47919            MM: translate,
47920            y: 'rok',
47921            yy: translate,
47922        },
47923        dayOfMonthOrdinalParse: /\d{1,2}\./,
47924        ordinal: '%d.',
47925        week: {
47926            dow: 1, // Monday is the first day of the week.
47927            doy: 4, // The week that contains Jan 4th is the first week of the year.
47928        },
47929    });
47930
47931    return pl;
47932
47933})));
47934
47935
47936/***/ }),
47937
vendor: 2,572 bytes, lines 47938-48015
47938/***/ "./node_modules/moment/locale/pt-br.js":
47939/*!*********************************************!*\
47940  !*** ./node_modules/moment/locale/pt-br.js ***!
47941  \*********************************************/
47942/*! no static exports found */
47943/***/ (function(module, exports, __webpack_require__) {
47944
47945//! moment.js locale configuration
47946//! locale : Portuguese (Brazil) [pt-br]
47947//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
47948
47949;(function (global, factory) {
47950    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
47951   undefined
47952}(this, (function (moment) { 'use strict';
47953
47954    //! moment.js locale configuration
47955
47956    var ptBr = moment.defineLocale('pt-br', {
47957        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
47958            '_'
47959        ),
47960        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
47961        weekdays:
47962            'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(
47963                '_'
47964            ),
47965        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),
47966        weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),
47967        weekdaysParseExact: true,
47968        longDateFormat: {
47969            LT: 'HH:mm',
47970            LTS: 'HH:mm:ss',
47971            L: 'DD/MM/YYYY',
47972            LL: 'D [de] MMMM [de] YYYY',
47973            LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',
47974            LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',
47975        },
47976        calendar: {
47977            sameDay: '[Hoje às] LT',
47978            nextDay: '[Amanhã às] LT',
47979            nextWeek: 'dddd [às] LT',
47980            lastDay: '[Ontem às] LT',
47981            lastWeek: function () {
47982                return this.day() === 0 || this.day() === 6
47983                    ? '[Último] dddd [às] LT' // Saturday + Sunday
47984                    : '[Última] dddd [às] LT'; // Monday - Friday
47985            },
47986            sameElse: 'L',
47987        },
47988        relativeTime: {
47989            future: 'em %s',
47990            past: 'há %s',
47991            s: 'poucos segundos',
47992            ss: '%d segundos',
47993            m: 'um minuto',
47994            mm: '%d minutos',
47995            h: 'uma hora',
47996            hh: '%d horas',
47997            d: 'um dia',
47998            dd: '%d dias',
47999            M: 'um mês',
48000            MM: '%d meses',
48001            y: 'um ano',
48002            yy: '%d anos',
48003        },
48004        dayOfMonthOrdinalParse: /\d{1,2}º/,
48005        ordinal: '%dº',
48006        invalidDate: 'Data inválida',
48007    });
48008
48009    return ptBr;
48010
48011})));
48012
48013
48014/***/ }),
48015
vendor: 2,690 bytes, lines 48016-48098
48016/***/ "./node_modules/moment/locale/pt.js":
48017/*!******************************************!*\
48018  !*** ./node_modules/moment/locale/pt.js ***!
48019  \******************************************/
48020/*! no static exports found */
48021/***/ (function(module, exports, __webpack_require__) {
48022
48023//! moment.js locale configuration
48024//! locale : Portuguese [pt]
48025//! author : Jefferson : https://github.com/jalex79
48026
48027;(function (global, factory) {
48028    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
48029   undefined
48030}(this, (function (moment) { 'use strict';
48031
48032    //! moment.js locale configuration
48033
48034    var pt = moment.defineLocale('pt', {
48035        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
48036            '_'
48037        ),
48038        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
48039        weekdays:
48040            'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(
48041                '_'
48042            ),
48043        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
48044        weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),
48045        weekdaysParseExact: true,
48046        longDateFormat: {
48047            LT: 'HH:mm',
48048            LTS: 'HH:mm:ss',
48049            L: 'DD/MM/YYYY',
48050            LL: 'D [de] MMMM [de] YYYY',
48051            LLL: 'D [de] MMMM [de] YYYY HH:mm',
48052            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',
48053        },
48054        calendar: {
48055            sameDay: '[Hoje às] LT',
48056            nextDay: '[Amanhã às] LT',
48057            nextWeek: 'dddd [às] LT',
48058            lastDay: '[Ontem às] LT',
48059            lastWeek: function () {
48060                return this.day() === 0 || this.day() === 6
48061                    ? '[Último] dddd [às] LT' // Saturday + Sunday
48062                    : '[Última] dddd [às] LT'; // Monday - Friday
48063            },
48064            sameElse: 'L',
48065        },
48066        relativeTime: {
48067            future: 'em %s',
48068            past: 'há %s',
48069            s: 'segundos',
48070            ss: '%d segundos',
48071            m: 'um minuto',
48072            mm: '%d minutos',
48073            h: 'uma hora',
48074            hh: '%d horas',
48075            d: 'um dia',
48076            dd: '%d dias',
48077            w: 'uma semana',
48078            ww: '%d semanas',
48079            M: 'um mês',
48080            MM: '%d meses',
48081            y: 'um ano',
48082            yy: '%d anos',
48083        },
48084        dayOfMonthOrdinalParse: /\d{1,2}º/,
48085        ordinal: '%dº',
48086        week: {
48087            dow: 1, // Monday is the first day of the week.
48088            doy: 4, // The week that contains Jan 4th is the first week of the year.
48089        },
48090    });
48091
48092    return pt;
48093
48094})));
48095
48096
48097/***/ }),
48098
vendor: 3,081 bytes, lines 48099-48194
48099/***/ "./node_modules/moment/locale/ro.js":
48100/*!******************************************!*\
48101  !*** ./node_modules/moment/locale/ro.js ***!
48102  \******************************************/
48103/*! no static exports found */
48104/***/ (function(module, exports, __webpack_require__) {
48105
48106//! moment.js locale configuration
48107//! locale : Romanian [ro]
48108//! author : Vlad Gurdiga : https://github.com/gurdiga
48109//! author : Valentin Agachi : https://github.com/avaly
48110//! author : Emanuel Cepoi : https://github.com/cepem
48111
48112;(function (global, factory) {
48113    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
48114   undefined
48115}(this, (function (moment) { 'use strict';
48116
48117    //! moment.js locale configuration
48118
48119    function relativeTimeWithPlural(number, withoutSuffix, key) {
48120        var format = {
48121                ss: 'secunde',
48122                mm: 'minute',
48123                hh: 'ore',
48124                dd: 'zile',
48125                ww: 'săptămâni',
48126                MM: 'luni',
48127                yy: 'ani',
48128            },
48129            separator = ' ';
48130        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
48131            separator = ' de ';
48132        }
48133        return number + separator + format[key];
48134    }
48135
48136    var ro = moment.defineLocale('ro', {
48137        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(
48138            '_'
48139        ),
48140        monthsShort:
48141            'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(
48142                '_'
48143            ),
48144        monthsParseExact: true,
48145        weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
48146        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
48147        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
48148        longDateFormat: {
48149            LT: 'H:mm',
48150            LTS: 'H:mm:ss',
48151            L: 'DD.MM.YYYY',
48152            LL: 'D MMMM YYYY',
48153            LLL: 'D MMMM YYYY H:mm',
48154            LLLL: 'dddd, D MMMM YYYY H:mm',
48155        },
48156        calendar: {
48157            sameDay: '[azi la] LT',
48158            nextDay: '[mâine la] LT',
48159            nextWeek: 'dddd [la] LT',
48160            lastDay: '[ieri la] LT',
48161            lastWeek: '[fosta] dddd [la] LT',
48162            sameElse: 'L',
48163        },
48164        relativeTime: {
48165            future: 'peste %s',
48166            past: '%s în urmă',
48167            s: 'câteva secunde',
48168            ss: relativeTimeWithPlural,
48169            m: 'un minut',
48170            mm: relativeTimeWithPlural,
48171            h: 'o oră',
48172            hh: relativeTimeWithPlural,
48173            d: 'o zi',
48174            dd: relativeTimeWithPlural,
48175            w: 'o săptămână',
48176            ww: relativeTimeWithPlural,
48177            M: 'o lună',
48178            MM: relativeTimeWithPlural,
48179            y: 'un an',
48180            yy: relativeTimeWithPlural,
48181        },
48182        week: {
48183            dow: 1, // Monday is the first day of the week.
48184            doy: 7, // The week that contains Jan 7th is the first week of the year.
48185        },
48186    });
48187
48188    return ro;
48189
48190})));
48191
48192
48193/***/ }),
48194
vendor: 9,716 bytes, lines 48195-48427
48195/***/ "./node_modules/moment/locale/ru.js":
48196/*!******************************************!*\
48197  !*** ./node_modules/moment/locale/ru.js ***!
48198  \******************************************/
48199/*! no static exports found */
48200/***/ (function(module, exports, __webpack_require__) {
48201
48202//! moment.js locale configuration
48203//! locale : Russian [ru]
48204//! author : Viktorminator : https://github.com/Viktorminator
48205//! author : Menelion Elensúle : https://github.com/Oire
48206//! author : Коренберг Марк : https://github.com/socketpair
48207
48208;(function (global, factory) {
48209    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
48210   undefined
48211}(this, (function (moment) { 'use strict';
48212
48213    //! moment.js locale configuration
48214
48215    function plural(word, num) {
48216        var forms = word.split('_');
48217        return num % 10 === 1 && num % 100 !== 11
48218            ? forms[0]
48219            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
48220              ? forms[1]
48221              : forms[2];
48222    }
48223    function relativeTimeWithPlural(number, withoutSuffix, key) {
48224        var format = {
48225            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
48226            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
48227            hh: 'час_часа_часов',
48228            dd: 'день_дня_дней',
48229            ww: 'неделя_недели_недель',
48230            MM: 'месяц_месяца_месяцев',
48231            yy: 'год_года_лет',
48232        };
48233        if (key === 'm') {
48234            return withoutSuffix ? 'минута' : 'минуту';
48235        } else {
48236            return number + ' ' + plural(format[key], +number);
48237        }
48238    }
48239    var monthsParse = [
48240        /^янв/i,
48241        /^фев/i,
48242        /^мар/i,
48243        /^апр/i,
48244        /^ма[йя]/i,
48245        /^июн/i,
48246        /^июл/i,
48247        /^авг/i,
48248        /^сен/i,
48249        /^окт/i,
48250        /^ноя/i,
48251        /^дек/i,
48252    ];
48253
48254    // http://new.gramota.ru/spravka/rules/139-prop : § 103
48255    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
48256    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
48257    var ru = moment.defineLocale('ru', {
48258        months: {
48259            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(
48260                '_'
48261            ),
48262            standalone:
48263                'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(
48264                    '_'
48265                ),
48266        },
48267        monthsShort: {
48268            // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку?
48269            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(
48270                '_'
48271            ),
48272            standalone:
48273                'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(
48274                    '_'
48275                ),
48276        },
48277        weekdays: {
48278            standalone:
48279                'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(
48280                    '_'
48281                ),
48282            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(
48283                '_'
48284            ),
48285            isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,
48286        },
48287        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
48288        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
48289        monthsParse: monthsParse,
48290        longMonthsParse: monthsParse,
48291        shortMonthsParse: monthsParse,
48292
48293        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
48294        monthsRegex:
48295            /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
48296
48297        // копия предыдущего
48298        monthsShortRegex:
48299            /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
48300
48301        // полные названия с падежами
48302        monthsStrictRegex:
48303            /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
48304
48305        // Выражение, которое соответствует только сокращённым формам
48306        monthsShortStrictRegex:
48307            /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
48308        longDateFormat: {
48309            LT: 'H:mm',
48310            LTS: 'H:mm:ss',
48311            L: 'DD.MM.YYYY',
48312            LL: 'D MMMM YYYY г.',
48313            LLL: 'D MMMM YYYY г., H:mm',
48314            LLLL: 'dddd, D MMMM YYYY г., H:mm',
48315        },
48316        calendar: {
48317            sameDay: '[Сегодня, в] LT',
48318            nextDay: '[Завтра, в] LT',
48319            lastDay: '[Вчера, в] LT',
48320            nextWeek: function (now) {
48321                if (now.week() !== this.week()) {
48322                    switch (this.day()) {
48323                        case 0:
48324                            return '[В следующее] dddd, [в] LT';
48325                        case 1:
48326                        case 2:
48327                        case 4:
48328                            return '[В следующий] dddd, [в] LT';
48329                        case 3:
48330                        case 5:
48331                        case 6:
48332                            return '[В следующую] dddd, [в] LT';
48333                    }
48334                } else {
48335                    if (this.day() === 2) {
48336                        return '[Во] dddd, [в] LT';
48337                    } else {
48338                        return '[В] dddd, [в] LT';
48339                    }
48340                }
48341            },
48342            lastWeek: function (now) {
48343                if (now.week() !== this.week()) {
48344                    switch (this.day()) {
48345                        case 0:
48346                            return '[В прошлое] dddd, [в] LT';
48347                        case 1:
48348                        case 2:
48349                        case 4:
48350                            return '[В прошлый] dddd, [в] LT';
48351                        case 3:
48352                        case 5:
48353                        case 6:
48354                            return '[В прошлую] dddd, [в] LT';
48355                    }
48356                } else {
48357                    if (this.day() === 2) {
48358                        return '[Во] dddd, [в] LT';
48359                    } else {
48360                        return '[В] dddd, [в] LT';
48361                    }
48362                }
48363            },
48364            sameElse: 'L',
48365        },
48366        relativeTime: {
48367            future: 'через %s',
48368            past: '%s назад',
48369            s: 'несколько секунд',
48370            ss: relativeTimeWithPlural,
48371            m: relativeTimeWithPlural,
48372            mm: relativeTimeWithPlural,
48373            h: 'час',
48374            hh: relativeTimeWithPlural,
48375            d: 'день',
48376            dd: relativeTimeWithPlural,
48377            w: 'неделя',
48378            ww: relativeTimeWithPlural,
48379            M: 'месяц',
48380            MM: relativeTimeWithPlural,
48381            y: 'год',
48382            yy: relativeTimeWithPlural,
48383        },
48384        meridiemParse: /ночи|утра|дня|вечера/i,
48385        isPM: function (input) {
48386            return /^(дня|вечера)$/.test(input);
48387        },
48388        meridiem: function (hour, minute, isLower) {
48389            if (hour < 4) {
48390                return 'ночи';
48391            } else if (hour < 12) {
48392                return 'утра';
48393            } else if (hour < 17) {
48394                return 'дня';
48395            } else {
48396                return 'вечера';
48397            }
48398        },
48399        dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/,
48400        ordinal: function (number, period) {
48401            switch (period) {
48402                case 'M':
48403                case 'd':
48404                case 'DDD':
48405                    return number + '-й';
48406                case 'D':
48407                    return number + '-го';
48408                case 'w':
48409                case 'W':
48410                    return number + '-я';
48411                default:
48412                    return number;
48413            }
48414        },
48415        week: {
48416            dow: 1, // Monday is the first day of the week.
48417            doy: 4, // The week that contains Jan 4th is the first week of the year.
48418        },
48419    });
48420
48421    return ru;
48422
48423})));
48424
48425
48426/***/ }),
48427
vendor: 2,943 bytes, lines 48428-48528
48428/***/ "./node_modules/moment/locale/sd.js":
48429/*!******************************************!*\
48430  !*** ./node_modules/moment/locale/sd.js ***!
48431  \******************************************/
48432/*! no static exports found */
48433/***/ (function(module, exports, __webpack_require__) {
48434
48435//! moment.js locale configuration
48436//! locale : Sindhi [sd]
48437//! author : Narain Sagar : https://github.com/narainsagar
48438
48439;(function (global, factory) {
48440    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
48441   undefined
48442}(this, (function (moment) { 'use strict';
48443
48444    //! moment.js locale configuration
48445
48446    var months = [
48447            'جنوري',
48448            'فيبروري',
48449            'مارچ',
48450            'اپريل',
48451            'مئي',
48452            'جون',
48453            'جولاءِ',
48454            'آگسٽ',
48455            'سيپٽمبر',
48456            'آڪٽوبر',
48457            'نومبر',
48458            'ڊسمبر',
48459        ],
48460        days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];
48461
48462    var sd = moment.defineLocale('sd', {
48463        months: months,
48464        monthsShort: months,
48465        weekdays: days,
48466        weekdaysShort: days,
48467        weekdaysMin: days,
48468        longDateFormat: {
48469            LT: 'HH:mm',
48470            LTS: 'HH:mm:ss',
48471            L: 'DD/MM/YYYY',
48472            LL: 'D MMMM YYYY',
48473            LLL: 'D MMMM YYYY HH:mm',
48474            LLLL: 'dddd، D MMMM YYYY HH:mm',
48475        },
48476        meridiemParse: /صبح|شام/,
48477        isPM: function (input) {
48478            return 'شام' === input;
48479        },
48480        meridiem: function (hour, minute, isLower) {
48481            if (hour < 12) {
48482                return 'صبح';
48483            }
48484            return 'شام';
48485        },
48486        calendar: {
48487            sameDay: '[اڄ] LT',
48488            nextDay: '[سڀاڻي] LT',
48489            nextWeek: 'dddd [اڳين هفتي تي] LT',
48490            lastDay: '[ڪالهه] LT',
48491            lastWeek: '[گزريل هفتي] dddd [تي] LT',
48492            sameElse: 'L',
48493        },
48494        relativeTime: {
48495            future: '%s پوء',
48496            past: '%s اڳ',
48497            s: 'چند سيڪنڊ',
48498            ss: '%d سيڪنڊ',
48499            m: 'هڪ منٽ',
48500            mm: '%d منٽ',
48501            h: 'هڪ ڪلاڪ',
48502            hh: '%d ڪلاڪ',
48503            d: 'هڪ ڏينهن',
48504            dd: '%d ڏينهن',
48505            M: 'هڪ مهينو',
48506            MM: '%d مهينا',
48507            y: 'هڪ سال',
48508            yy: '%d سال',
48509        },
48510        preparse: function (string) {
48511            return string.replace(/،/g, ',');
48512        },
48513        postformat: function (string) {
48514            return string.replace(/,/g, '،');
48515        },
48516        week: {
48517            dow: 1, // Monday is the first day of the week.
48518            doy: 4, // The week that contains Jan 4th is the first week of the year.
48519        },
48520    });
48521
48522    return sd;
48523
48524})));
48525
48526
48527/***/ }),
48528
vendor: 2,547 bytes, lines 48529-48605
48529/***/ "./node_modules/moment/locale/se.js":
48530/*!******************************************!*\
48531  !*** ./node_modules/moment/locale/se.js ***!
48532  \******************************************/
48533/*! no static exports found */
48534/***/ (function(module, exports, __webpack_require__) {
48535
48536//! moment.js locale configuration
48537//! locale : Northern Sami [se]
48538//! authors : BÃ¥rd Rolstad Henriksen : https://github.com/karamell
48539
48540;(function (global, factory) {
48541    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
48542   undefined
48543}(this, (function (moment) { 'use strict';
48544
48545    //! moment.js locale configuration
48546
48547    var se = moment.defineLocale('se', {
48548        months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(
48549            '_'
48550        ),
48551        monthsShort:
48552            'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),
48553        weekdays:
48554            'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(
48555                '_'
48556            ),
48557        weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
48558        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),
48559        longDateFormat: {
48560            LT: 'HH:mm',
48561            LTS: 'HH:mm:ss',
48562            L: 'DD.MM.YYYY',
48563            LL: 'MMMM D. [b.] YYYY',
48564            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',
48565            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',
48566        },
48567        calendar: {
48568            sameDay: '[otne ti] LT',
48569            nextDay: '[ihttin ti] LT',
48570            nextWeek: 'dddd [ti] LT',
48571            lastDay: '[ikte ti] LT',
48572            lastWeek: '[ovddit] dddd [ti] LT',
48573            sameElse: 'L',
48574        },
48575        relativeTime: {
48576            future: '%s geažes',
48577            past: 'maŋit %s',
48578            s: 'moadde sekunddat',
48579            ss: '%d sekunddat',
48580            m: 'okta minuhta',
48581            mm: '%d minuhtat',
48582            h: 'okta diimmu',
48583            hh: '%d diimmut',
48584            d: 'okta beaivi',
48585            dd: '%d beaivvit',
48586            M: 'okta mánnu',
48587            MM: '%d mánut',
48588            y: 'okta jahki',
48589            yy: '%d jagit',
48590        },
48591        dayOfMonthOrdinalParse: /\d{1,2}\./,
48592        ordinal: '%d.',
48593        week: {
48594            dow: 1, // Monday is the first day of the week.
48595            doy: 4, // The week that contains Jan 4th is the first week of the year.
48596        },
48597    });
48598
48599    return se;
48600
48601})));
48602
48603
48604/***/ }),
48605
vendor: 3,427 bytes, lines 48606-48694
48606/***/ "./node_modules/moment/locale/si.js":
48607/*!******************************************!*\
48608  !*** ./node_modules/moment/locale/si.js ***!
48609  \******************************************/
48610/*! no static exports found */
48611/***/ (function(module, exports, __webpack_require__) {
48612
48613//! moment.js locale configuration
48614//! locale : Sinhalese [si]
48615//! author : Sampath Sitinamaluwa : https://github.com/sampathsris
48616
48617;(function (global, factory) {
48618    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
48619   undefined
48620}(this, (function (moment) { 'use strict';
48621
48622    //! moment.js locale configuration
48623
48624    /*jshint -W100*/
48625    var si = moment.defineLocale('si', {
48626        months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(
48627            '_'
48628        ),
48629        monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(
48630            '_'
48631        ),
48632        weekdays:
48633            'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(
48634                '_'
48635            ),
48636        weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
48637        weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
48638        weekdaysParseExact: true,
48639        longDateFormat: {
48640            LT: 'a h:mm',
48641            LTS: 'a h:mm:ss',
48642            L: 'YYYY/MM/DD',
48643            LL: 'YYYY MMMM D',
48644            LLL: 'YYYY MMMM D, a h:mm',
48645            LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',
48646        },
48647        calendar: {
48648            sameDay: '[අද] LT[ට]',
48649            nextDay: '[හෙට] LT[ට]',
48650            nextWeek: 'dddd LT[à¶§]',
48651            lastDay: '[ඊයේ] LT[ට]',
48652            lastWeek: '[පසුගිය] dddd LT[ට]',
48653            sameElse: 'L',
48654        },
48655        relativeTime: {
48656            future: '%sකින්',
48657            past: '%sකට පෙර',
48658            s: 'තත්පර කිහිපය',
48659            ss: 'තත්පර %d',
48660            m: 'මිනිත්තුව',
48661            mm: 'මිනිත්තු %d',
48662            h: 'පැය',
48663            hh: 'පැය %d',
48664            d: 'දිනය',
48665            dd: 'දින %d',
48666            M: 'මාසය',
48667            MM: 'මාස %d',
48668            y: 'වසර',
48669            yy: 'වසර %d',
48670        },
48671        dayOfMonthOrdinalParse: /\d{1,2} වැනි/,
48672        ordinal: function (number) {
48673            return number + ' වැනි';
48674        },
48675        meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
48676        isPM: function (input) {
48677            return input === 'ප.ව.' || input === 'පස් වරු';
48678        },
48679        meridiem: function (hours, minutes, isLower) {
48680            if (hours > 11) {
48681                return isLower ? 'ප.ව.' : 'පස් වරු';
48682            } else {
48683                return isLower ? 'පෙ.ව.' : 'පෙර වරු';
48684            }
48685        },
48686    });
48687
48688    return si;
48689
48690})));
48691
48692
48693/***/ }),
48694
vendor: 6,215 bytes, lines 48695-48859
48695/***/ "./node_modules/moment/locale/sk.js":
48696/*!******************************************!*\
48697  !*** ./node_modules/moment/locale/sk.js ***!
48698  \******************************************/
48699/*! no static exports found */
48700/***/ (function(module, exports, __webpack_require__) {
48701
48702//! moment.js locale configuration
48703//! locale : Slovak [sk]
48704//! author : Martin Minka : https://github.com/k2s
48705//! based on work of petrbela : https://github.com/petrbela
48706
48707;(function (global, factory) {
48708    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
48709   undefined
48710}(this, (function (moment) { 'use strict';
48711
48712    //! moment.js locale configuration
48713
48714    var months =
48715            'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(
48716                '_'
48717            ),
48718        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
48719    function plural(n) {
48720        return n > 1 && n < 5;
48721    }
48722    function translate(number, withoutSuffix, key, isFuture) {
48723        var result = number + ' ';
48724        switch (key) {
48725            case 's': // a few seconds / in a few seconds / a few seconds ago
48726                return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';
48727            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
48728                if (withoutSuffix || isFuture) {
48729                    return result + (plural(number) ? 'sekundy' : 'sekúnd');
48730                } else {
48731                    return result + 'sekundami';
48732                }
48733            case 'm': // a minute / in a minute / a minute ago
48734                return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';
48735            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
48736                if (withoutSuffix || isFuture) {
48737                    return result + (plural(number) ? 'minúty' : 'minút');
48738                } else {
48739                    return result + 'minútami';
48740                }
48741            case 'h': // an hour / in an hour / an hour ago
48742                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
48743            case 'hh': // 9 hours / in 9 hours / 9 hours ago
48744                if (withoutSuffix || isFuture) {
48745                    return result + (plural(number) ? 'hodiny' : 'hodín');
48746                } else {
48747                    return result + 'hodinami';
48748                }
48749            case 'd': // a day / in a day / a day ago
48750                return withoutSuffix || isFuture ? 'deň' : 'dňom';
48751            case 'dd': // 9 days / in 9 days / 9 days ago
48752                if (withoutSuffix || isFuture) {
48753                    return result + (plural(number) ? 'dni' : 'dní');
48754                } else {
48755                    return result + 'dňami';
48756                }
48757            case 'M': // a month / in a month / a month ago
48758                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';
48759            case 'MM': // 9 months / in 9 months / 9 months ago
48760                if (withoutSuffix || isFuture) {
48761                    return result + (plural(number) ? 'mesiace' : 'mesiacov');
48762                } else {
48763                    return result + 'mesiacmi';
48764                }
48765            case 'y': // a year / in a year / a year ago
48766                return withoutSuffix || isFuture ? 'rok' : 'rokom';
48767            case 'yy': // 9 years / in 9 years / 9 years ago
48768                if (withoutSuffix || isFuture) {
48769                    return result + (plural(number) ? 'roky' : 'rokov');
48770                } else {
48771                    return result + 'rokmi';
48772                }
48773        }
48774    }
48775
48776    var sk = moment.defineLocale('sk', {
48777        months: months,
48778        monthsShort: monthsShort,
48779        weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
48780        weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),
48781        weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),
48782        longDateFormat: {
48783            LT: 'H:mm',
48784            LTS: 'H:mm:ss',
48785            L: 'DD.MM.YYYY',
48786            LL: 'D. MMMM YYYY',
48787            LLL: 'D. MMMM YYYY H:mm',
48788            LLLL: 'dddd D. MMMM YYYY H:mm',
48789        },
48790        calendar: {
48791            sameDay: '[dnes o] LT',
48792            nextDay: '[zajtra o] LT',
48793            nextWeek: function () {
48794                switch (this.day()) {
48795                    case 0:
48796                        return '[v nedeľu o] LT';
48797                    case 1:
48798                    case 2:
48799                        return '[v] dddd [o] LT';
48800                    case 3:
48801                        return '[v stredu o] LT';
48802                    case 4:
48803                        return '[vo štvrtok o] LT';
48804                    case 5:
48805                        return '[v piatok o] LT';
48806                    case 6:
48807                        return '[v sobotu o] LT';
48808                }
48809            },
48810            lastDay: '[včera o] LT',
48811            lastWeek: function () {
48812                switch (this.day()) {
48813                    case 0:
48814                        return '[minulú nedeľu o] LT';
48815                    case 1:
48816                    case 2:
48817                        return '[minulý] dddd [o] LT';
48818                    case 3:
48819                        return '[minulú stredu o] LT';
48820                    case 4:
48821                    case 5:
48822                        return '[minulý] dddd [o] LT';
48823                    case 6:
48824                        return '[minulú sobotu o] LT';
48825                }
48826            },
48827            sameElse: 'L',
48828        },
48829        relativeTime: {
48830            future: 'za %s',
48831            past: 'pred %s',
48832            s: translate,
48833            ss: translate,
48834            m: translate,
48835            mm: translate,
48836            h: translate,
48837            hh: translate,
48838            d: translate,
48839            dd: translate,
48840            M: translate,
48841            MM: translate,
48842            y: translate,
48843            yy: translate,
48844        },
48845        dayOfMonthOrdinalParse: /\d{1,2}\./,
48846        ordinal: '%d.',
48847        week: {
48848            dow: 1, // Monday is the first day of the week.
48849            doy: 4, // The week that contains Jan 4th is the first week of the year.
48850        },
48851    });
48852
48853    return sk;
48854
48855})));
48856
48857
48858/***/ }),
48859
vendor: 7,261 bytes, lines 48860-49050
48860/***/ "./node_modules/moment/locale/sl.js":
48861/*!******************************************!*\
48862  !*** ./node_modules/moment/locale/sl.js ***!
48863  \******************************************/
48864/*! no static exports found */
48865/***/ (function(module, exports, __webpack_require__) {
48866
48867//! moment.js locale configuration
48868//! locale : Slovenian [sl]
48869//! author : Robert Sedovšek : https://github.com/sedovsek
48870
48871;(function (global, factory) {
48872    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
48873   undefined
48874}(this, (function (moment) { 'use strict';
48875
48876    //! moment.js locale configuration
48877
48878    function processRelativeTime(number, withoutSuffix, key, isFuture) {
48879        var result = number + ' ';
48880        switch (key) {
48881            case 's':
48882                return withoutSuffix || isFuture
48883                    ? 'nekaj sekund'
48884                    : 'nekaj sekundami';
48885            case 'ss':
48886                if (number === 1) {
48887                    result += withoutSuffix ? 'sekundo' : 'sekundi';
48888                } else if (number === 2) {
48889                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';
48890                } else if (number < 5) {
48891                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';
48892                } else {
48893                    result += 'sekund';
48894                }
48895                return result;
48896            case 'm':
48897                return withoutSuffix ? 'ena minuta' : 'eno minuto';
48898            case 'mm':
48899                if (number === 1) {
48900                    result += withoutSuffix ? 'minuta' : 'minuto';
48901                } else if (number === 2) {
48902                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
48903                } else if (number < 5) {
48904                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';
48905                } else {
48906                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';
48907                }
48908                return result;
48909            case 'h':
48910                return withoutSuffix ? 'ena ura' : 'eno uro';
48911            case 'hh':
48912                if (number === 1) {
48913                    result += withoutSuffix ? 'ura' : 'uro';
48914                } else if (number === 2) {
48915                    result += withoutSuffix || isFuture ? 'uri' : 'urama';
48916                } else if (number < 5) {
48917                    result += withoutSuffix || isFuture ? 'ure' : 'urami';
48918                } else {
48919                    result += withoutSuffix || isFuture ? 'ur' : 'urami';
48920                }
48921                return result;
48922            case 'd':
48923                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
48924            case 'dd':
48925                if (number === 1) {
48926                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';
48927                } else if (number === 2) {
48928                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
48929                } else {
48930                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
48931                }
48932                return result;
48933            case 'M':
48934                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
48935            case 'MM':
48936                if (number === 1) {
48937                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
48938                } else if (number === 2) {
48939                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
48940                } else if (number < 5) {
48941                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
48942                } else {
48943                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
48944                }
48945                return result;
48946            case 'y':
48947                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
48948            case 'yy':
48949                if (number === 1) {
48950                    result += withoutSuffix || isFuture ? 'leto' : 'letom';
48951                } else if (number === 2) {
48952                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';
48953                } else if (number < 5) {
48954                    result += withoutSuffix || isFuture ? 'leta' : 'leti';
48955                } else {
48956                    result += withoutSuffix || isFuture ? 'let' : 'leti';
48957                }
48958                return result;
48959        }
48960    }
48961
48962    var sl = moment.defineLocale('sl', {
48963        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(
48964            '_'
48965        ),
48966        monthsShort:
48967            'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(
48968                '_'
48969            ),
48970        monthsParseExact: true,
48971        weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
48972        weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
48973        weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),
48974        weekdaysParseExact: true,
48975        longDateFormat: {
48976            LT: 'H:mm',
48977            LTS: 'H:mm:ss',
48978            L: 'DD. MM. YYYY',
48979            LL: 'D. MMMM YYYY',
48980            LLL: 'D. MMMM YYYY H:mm',
48981            LLLL: 'dddd, D. MMMM YYYY H:mm',
48982        },
48983        calendar: {
48984            sameDay: '[danes ob] LT',
48985            nextDay: '[jutri ob] LT',
48986
48987            nextWeek: function () {
48988                switch (this.day()) {
48989                    case 0:
48990                        return '[v] [nedeljo] [ob] LT';
48991                    case 3:
48992                        return '[v] [sredo] [ob] LT';
48993                    case 6:
48994                        return '[v] [soboto] [ob] LT';
48995                    case 1:
48996                    case 2:
48997                    case 4:
48998                    case 5:
48999                        return '[v] dddd [ob] LT';
49000                }
49001            },
49002            lastDay: '[včeraj ob] LT',
49003            lastWeek: function () {
49004                switch (this.day()) {
49005                    case 0:
49006                        return '[prejšnjo] [nedeljo] [ob] LT';
49007                    case 3:
49008                        return '[prejšnjo] [sredo] [ob] LT';
49009                    case 6:
49010                        return '[prejšnjo] [soboto] [ob] LT';
49011                    case 1:
49012                    case 2:
49013                    case 4:
49014                    case 5:
49015                        return '[prejšnji] dddd [ob] LT';
49016                }
49017            },
49018            sameElse: 'L',
49019        },
49020        relativeTime: {
49021            future: 'čez %s',
49022            past: 'pred %s',
49023            s: processRelativeTime,
49024            ss: processRelativeTime,
49025            m: processRelativeTime,
49026            mm: processRelativeTime,
49027            h: processRelativeTime,
49028            hh: processRelativeTime,
49029            d: processRelativeTime,
49030            dd: processRelativeTime,
49031            M: processRelativeTime,
49032            MM: processRelativeTime,
49033            y: processRelativeTime,
49034            yy: processRelativeTime,
49035        },
49036        dayOfMonthOrdinalParse: /\d{1,2}\./,
49037        ordinal: '%d.',
49038        week: {
49039            dow: 1, // Monday is the first day of the week.
49040            doy: 7, // The week that contains Jan 7th is the first week of the year.
49041        },
49042    });
49043
49044    return sl;
49045
49046})));
49047
49048
49049/***/ }),
49050
vendor: 2,709 bytes, lines 49051-49135
49051/***/ "./node_modules/moment/locale/sq.js":
49052/*!******************************************!*\
49053  !*** ./node_modules/moment/locale/sq.js ***!
49054  \******************************************/
49055/*! no static exports found */
49056/***/ (function(module, exports, __webpack_require__) {
49057
49058//! moment.js locale configuration
49059//! locale : Albanian [sq]
49060//! author : Flakërim Ismani : https://github.com/flakerimi
49061//! author : Menelion Elensúle : https://github.com/Oire
49062//! author : Oerd Cukalla : https://github.com/oerd
49063
49064;(function (global, factory) {
49065    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
49066   undefined
49067}(this, (function (moment) { 'use strict';
49068
49069    //! moment.js locale configuration
49070
49071    var sq = moment.defineLocale('sq', {
49072        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(
49073            '_'
49074        ),
49075        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
49076        weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(
49077            '_'
49078        ),
49079        weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
49080        weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),
49081        weekdaysParseExact: true,
49082        meridiemParse: /PD|MD/,
49083        isPM: function (input) {
49084            return input.charAt(0) === 'M';
49085        },
49086        meridiem: function (hours, minutes, isLower) {
49087            return hours < 12 ? 'PD' : 'MD';
49088        },
49089        longDateFormat: {
49090            LT: 'HH:mm',
49091            LTS: 'HH:mm:ss',
49092            L: 'DD/MM/YYYY',
49093            LL: 'D MMMM YYYY',
49094            LLL: 'D MMMM YYYY HH:mm',
49095            LLLL: 'dddd, D MMMM YYYY HH:mm',
49096        },
49097        calendar: {
49098            sameDay: '[Sot në] LT',
49099            nextDay: '[Nesër në] LT',
49100            nextWeek: 'dddd [në] LT',
49101            lastDay: '[Dje në] LT',
49102            lastWeek: 'dddd [e kaluar në] LT',
49103            sameElse: 'L',
49104        },
49105        relativeTime: {
49106            future: 'në %s',
49107            past: '%s më parë',
49108            s: 'disa sekonda',
49109            ss: '%d sekonda',
49110            m: 'një minutë',
49111            mm: '%d minuta',
49112            h: 'një orë',
49113            hh: '%d orë',
49114            d: 'një ditë',
49115            dd: '%d ditë',
49116            M: 'një muaj',
49117            MM: '%d muaj',
49118            y: 'një vit',
49119            yy: '%d vite',
49120        },
49121        dayOfMonthOrdinalParse: /\d{1,2}\./,
49122        ordinal: '%d.',
49123        week: {
49124            dow: 1, // Monday is the first day of the week.
49125            doy: 4, // The week that contains Jan 4th is the first week of the year.
49126        },
49127    });
49128
49129    return sq;
49130
49131})));
49132
49133
49134/***/ }),
49135
vendor: 5,748 bytes, lines 49136-49282
49136/***/ "./node_modules/moment/locale/sr-cyrl.js":
49137/*!***********************************************!*\
49138  !*** ./node_modules/moment/locale/sr-cyrl.js ***!
49139  \***********************************************/
49140/*! no static exports found */
49141/***/ (function(module, exports, __webpack_require__) {
49142
49143//! moment.js locale configuration
49144//! locale : Serbian Cyrillic [sr-cyrl]
49145//! author : Milan Janačković<[email protected]> : https://github.com/milan-j
49146//! author : Stefan Crnjaković <[email protected]> : https://github.com/crnjakovic
49147
49148;(function (global, factory) {
49149    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
49150   undefined
49151}(this, (function (moment) { 'use strict';
49152
49153    //! moment.js locale configuration
49154
49155    var translator = {
49156        words: {
49157            //Different grammatical cases
49158            ss: ['секунда', 'секунде', 'секунди'],
49159            m: ['један минут', 'једног минута'],
49160            mm: ['минут', 'минута', 'минута'],
49161            h: ['један сат', 'једног сата'],
49162            hh: ['сат', 'сата', 'сати'],
49163            d: ['један дан', 'једног дана'],
49164            dd: ['дан', 'дана', 'дана'],
49165            M: ['један месец', 'једног месеца'],
49166            MM: ['месец', 'месеца', 'месеци'],
49167            y: ['једну годину', 'једне године'],
49168            yy: ['годину', 'године', 'година'],
49169        },
49170        correctGrammaticalCase: function (number, wordKey) {
49171            if (
49172                number % 10 >= 1 &&
49173                number % 10 <= 4 &&
49174                (number % 100 < 10 || number % 100 >= 20)
49175            ) {
49176                return number % 10 === 1 ? wordKey[0] : wordKey[1];
49177            }
49178            return wordKey[2];
49179        },
49180        translate: function (number, withoutSuffix, key, isFuture) {
49181            var wordKey = translator.words[key],
49182                word;
49183
49184            if (key.length === 1) {
49185                // Nominativ
49186                if (key === 'y' && withoutSuffix) return 'једна година';
49187                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];
49188            }
49189
49190            word = translator.correctGrammaticalCase(number, wordKey);
49191            // Nominativ
49192            if (key === 'yy' && withoutSuffix && word === 'годину') {
49193                return number + ' година';
49194            }
49195
49196            return number + ' ' + word;
49197        },
49198    };
49199
49200    var srCyrl = moment.defineLocale('sr-cyrl', {
49201        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(
49202            '_'
49203        ),
49204        monthsShort:
49205            'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),
49206        monthsParseExact: true,
49207        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
49208        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
49209        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
49210        weekdaysParseExact: true,
49211        longDateFormat: {
49212            LT: 'H:mm',
49213            LTS: 'H:mm:ss',
49214            L: 'D. M. YYYY.',
49215            LL: 'D. MMMM YYYY.',
49216            LLL: 'D. MMMM YYYY. H:mm',
49217            LLLL: 'dddd, D. MMMM YYYY. H:mm',
49218        },
49219        calendar: {
49220            sameDay: '[данас у] LT',
49221            nextDay: '[сутра у] LT',
49222            nextWeek: function () {
49223                switch (this.day()) {
49224                    case 0:
49225                        return '[у] [недељу] [у] LT';
49226                    case 3:
49227                        return '[у] [среду] [у] LT';
49228                    case 6:
49229                        return '[у] [суботу] [у] LT';
49230                    case 1:
49231                    case 2:
49232                    case 4:
49233                    case 5:
49234                        return '[у] dddd [у] LT';
49235                }
49236            },
49237            lastDay: '[јуче у] LT',
49238            lastWeek: function () {
49239                var lastWeekDays = [
49240                    '[прошле] [недеље] [у] LT',
49241                    '[прошлог] [понедељка] [у] LT',
49242                    '[прошлог] [уторка] [у] LT',
49243                    '[прошле] [среде] [у] LT',
49244                    '[прошлог] [четвртка] [у] LT',
49245                    '[прошлог] [петка] [у] LT',
49246                    '[прошле] [суботе] [у] LT',
49247                ];
49248                return lastWeekDays[this.day()];
49249            },
49250            sameElse: 'L',
49251        },
49252        relativeTime: {
49253            future: 'за %s',
49254            past: 'пре %s',
49255            s: 'неколико секунди',
49256            ss: translator.translate,
49257            m: translator.translate,
49258            mm: translator.translate,
49259            h: translator.translate,
49260            hh: translator.translate,
49261            d: translator.translate,
49262            dd: translator.translate,
49263            M: translator.translate,
49264            MM: translator.translate,
49265            y: translator.translate,
49266            yy: translator.translate,
49267        },
49268        dayOfMonthOrdinalParse: /\d{1,2}\./,
49269        ordinal: '%d.',
49270        week: {
49271            dow: 1, // Monday is the first day of the week.
49272            doy: 7, // The week that contains Jan 1st is the first week of the year.
49273        },
49274    });
49275
49276    return srCyrl;
49277
49278})));
49279
49280
49281/***/ }),
49282
vendor: 5,175 bytes, lines 49283-49431
49283/***/ "./node_modules/moment/locale/sr.js":
49284/*!******************************************!*\
49285  !*** ./node_modules/moment/locale/sr.js ***!
49286  \******************************************/
49287/*! no static exports found */
49288/***/ (function(module, exports, __webpack_require__) {
49289
49290//! moment.js locale configuration
49291//! locale : Serbian [sr]
49292//! author : Milan Janačković<[email protected]> : https://github.com/milan-j
49293//! author : Stefan Crnjaković <[email protected]> : https://github.com/crnjakovic
49294
49295;(function (global, factory) {
49296    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
49297   undefined
49298}(this, (function (moment) { 'use strict';
49299
49300    //! moment.js locale configuration
49301
49302    var translator = {
49303        words: {
49304            //Different grammatical cases
49305            ss: ['sekunda', 'sekunde', 'sekundi'],
49306            m: ['jedan minut', 'jednog minuta'],
49307            mm: ['minut', 'minuta', 'minuta'],
49308            h: ['jedan sat', 'jednog sata'],
49309            hh: ['sat', 'sata', 'sati'],
49310            d: ['jedan dan', 'jednog dana'],
49311            dd: ['dan', 'dana', 'dana'],
49312            M: ['jedan mesec', 'jednog meseca'],
49313            MM: ['mesec', 'meseca', 'meseci'],
49314            y: ['jednu godinu', 'jedne godine'],
49315            yy: ['godinu', 'godine', 'godina'],
49316        },
49317        correctGrammaticalCase: function (number, wordKey) {
49318            if (
49319                number % 10 >= 1 &&
49320                number % 10 <= 4 &&
49321                (number % 100 < 10 || number % 100 >= 20)
49322            ) {
49323                return number % 10 === 1 ? wordKey[0] : wordKey[1];
49324            }
49325            return wordKey[2];
49326        },
49327        translate: function (number, withoutSuffix, key, isFuture) {
49328            var wordKey = translator.words[key],
49329                word;
49330
49331            if (key.length === 1) {
49332                // Nominativ
49333                if (key === 'y' && withoutSuffix) return 'jedna godina';
49334                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];
49335            }
49336
49337            word = translator.correctGrammaticalCase(number, wordKey);
49338            // Nominativ
49339            if (key === 'yy' && withoutSuffix && word === 'godinu') {
49340                return number + ' godina';
49341            }
49342
49343            return number + ' ' + word;
49344        },
49345    };
49346
49347    var sr = moment.defineLocale('sr', {
49348        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
49349            '_'
49350        ),
49351        monthsShort:
49352            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
49353        monthsParseExact: true,
49354        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(
49355            '_'
49356        ),
49357        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
49358        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
49359        weekdaysParseExact: true,
49360        longDateFormat: {
49361            LT: 'H:mm',
49362            LTS: 'H:mm:ss',
49363            L: 'D. M. YYYY.',
49364            LL: 'D. MMMM YYYY.',
49365            LLL: 'D. MMMM YYYY. H:mm',
49366            LLLL: 'dddd, D. MMMM YYYY. H:mm',
49367        },
49368        calendar: {
49369            sameDay: '[danas u] LT',
49370            nextDay: '[sutra u] LT',
49371            nextWeek: function () {
49372                switch (this.day()) {
49373                    case 0:
49374                        return '[u] [nedelju] [u] LT';
49375                    case 3:
49376                        return '[u] [sredu] [u] LT';
49377                    case 6:
49378                        return '[u] [subotu] [u] LT';
49379                    case 1:
49380                    case 2:
49381                    case 4:
49382                    case 5:
49383                        return '[u] dddd [u] LT';
49384                }
49385            },
49386            lastDay: '[juče u] LT',
49387            lastWeek: function () {
49388                var lastWeekDays = [
49389                    '[prošle] [nedelje] [u] LT',
49390                    '[prošlog] [ponedeljka] [u] LT',
49391                    '[prošlog] [utorka] [u] LT',
49392                    '[prošle] [srede] [u] LT',
49393                    '[prošlog] [četvrtka] [u] LT',
49394                    '[prošlog] [petka] [u] LT',
49395                    '[prošle] [subote] [u] LT',
49396                ];
49397                return lastWeekDays[this.day()];
49398            },
49399            sameElse: 'L',
49400        },
49401        relativeTime: {
49402            future: 'za %s',
49403            past: 'pre %s',
49404            s: 'nekoliko sekundi',
49405            ss: translator.translate,
49406            m: translator.translate,
49407            mm: translator.translate,
49408            h: translator.translate,
49409            hh: translator.translate,
49410            d: translator.translate,
49411            dd: translator.translate,
49412            M: translator.translate,
49413            MM: translator.translate,
49414            y: translator.translate,
49415            yy: translator.translate,
49416        },
49417        dayOfMonthOrdinalParse: /\d{1,2}\./,
49418        ordinal: '%d.',
49419        week: {
49420            dow: 1, // Monday is the first day of the week.
49421            doy: 7, // The week that contains Jan 7th is the first week of the year.
49422        },
49423    });
49424
49425    return sr;
49426
49427})));
49428
49429
49430/***/ }),
49431
vendor: 3,378 bytes, lines 49432-49535
49432/***/ "./node_modules/moment/locale/ss.js":
49433/*!******************************************!*\
49434  !*** ./node_modules/moment/locale/ss.js ***!
49435  \******************************************/
49436/*! no static exports found */
49437/***/ (function(module, exports, __webpack_require__) {
49438
49439//! moment.js locale configuration
49440//! locale : siSwati [ss]
49441//! author : Nicolai Davies<[email protected]> : https://github.com/nicolaidavies
49442
49443;(function (global, factory) {
49444    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
49445   undefined
49446}(this, (function (moment) { 'use strict';
49447
49448    //! moment.js locale configuration
49449
49450    var ss = moment.defineLocale('ss', {
49451        months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split(
49452            '_'
49453        ),
49454        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
49455        weekdays:
49456            'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(
49457                '_'
49458            ),
49459        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
49460        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
49461        weekdaysParseExact: true,
49462        longDateFormat: {
49463            LT: 'h:mm A',
49464            LTS: 'h:mm:ss A',
49465            L: 'DD/MM/YYYY',
49466            LL: 'D MMMM YYYY',
49467            LLL: 'D MMMM YYYY h:mm A',
49468            LLLL: 'dddd, D MMMM YYYY h:mm A',
49469        },
49470        calendar: {
49471            sameDay: '[Namuhla nga] LT',
49472            nextDay: '[Kusasa nga] LT',
49473            nextWeek: 'dddd [nga] LT',
49474            lastDay: '[Itolo nga] LT',
49475            lastWeek: 'dddd [leliphelile] [nga] LT',
49476            sameElse: 'L',
49477        },
49478        relativeTime: {
49479            future: 'nga %s',
49480            past: 'wenteka nga %s',
49481            s: 'emizuzwana lomcane',
49482            ss: '%d mzuzwana',
49483            m: 'umzuzu',
49484            mm: '%d emizuzu',
49485            h: 'lihora',
49486            hh: '%d emahora',
49487            d: 'lilanga',
49488            dd: '%d emalanga',
49489            M: 'inyanga',
49490            MM: '%d tinyanga',
49491            y: 'umnyaka',
49492            yy: '%d iminyaka',
49493        },
49494        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
49495        meridiem: function (hours, minutes, isLower) {
49496            if (hours < 11) {
49497                return 'ekuseni';
49498            } else if (hours < 15) {
49499                return 'emini';
49500            } else if (hours < 19) {
49501                return 'entsambama';
49502            } else {
49503                return 'ebusuku';
49504            }
49505        },
49506        meridiemHour: function (hour, meridiem) {
49507            if (hour === 12) {
49508                hour = 0;
49509            }
49510            if (meridiem === 'ekuseni') {
49511                return hour;
49512            } else if (meridiem === 'emini') {
49513                return hour >= 11 ? hour : hour + 12;
49514            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
49515                if (hour === 0) {
49516                    return 0;
49517                }
49518                return hour + 12;
49519            }
49520        },
49521        dayOfMonthOrdinalParse: /\d{1,2}/,
49522        ordinal: '%d',
49523        week: {
49524            dow: 1, // Monday is the first day of the week.
49525            doy: 4, // The week that contains Jan 4th is the first week of the year.
49526        },
49527    });
49528
49529    return ss;
49530
49531})));
49532
49533
49534/***/ }),
49535
vendor: 2,832 bytes, lines 49536-49623
49536/***/ "./node_modules/moment/locale/sv.js":
49537/*!******************************************!*\
49538  !*** ./node_modules/moment/locale/sv.js ***!
49539  \******************************************/
49540/*! no static exports found */
49541/***/ (function(module, exports, __webpack_require__) {
49542
49543//! moment.js locale configuration
49544//! locale : Swedish [sv]
49545//! author : Jens Alm : https://github.com/ulmus
49546
49547;(function (global, factory) {
49548    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
49549   undefined
49550}(this, (function (moment) { 'use strict';
49551
49552    //! moment.js locale configuration
49553
49554    var sv = moment.defineLocale('sv', {
49555        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(
49556            '_'
49557        ),
49558        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
49559        weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
49560        weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
49561        weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),
49562        longDateFormat: {
49563            LT: 'HH:mm',
49564            LTS: 'HH:mm:ss',
49565            L: 'YYYY-MM-DD',
49566            LL: 'D MMMM YYYY',
49567            LLL: 'D MMMM YYYY [kl.] HH:mm',
49568            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',
49569            lll: 'D MMM YYYY HH:mm',
49570            llll: 'ddd D MMM YYYY HH:mm',
49571        },
49572        calendar: {
49573            sameDay: '[Idag] LT',
49574            nextDay: '[Imorgon] LT',
49575            lastDay: '[Igår] LT',
49576            nextWeek: '[PÃ¥] dddd LT',
49577            lastWeek: '[I] dddd[s] LT',
49578            sameElse: 'L',
49579        },
49580        relativeTime: {
49581            future: 'om %s',
49582            past: 'för %s sedan',
49583            s: 'några sekunder',
49584            ss: '%d sekunder',
49585            m: 'en minut',
49586            mm: '%d minuter',
49587            h: 'en timme',
49588            hh: '%d timmar',
49589            d: 'en dag',
49590            dd: '%d dagar',
49591            M: 'en månad',
49592            MM: '%d månader',
49593            y: 'ett år',
49594            yy: '%d år',
49595        },
49596        dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/,
49597        ordinal: function (number) {
49598            var b = number % 10,
49599                output =
49600                    ~~((number % 100) / 10) === 1
49601                        ? ':e'
49602                        : b === 1
49603                          ? ':a'
49604                          : b === 2
49605                            ? ':a'
49606                            : b === 3
49607                              ? ':e'
49608                              : ':e';
49609            return number + output;
49610        },
49611        week: {
49612            dow: 1, // Monday is the first day of the week.
49613            doy: 4, // The week that contains Jan 4th is the first week of the year.
49614        },
49615    });
49616
49617    return sv;
49618
49619})));
49620
49621
49622/***/ }),
49623
vendor: 2,341 bytes, lines 49624-49698
49624/***/ "./node_modules/moment/locale/sw.js":
49625/*!******************************************!*\
49626  !*** ./node_modules/moment/locale/sw.js ***!
49627  \******************************************/
49628/*! no static exports found */
49629/***/ (function(module, exports, __webpack_require__) {
49630
49631//! moment.js locale configuration
49632//! locale : Swahili [sw]
49633//! author : Fahad Kassim : https://github.com/fadsel
49634
49635;(function (global, factory) {
49636    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
49637   undefined
49638}(this, (function (moment) { 'use strict';
49639
49640    //! moment.js locale configuration
49641
49642    var sw = moment.defineLocale('sw', {
49643        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(
49644            '_'
49645        ),
49646        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
49647        weekdays:
49648            'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(
49649                '_'
49650            ),
49651        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
49652        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
49653        weekdaysParseExact: true,
49654        longDateFormat: {
49655            LT: 'hh:mm A',
49656            LTS: 'HH:mm:ss',
49657            L: 'DD.MM.YYYY',
49658            LL: 'D MMMM YYYY',
49659            LLL: 'D MMMM YYYY HH:mm',
49660            LLLL: 'dddd, D MMMM YYYY HH:mm',
49661        },
49662        calendar: {
49663            sameDay: '[leo saa] LT',
49664            nextDay: '[kesho saa] LT',
49665            nextWeek: '[wiki ijayo] dddd [saat] LT',
49666            lastDay: '[jana] LT',
49667            lastWeek: '[wiki iliyopita] dddd [saat] LT',
49668            sameElse: 'L',
49669        },
49670        relativeTime: {
49671            future: '%s baadaye',
49672            past: 'tokea %s',
49673            s: 'hivi punde',
49674            ss: 'sekunde %d',
49675            m: 'dakika moja',
49676            mm: 'dakika %d',
49677            h: 'saa limoja',
49678            hh: 'masaa %d',
49679            d: 'siku moja',
49680            dd: 'siku %d',
49681            M: 'mwezi mmoja',
49682            MM: 'miezi %d',
49683            y: 'mwaka mmoja',
49684            yy: 'miaka %d',
49685        },
49686        week: {
49687            dow: 1, // Monday is the first day of the week.
49688            doy: 7, // The week that contains Jan 7th is the first week of the year.
49689        },
49690    });
49691
49692    return sw;
49693
49694})));
49695
49696
49697/***/ }),
49698
vendor: 5,790 bytes, lines 49699-49849
49699/***/ "./node_modules/moment/locale/ta.js":
49700/*!******************************************!*\
49701  !*** ./node_modules/moment/locale/ta.js ***!
49702  \******************************************/
49703/*! no static exports found */
49704/***/ (function(module, exports, __webpack_require__) {
49705
49706//! moment.js locale configuration
49707//! locale : Tamil [ta]
49708//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
49709
49710;(function (global, factory) {
49711    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
49712   undefined
49713}(this, (function (moment) { 'use strict';
49714
49715    //! moment.js locale configuration
49716
49717    var symbolMap = {
49718            1: '௧',
49719            2: '௨',
49720            3: '௩',
49721            4: '௪',
49722            5: '௫',
49723            6: '௬',
49724            7: '௭',
49725            8: '௮',
49726            9: '௯',
49727            0: '௦',
49728        },
49729        numberMap = {
49730            '௧': '1',
49731            '௨': '2',
49732            '௩': '3',
49733            '௪': '4',
49734            '௫': '5',
49735            '௬': '6',
49736            '௭': '7',
49737            '௮': '8',
49738            '௯': '9',
49739            '௦': '0',
49740        };
49741
49742    var ta = moment.defineLocale('ta', {
49743        months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(
49744            '_'
49745        ),
49746        monthsShort:
49747            'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(
49748                '_'
49749            ),
49750        weekdays:
49751            'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(
49752                '_'
49753            ),
49754        weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(
49755            '_'
49756        ),
49757        weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
49758        longDateFormat: {
49759            LT: 'HH:mm',
49760            LTS: 'HH:mm:ss',
49761            L: 'DD/MM/YYYY',
49762            LL: 'D MMMM YYYY',
49763            LLL: 'D MMMM YYYY, HH:mm',
49764            LLLL: 'dddd, D MMMM YYYY, HH:mm',
49765        },
49766        calendar: {
49767            sameDay: '[இன்று] LT',
49768            nextDay: '[நாளை] LT',
49769            nextWeek: 'dddd, LT',
49770            lastDay: '[நேற்று] LT',
49771            lastWeek: '[கடந்த வாரம்] dddd, LT',
49772            sameElse: 'L',
49773        },
49774        relativeTime: {
49775            future: '%s இல்',
49776            past: '%s முன்',
49777            s: 'ஒரு சில விநாடிகள்',
49778            ss: '%d விநாடிகள்',
49779            m: 'ஒரு நிமிடம்',
49780            mm: '%d நிமிடங்கள்',
49781            h: 'ஒரு மணி நேரம்',
49782            hh: '%d மணி நேரம்',
49783            d: 'ஒரு நாள்',
49784            dd: '%d நாட்கள்',
49785            M: 'ஒரு மாதம்',
49786            MM: '%d மாதங்கள்',
49787            y: 'ஒரு வருடம்',
49788            yy: '%d ஆண்டுகள்',
49789        },
49790        dayOfMonthOrdinalParse: /\d{1,2}வது/,
49791        ordinal: function (number) {
49792            return number + 'வது';
49793        },
49794        preparse: function (string) {
49795            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
49796                return numberMap[match];
49797            });
49798        },
49799        postformat: function (string) {
49800            return string.replace(/\d/g, function (match) {
49801                return symbolMap[match];
49802            });
49803        },
49804        // refer http://ta.wikipedia.org/s/1er1
49805        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
49806        meridiem: function (hour, minute, isLower) {
49807            if (hour < 2) {
49808                return ' யாமம்';
49809            } else if (hour < 6) {
49810                return ' வைகறை'; // வைகறை
49811            } else if (hour < 10) {
49812                return ' காலை'; // காலை
49813            } else if (hour < 14) {
49814                return ' நண்பகல்'; // நண்பகல்
49815            } else if (hour < 18) {
49816                return ' எற்பாடு'; // எற்பாடு
49817            } else if (hour < 22) {
49818                return ' மாலை'; // மாலை
49819            } else {
49820                return ' யாமம்';
49821            }
49822        },
49823        meridiemHour: function (hour, meridiem) {
49824            if (hour === 12) {
49825                hour = 0;
49826            }
49827            if (meridiem === 'யாமம்') {
49828                return hour < 2 ? hour : hour + 12;
49829            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {
49830                return hour;
49831            } else if (meridiem === 'நண்பகல்') {
49832                return hour >= 10 ? hour : hour + 12;
49833            } else {
49834                return hour + 12;
49835            }
49836        },
49837        week: {
49838            dow: 0, // Sunday is the first day of the week.
49839            doy: 6, // The week that contains Jan 6th is the first week of the year.
49840        },
49841    });
49842
49843    return ta;
49844
49845})));
49846
49847
49848/***/ }),
49849
vendor: 4,214 bytes, lines 49850-49957
49850/***/ "./node_modules/moment/locale/te.js":
49851/*!******************************************!*\
49852  !*** ./node_modules/moment/locale/te.js ***!
49853  \******************************************/
49854/*! no static exports found */
49855/***/ (function(module, exports, __webpack_require__) {
49856
49857//! moment.js locale configuration
49858//! locale : Telugu [te]
49859//! author : Krishna Chaitanya Thota : https://github.com/kcthota
49860
49861;(function (global, factory) {
49862    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
49863   undefined
49864}(this, (function (moment) { 'use strict';
49865
49866    //! moment.js locale configuration
49867
49868    var te = moment.defineLocale('te', {
49869        months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(
49870            '_'
49871        ),
49872        monthsShort:
49873            'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(
49874                '_'
49875            ),
49876        monthsParseExact: true,
49877        weekdays:
49878            'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(
49879                '_'
49880            ),
49881        weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
49882        weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
49883        longDateFormat: {
49884            LT: 'A h:mm',
49885            LTS: 'A h:mm:ss',
49886            L: 'DD/MM/YYYY',
49887            LL: 'D MMMM YYYY',
49888            LLL: 'D MMMM YYYY, A h:mm',
49889            LLLL: 'dddd, D MMMM YYYY, A h:mm',
49890        },
49891        calendar: {
49892            sameDay: '[నేడు] LT',
49893            nextDay: '[రేపు] LT',
49894            nextWeek: 'dddd, LT',
49895            lastDay: '[నిన్న] LT',
49896            lastWeek: '[గత] dddd, LT',
49897            sameElse: 'L',
49898        },
49899        relativeTime: {
49900            future: '%s లో',
49901            past: '%s క్రితం',
49902            s: 'కొన్ని క్షణాలు',
49903            ss: '%d సెకన్లు',
49904            m: 'ఒక నిమిషం',
49905            mm: '%d నిమిషాలు',
49906            h: 'ఒక గంట',
49907            hh: '%d గంటలు',
49908            d: 'ఒక రోజు',
49909            dd: '%d రోజులు',
49910            M: 'ఒక నెల',
49911            MM: '%d నెలలు',
49912            y: 'ఒక సంవత్సరం',
49913            yy: '%d సంవత్సరాలు',
49914        },
49915        dayOfMonthOrdinalParse: /\d{1,2}à°µ/,
49916        ordinal: '%dà°µ',
49917        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
49918        meridiemHour: function (hour, meridiem) {
49919            if (hour === 12) {
49920                hour = 0;
49921            }
49922            if (meridiem === 'రాత్రి') {
49923                return hour < 4 ? hour : hour + 12;
49924            } else if (meridiem === 'ఉదయం') {
49925                return hour;
49926            } else if (meridiem === 'మధ్యాహ్నం') {
49927                return hour >= 10 ? hour : hour + 12;
49928            } else if (meridiem === 'సాయంత్రం') {
49929                return hour + 12;
49930            }
49931        },
49932        meridiem: function (hour, minute, isLower) {
49933            if (hour < 4) {
49934                return 'రాత్రి';
49935            } else if (hour < 10) {
49936                return 'ఉదయం';
49937            } else if (hour < 17) {
49938                return 'మధ్యాహ్నం';
49939            } else if (hour < 20) {
49940                return 'సాయంత్రం';
49941            } else {
49942                return 'రాత్రి';
49943            }
49944        },
49945        week: {
49946            dow: 0, // Sunday is the first day of the week.
49947            doy: 6, // The week that contains Jan 6th is the first week of the year.
49948        },
49949    });
49950
49951    return te;
49952
49953})));
49954
49955
49956/***/ }),
49957
vendor: 2,919 bytes, lines 49958-50045
49958/***/ "./node_modules/moment/locale/tet.js":
49959/*!*******************************************!*\
49960  !*** ./node_modules/moment/locale/tet.js ***!
49961  \*******************************************/
49962/*! no static exports found */
49963/***/ (function(module, exports, __webpack_require__) {
49964
49965//! moment.js locale configuration
49966//! locale : Tetun Dili (East Timor) [tet]
49967//! author : Joshua Brooks : https://github.com/joshbrooks
49968//! author : Onorio De J. Afonso : https://github.com/marobo
49969//! author : Sonia Simoes : https://github.com/soniasimoes
49970
49971;(function (global, factory) {
49972    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
49973   undefined
49974}(this, (function (moment) { 'use strict';
49975
49976    //! moment.js locale configuration
49977
49978    var tet = moment.defineLocale('tet', {
49979        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(
49980            '_'
49981        ),
49982        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
49983        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),
49984        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),
49985        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),
49986        longDateFormat: {
49987            LT: 'HH:mm',
49988            LTS: 'HH:mm:ss',
49989            L: 'DD/MM/YYYY',
49990            LL: 'D MMMM YYYY',
49991            LLL: 'D MMMM YYYY HH:mm',
49992            LLLL: 'dddd, D MMMM YYYY HH:mm',
49993        },
49994        calendar: {
49995            sameDay: '[Ohin iha] LT',
49996            nextDay: '[Aban iha] LT',
49997            nextWeek: 'dddd [iha] LT',
49998            lastDay: '[Horiseik iha] LT',
49999            lastWeek: 'dddd [semana kotuk] [iha] LT',
50000            sameElse: 'L',
50001        },
50002        relativeTime: {
50003            future: 'iha %s',
50004            past: '%s liuba',
50005            s: 'segundu balun',
50006            ss: 'segundu %d',
50007            m: 'minutu ida',
50008            mm: 'minutu %d',
50009            h: 'oras ida',
50010            hh: 'oras %d',
50011            d: 'loron ida',
50012            dd: 'loron %d',
50013            M: 'fulan ida',
50014            MM: 'fulan %d',
50015            y: 'tinan ida',
50016            yy: 'tinan %d',
50017        },
50018        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
50019        ordinal: function (number) {
50020            var b = number % 10,
50021                output =
50022                    ~~((number % 100) / 10) === 1
50023                        ? 'th'
50024                        : b === 1
50025                          ? 'st'
50026                          : b === 2
50027                            ? 'nd'
50028                            : b === 3
50029                              ? 'rd'
50030                              : 'th';
50031            return number + output;
50032        },
50033        week: {
50034            dow: 1, // Monday is the first day of the week.
50035            doy: 4, // The week that contains Jan 4th is the first week of the year.
50036        },
50037    });
50038
50039    return tet;
50040
50041})));
50042
50043
50044/***/ }),
50045
vendor: 4,538 bytes, lines 50046-50182
50046/***/ "./node_modules/moment/locale/tg.js":
50047/*!******************************************!*\
50048  !*** ./node_modules/moment/locale/tg.js ***!
50049  \******************************************/
50050/*! no static exports found */
50051/***/ (function(module, exports, __webpack_require__) {
50052
50053//! moment.js locale configuration
50054//! locale : Tajik [tg]
50055//! author : Orif N. Jr. : https://github.com/orif-jr
50056
50057;(function (global, factory) {
50058    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
50059   undefined
50060}(this, (function (moment) { 'use strict';
50061
50062    //! moment.js locale configuration
50063
50064    var suffixes = {
50065        0: '-ум',
50066        1: '-ум',
50067        2: '-юм',
50068        3: '-юм',
50069        4: '-ум',
50070        5: '-ум',
50071        6: '-ум',
50072        7: '-ум',
50073        8: '-ум',
50074        9: '-ум',
50075        10: '-ум',
50076        12: '-ум',
50077        13: '-ум',
50078        20: '-ум',
50079        30: '-юм',
50080        40: '-ум',
50081        50: '-ум',
50082        60: '-ум',
50083        70: '-ум',
50084        80: '-ум',
50085        90: '-ум',
50086        100: '-ум',
50087    };
50088
50089    var tg = moment.defineLocale('tg', {
50090        months: {
50091            format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split(
50092                '_'
50093            ),
50094            standalone:
50095                'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(
50096                    '_'
50097                ),
50098        },
50099        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
50100        weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(
50101            '_'
50102        ),
50103        weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),
50104        weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),
50105        longDateFormat: {
50106            LT: 'HH:mm',
50107            LTS: 'HH:mm:ss',
50108            L: 'DD.MM.YYYY',
50109            LL: 'D MMMM YYYY',
50110            LLL: 'D MMMM YYYY HH:mm',
50111            LLLL: 'dddd, D MMMM YYYY HH:mm',
50112        },
50113        calendar: {
50114            sameDay: '[Имрӯз соати] LT',
50115            nextDay: '[Фардо соати] LT',
50116            lastDay: '[Дирӯз соати] LT',
50117            nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',
50118            lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',
50119            sameElse: 'L',
50120        },
50121        relativeTime: {
50122            future: 'баъди %s',
50123            past: '%s пеш',
50124            s: 'якчанд сония',
50125            m: 'як дақиқа',
50126            mm: '%d дақиқа',
50127            h: 'як соат',
50128            hh: '%d соат',
50129            d: 'як рӯз',
50130            dd: '%d рӯз',
50131            M: 'як моҳ',
50132            MM: '%d моҳ',
50133            y: 'як сол',
50134            yy: '%d сол',
50135        },
50136        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,
50137        meridiemHour: function (hour, meridiem) {
50138            if (hour === 12) {
50139                hour = 0;
50140            }
50141            if (meridiem === 'шаб') {
50142                return hour < 4 ? hour : hour + 12;
50143            } else if (meridiem === 'субҳ') {
50144                return hour;
50145            } else if (meridiem === 'рӯз') {
50146                return hour >= 11 ? hour : hour + 12;
50147            } else if (meridiem === 'бегоҳ') {
50148                return hour + 12;
50149            }
50150        },
50151        meridiem: function (hour, minute, isLower) {
50152            if (hour < 4) {
50153                return 'шаб';
50154            } else if (hour < 11) {
50155                return 'субҳ';
50156            } else if (hour < 16) {
50157                return 'рӯз';
50158            } else if (hour < 19) {
50159                return 'бегоҳ';
50160            } else {
50161                return 'шаб';
50162            }
50163        },
50164        dayOfMonthOrdinalParse: /\d{1,2}-(ум|юм)/,
50165        ordinal: function (number) {
50166            var a = number % 10,
50167                b = number >= 100 ? 100 : null;
50168            return number + (suffixes[number] || suffixes[a] || suffixes[b]);
50169        },
50170        week: {
50171            dow: 1, // Monday is the first day of the week.
50172            doy: 7, // The week that contains Jan 1th is the first week of the year.
50173        },
50174    });
50175
50176    return tg;
50177
50178})));
50179
50180
50181/***/ }),
50182
vendor: 3,466 bytes, lines 50183-50267
50183/***/ "./node_modules/moment/locale/th.js":
50184/*!******************************************!*\
50185  !*** ./node_modules/moment/locale/th.js ***!
50186  \******************************************/
50187/*! no static exports found */
50188/***/ (function(module, exports, __webpack_require__) {
50189
50190//! moment.js locale configuration
50191//! locale : Thai [th]
50192//! author : Kridsada Thanabulpong : https://github.com/sirn
50193
50194;(function (global, factory) {
50195    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
50196   undefined
50197}(this, (function (moment) { 'use strict';
50198
50199    //! moment.js locale configuration
50200
50201    var th = moment.defineLocale('th', {
50202        months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(
50203            '_'
50204        ),
50205        monthsShort:
50206            'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(
50207                '_'
50208            ),
50209        monthsParseExact: true,
50210        weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
50211        weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
50212        weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
50213        weekdaysParseExact: true,
50214        longDateFormat: {
50215            LT: 'H:mm',
50216            LTS: 'H:mm:ss',
50217            L: 'DD/MM/YYYY',
50218            LL: 'D MMMM YYYY',
50219            LLL: 'D MMMM YYYY เวลา H:mm',
50220            LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',
50221        },
50222        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
50223        isPM: function (input) {
50224            return input === 'หลังเที่ยง';
50225        },
50226        meridiem: function (hour, minute, isLower) {
50227            if (hour < 12) {
50228                return 'ก่อนเที่ยง';
50229            } else {
50230                return 'หลังเที่ยง';
50231            }
50232        },
50233        calendar: {
50234            sameDay: '[วันนี้ เวลา] LT',
50235            nextDay: '[พรุ่งนี้ เวลา] LT',
50236            nextWeek: 'dddd[หน้า เวลา] LT',
50237            lastDay: '[เมื่อวานนี้ เวลา] LT',
50238            lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',
50239            sameElse: 'L',
50240        },
50241        relativeTime: {
50242            future: 'อีก %s',
50243            past: '%sที่แล้ว',
50244            s: 'ไม่กี่วินาที',
50245            ss: '%d วินาที',
50246            m: '1 นาที',
50247            mm: '%d นาที',
50248            h: '1 ชั่วโมง',
50249            hh: '%d ชั่วโมง',
50250            d: '1 วัน',
50251            dd: '%d วัน',
50252            w: '1 สัปดาห์',
50253            ww: '%d สัปดาห์',
50254            M: '1 เดือน',
50255            MM: '%d เดือน',
50256            y: '1 ปี',
50257            yy: '%d ปี',
50258        },
50259    });
50260
50261    return th;
50262
50263})));
50264
50265
50266/***/ }),
50267
vendor: 3,318 bytes, lines 50268-50378
50268/***/ "./node_modules/moment/locale/tk.js":
50269/*!******************************************!*\
50270  !*** ./node_modules/moment/locale/tk.js ***!
50271  \******************************************/
50272/*! no static exports found */
50273/***/ (function(module, exports, __webpack_require__) {
50274
50275//! moment.js locale configuration
50276//! locale : Turkmen [tk]
50277//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy
50278
50279;(function (global, factory) {
50280    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
50281   undefined
50282}(this, (function (moment) { 'use strict';
50283
50284    //! moment.js locale configuration
50285
50286    var suffixes = {
50287        1: "'inji",
50288        5: "'inji",
50289        8: "'inji",
50290        70: "'inji",
50291        80: "'inji",
50292        2: "'nji",
50293        7: "'nji",
50294        20: "'nji",
50295        50: "'nji",
50296        3: "'ünji",
50297        4: "'ünji",
50298        100: "'ünji",
50299        6: "'njy",
50300        9: "'unjy",
50301        10: "'unjy",
50302        30: "'unjy",
50303        60: "'ynjy",
50304        90: "'ynjy",
50305    };
50306
50307    var tk = moment.defineLocale('tk', {
50308        months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(
50309            '_'
50310        ),
50311        monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),
50312        weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(
50313            '_'
50314        ),
50315        weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),
50316        weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),
50317        longDateFormat: {
50318            LT: 'HH:mm',
50319            LTS: 'HH:mm:ss',
50320            L: 'DD.MM.YYYY',
50321            LL: 'D MMMM YYYY',
50322            LLL: 'D MMMM YYYY HH:mm',
50323            LLLL: 'dddd, D MMMM YYYY HH:mm',
50324        },
50325        calendar: {
50326            sameDay: '[bugün sagat] LT',
50327            nextDay: '[ertir sagat] LT',
50328            nextWeek: '[indiki] dddd [sagat] LT',
50329            lastDay: '[düýn] LT',
50330            lastWeek: '[geçen] dddd [sagat] LT',
50331            sameElse: 'L',
50332        },
50333        relativeTime: {
50334            future: '%s soň',
50335            past: '%s öň',
50336            s: 'birnäçe sekunt',
50337            m: 'bir minut',
50338            mm: '%d minut',
50339            h: 'bir sagat',
50340            hh: '%d sagat',
50341            d: 'bir gün',
50342            dd: '%d gün',
50343            M: 'bir aý',
50344            MM: '%d aý',
50345            y: 'bir ýyl',
50346            yy: '%d ýyl',
50347        },
50348        ordinal: function (number, period) {
50349            switch (period) {
50350                case 'd':
50351                case 'D':
50352                case 'Do':
50353                case 'DD':
50354                    return number;
50355                default:
50356                    if (number === 0) {
50357                        // special case for zero
50358                        return number + "'unjy";
50359                    }
50360                    var a = number % 10,
50361                        b = (number % 100) - a,
50362                        c = number >= 100 ? 100 : null;
50363                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);
50364            }
50365        },
50366        week: {
50367            dow: 1, // Monday is the first day of the week.
50368            doy: 7, // The week that contains Jan 7th is the first week of the year.
50369        },
50370    });
50371
50372    return tk;
50373
50374})));
50375
50376
50377/***/ }),
50378
vendor: 2,449 bytes, lines 50379-50455
50379/***/ "./node_modules/moment/locale/tl-ph.js":
50380/*!*********************************************!*\
50381  !*** ./node_modules/moment/locale/tl-ph.js ***!
50382  \*********************************************/
50383/*! no static exports found */
50384/***/ (function(module, exports, __webpack_require__) {
50385
50386//! moment.js locale configuration
50387//! locale : Tagalog (Philippines) [tl-ph]
50388//! author : Dan Hagman : https://github.com/hagmandan
50389
50390;(function (global, factory) {
50391    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
50392   undefined
50393}(this, (function (moment) { 'use strict';
50394
50395    //! moment.js locale configuration
50396
50397    var tlPh = moment.defineLocale('tl-ph', {
50398        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
50399            '_'
50400        ),
50401        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
50402        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
50403            '_'
50404        ),
50405        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
50406        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
50407        longDateFormat: {
50408            LT: 'HH:mm',
50409            LTS: 'HH:mm:ss',
50410            L: 'MM/D/YYYY',
50411            LL: 'MMMM D, YYYY',
50412            LLL: 'MMMM D, YYYY HH:mm',
50413            LLLL: 'dddd, MMMM DD, YYYY HH:mm',
50414        },
50415        calendar: {
50416            sameDay: 'LT [ngayong araw]',
50417            nextDay: '[Bukas ng] LT',
50418            nextWeek: 'LT [sa susunod na] dddd',
50419            lastDay: 'LT [kahapon]',
50420            lastWeek: 'LT [noong nakaraang] dddd',
50421            sameElse: 'L',
50422        },
50423        relativeTime: {
50424            future: 'sa loob ng %s',
50425            past: '%s ang nakalipas',
50426            s: 'ilang segundo',
50427            ss: '%d segundo',
50428            m: 'isang minuto',
50429            mm: '%d minuto',
50430            h: 'isang oras',
50431            hh: '%d oras',
50432            d: 'isang araw',
50433            dd: '%d araw',
50434            M: 'isang buwan',
50435            MM: '%d buwan',
50436            y: 'isang taon',
50437            yy: '%d taon',
50438        },
50439        dayOfMonthOrdinalParse: /\d{1,2}/,
50440        ordinal: function (number) {
50441            return number;
50442        },
50443        week: {
50444            dow: 1, // Monday is the first day of the week.
50445            doy: 4, // The week that contains Jan 4th is the first week of the year.
50446        },
50447    });
50448
50449    return tlPh;
50450
50451})));
50452
50453
50454/***/ }),
50455
vendor: 4,731 bytes, lines 50456-50599
50456/***/ "./node_modules/moment/locale/tlh.js":
50457/*!*******************************************!*\
50458  !*** ./node_modules/moment/locale/tlh.js ***!
50459  \*******************************************/
50460/*! no static exports found */
50461/***/ (function(module, exports, __webpack_require__) {
50462
50463//! moment.js locale configuration
50464//! locale : Klingon [tlh]
50465//! author : Dominika Kruk : https://github.com/amaranthrose
50466
50467;(function (global, factory) {
50468    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
50469   undefined
50470}(this, (function (moment) { 'use strict';
50471
50472    //! moment.js locale configuration
50473
50474    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');
50475
50476    function translateFuture(output) {
50477        var time = output;
50478        time =
50479            output.indexOf('jaj') !== -1
50480                ? time.slice(0, -3) + 'leS'
50481                : output.indexOf('jar') !== -1
50482                  ? time.slice(0, -3) + 'waQ'
50483                  : output.indexOf('DIS') !== -1
50484                    ? time.slice(0, -3) + 'nem'
50485                    : time + ' pIq';
50486        return time;
50487    }
50488
50489    function translatePast(output) {
50490        var time = output;
50491        time =
50492            output.indexOf('jaj') !== -1
50493                ? time.slice(0, -3) + 'Hu’'
50494                : output.indexOf('jar') !== -1
50495                  ? time.slice(0, -3) + 'wen'
50496                  : output.indexOf('DIS') !== -1
50497                    ? time.slice(0, -3) + 'ben'
50498                    : time + ' ret';
50499        return time;
50500    }
50501
50502    function translate(number, withoutSuffix, string, isFuture) {
50503        var numberNoun = numberAsNoun(number);
50504        switch (string) {
50505            case 'ss':
50506                return numberNoun + ' lup';
50507            case 'mm':
50508                return numberNoun + ' tup';
50509            case 'hh':
50510                return numberNoun + ' rep';
50511            case 'dd':
50512                return numberNoun + ' jaj';
50513            case 'MM':
50514                return numberNoun + ' jar';
50515            case 'yy':
50516                return numberNoun + ' DIS';
50517        }
50518    }
50519
50520    function numberAsNoun(number) {
50521        var hundred = Math.floor((number % 1000) / 100),
50522            ten = Math.floor((number % 100) / 10),
50523            one = number % 10,
50524            word = '';
50525        if (hundred > 0) {
50526            word += numbersNouns[hundred] + 'vatlh';
50527        }
50528        if (ten > 0) {
50529            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';
50530        }
50531        if (one > 0) {
50532            word += (word !== '' ? ' ' : '') + numbersNouns[one];
50533        }
50534        return word === '' ? 'pagh' : word;
50535    }
50536
50537    var tlh = moment.defineLocale('tlh', {
50538        months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(
50539            '_'
50540        ),
50541        monthsShort:
50542            'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(
50543                '_'
50544            ),
50545        monthsParseExact: true,
50546        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
50547            '_'
50548        ),
50549        weekdaysShort:
50550            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
50551        weekdaysMin:
50552            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
50553        longDateFormat: {
50554            LT: 'HH:mm',
50555            LTS: 'HH:mm:ss',
50556            L: 'DD.MM.YYYY',
50557            LL: 'D MMMM YYYY',
50558            LLL: 'D MMMM YYYY HH:mm',
50559            LLLL: 'dddd, D MMMM YYYY HH:mm',
50560        },
50561        calendar: {
50562            sameDay: '[DaHjaj] LT',
50563            nextDay: '[wa’leS] LT',
50564            nextWeek: 'LLL',
50565            lastDay: '[wa’Hu’] LT',
50566            lastWeek: 'LLL',
50567            sameElse: 'L',
50568        },
50569        relativeTime: {
50570            future: translateFuture,
50571            past: translatePast,
50572            s: 'puS lup',
50573            ss: translate,
50574            m: 'wa’ tup',
50575            mm: translate,
50576            h: 'wa’ rep',
50577            hh: translate,
50578            d: 'wa’ jaj',
50579            dd: translate,
50580            M: 'wa’ jar',
50581            MM: translate,
50582            y: 'wa’ DIS',
50583            yy: translate,
50584        },
50585        dayOfMonthOrdinalParse: /\d{1,2}\./,
50586        ordinal: '%d.',
50587        week: {
50588            dow: 1, // Monday is the first day of the week.
50589            doy: 4, // The week that contains Jan 4th is the first week of the year.
50590        },
50591    });
50592
50593    return tlh;
50594
50595})));
50596
50597
50598/***/ }),
50599
vendor: 3,813 bytes, lines 50600-50725
50600/***/ "./node_modules/moment/locale/tr.js":
50601/*!******************************************!*\
50602  !*** ./node_modules/moment/locale/tr.js ***!
50603  \******************************************/
50604/*! no static exports found */
50605/***/ (function(module, exports, __webpack_require__) {
50606
50607//! moment.js locale configuration
50608//! locale : Turkish [tr]
50609//! authors : Erhan Gundogan : https://github.com/erhangundogan,
50610//!           Burak Yiğit Kaya: https://github.com/BYK
50611
50612;(function (global, factory) {
50613    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
50614   undefined
50615}(this, (function (moment) { 'use strict';
50616
50617    //! moment.js locale configuration
50618
50619    var suffixes = {
50620        1: "'inci",
50621        5: "'inci",
50622        8: "'inci",
50623        70: "'inci",
50624        80: "'inci",
50625        2: "'nci",
50626        7: "'nci",
50627        20: "'nci",
50628        50: "'nci",
50629        3: "'üncü",
50630        4: "'üncü",
50631        100: "'üncü",
50632        6: "'ncı",
50633        9: "'uncu",
50634        10: "'uncu",
50635        30: "'uncu",
50636        60: "'ıncı",
50637        90: "'ıncı",
50638    };
50639
50640    var tr = moment.defineLocale('tr', {
50641        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(
50642            '_'
50643        ),
50644        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
50645        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(
50646            '_'
50647        ),
50648        weekdaysShort: 'Paz_Pzt_Sal_Çar_Per_Cum_Cmt'.split('_'),
50649        weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
50650        meridiem: function (hours, minutes, isLower) {
50651            if (hours < 12) {
50652                return isLower ? 'öö' : 'ÖÖ';
50653            } else {
50654                return isLower ? 'ös' : 'ÖS';
50655            }
50656        },
50657        meridiemParse: /öö|ÖÖ|ös|ÖS/,
50658        isPM: function (input) {
50659            return input === 'ös' || input === 'ÖS';
50660        },
50661        longDateFormat: {
50662            LT: 'HH:mm',
50663            LTS: 'HH:mm:ss',
50664            L: 'DD.MM.YYYY',
50665            LL: 'D MMMM YYYY',
50666            LLL: 'D MMMM YYYY HH:mm',
50667            LLLL: 'dddd, D MMMM YYYY HH:mm',
50668        },
50669        calendar: {
50670            sameDay: '[bugün saat] LT',
50671            nextDay: '[yarın saat] LT',
50672            nextWeek: '[gelecek] dddd [saat] LT',
50673            lastDay: '[dün] LT',
50674            lastWeek: '[geçen] dddd [saat] LT',
50675            sameElse: 'L',
50676        },
50677        relativeTime: {
50678            future: '%s sonra',
50679            past: '%s önce',
50680            s: 'birkaç saniye',
50681            ss: '%d saniye',
50682            m: 'bir dakika',
50683            mm: '%d dakika',
50684            h: 'bir saat',
50685            hh: '%d saat',
50686            d: 'bir gün',
50687            dd: '%d gün',
50688            w: 'bir hafta',
50689            ww: '%d hafta',
50690            M: 'bir ay',
50691            MM: '%d ay',
50692            y: 'bir yıl',
50693            yy: '%d yıl',
50694        },
50695        ordinal: function (number, period) {
50696            switch (period) {
50697                case 'd':
50698                case 'D':
50699                case 'Do':
50700                case 'DD':
50701                    return number;
50702                default:
50703                    if (number === 0) {
50704                        // special case for zero
50705                        return number + "'ıncı";
50706                    }
50707                    var a = number % 10,
50708                        b = (number % 100) - a,
50709                        c = number >= 100 ? 100 : null;
50710                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);
50711            }
50712        },
50713        week: {
50714            dow: 1, // Monday is the first day of the week.
50715            doy: 7, // The week that contains Jan 7th is the first week of the year.
50716        },
50717    });
50718
50719    return tr;
50720
50721})));
50722
50723
50724/***/ }),
50725
vendor: 3,937 bytes, lines 50726-50834
50726/***/ "./node_modules/moment/locale/tzl.js":
50727/*!*******************************************!*\
50728  !*** ./node_modules/moment/locale/tzl.js ***!
50729  \*******************************************/
50730/*! no static exports found */
50731/***/ (function(module, exports, __webpack_require__) {
50732
50733//! moment.js locale configuration
50734//! locale : Talossan [tzl]
50735//! author : Robin van der Vliet : https://github.com/robin0van0der0v
50736//! author : Iustì Canun
50737
50738;(function (global, factory) {
50739    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
50740   undefined
50741}(this, (function (moment) { 'use strict';
50742
50743    //! moment.js locale configuration
50744
50745    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
50746    // This is currently too difficult (maybe even impossible) to add.
50747    var tzl = moment.defineLocale('tzl', {
50748        months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(
50749            '_'
50750        ),
50751        monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
50752        weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
50753        weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
50754        weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
50755        longDateFormat: {
50756            LT: 'HH.mm',
50757            LTS: 'HH.mm.ss',
50758            L: 'DD.MM.YYYY',
50759            LL: 'D. MMMM [dallas] YYYY',
50760            LLL: 'D. MMMM [dallas] YYYY HH.mm',
50761            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',
50762        },
50763        meridiemParse: /d\'o|d\'a/i,
50764        isPM: function (input) {
50765            return "d'o" === input.toLowerCase();
50766        },
50767        meridiem: function (hours, minutes, isLower) {
50768            if (hours > 11) {
50769                return isLower ? "d'o" : "D'O";
50770            } else {
50771                return isLower ? "d'a" : "D'A";
50772            }
50773        },
50774        calendar: {
50775            sameDay: '[oxhi à] LT',
50776            nextDay: '[demà à] LT',
50777            nextWeek: 'dddd [à] LT',
50778            lastDay: '[ieiri à] LT',
50779            lastWeek: '[sür el] dddd [lasteu à] LT',
50780            sameElse: 'L',
50781        },
50782        relativeTime: {
50783            future: 'osprei %s',
50784            past: 'ja%s',
50785            s: processRelativeTime,
50786            ss: processRelativeTime,
50787            m: processRelativeTime,
50788            mm: processRelativeTime,
50789            h: processRelativeTime,
50790            hh: processRelativeTime,
50791            d: processRelativeTime,
50792            dd: processRelativeTime,
50793            M: processRelativeTime,
50794            MM: processRelativeTime,
50795            y: processRelativeTime,
50796            yy: processRelativeTime,
50797        },
50798        dayOfMonthOrdinalParse: /\d{1,2}\./,
50799        ordinal: '%d.',
50800        week: {
50801            dow: 1, // Monday is the first day of the week.
50802            doy: 4, // The week that contains Jan 4th is the first week of the year.
50803        },
50804    });
50805
50806    function processRelativeTime(number, withoutSuffix, key, isFuture) {
50807        var format = {
50808            s: ['viensas secunds', "'iensas secunds"],
50809            ss: [number + ' secunds', '' + number + ' secunds'],
50810            m: ["'n míut", "'iens míut"],
50811            mm: [number + ' míuts', '' + number + ' míuts'],
50812            h: ["'n þora", "'iensa þora"],
50813            hh: [number + ' þoras', '' + number + ' þoras'],
50814            d: ["'n ziua", "'iensa ziua"],
50815            dd: [number + ' ziuas', '' + number + ' ziuas'],
50816            M: ["'n mes", "'iens mes"],
50817            MM: [number + ' mesen', '' + number + ' mesen'],
50818            y: ["'n ar", "'iens ar"],
50819            yy: [number + ' ars', '' + number + ' ars'],
50820        };
50821        return isFuture
50822            ? format[key][0]
50823            : withoutSuffix
50824              ? format[key][0]
50825              : format[key][1];
50826    }
50827
50828    return tzl;
50829
50830})));
50831
50832
50833/***/ }),
50834
vendor: 2,411 bytes, lines 50835-50908
50835/***/ "./node_modules/moment/locale/tzm-latn.js":
50836/*!************************************************!*\
50837  !*** ./node_modules/moment/locale/tzm-latn.js ***!
50838  \************************************************/
50839/*! no static exports found */
50840/***/ (function(module, exports, __webpack_require__) {
50841
50842//! moment.js locale configuration
50843//! locale : Central Atlas Tamazight Latin [tzm-latn]
50844//! author : Abdel Said : https://github.com/abdelsaid
50845
50846;(function (global, factory) {
50847    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
50848   undefined
50849}(this, (function (moment) { 'use strict';
50850
50851    //! moment.js locale configuration
50852
50853    var tzmLatn = moment.defineLocale('tzm-latn', {
50854        months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(
50855            '_'
50856        ),
50857        monthsShort:
50858            'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(
50859                '_'
50860            ),
50861        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
50862        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
50863        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
50864        longDateFormat: {
50865            LT: 'HH:mm',
50866            LTS: 'HH:mm:ss',
50867            L: 'DD/MM/YYYY',
50868            LL: 'D MMMM YYYY',
50869            LLL: 'D MMMM YYYY HH:mm',
50870            LLLL: 'dddd D MMMM YYYY HH:mm',
50871        },
50872        calendar: {
50873            sameDay: '[asdkh g] LT',
50874            nextDay: '[aska g] LT',
50875            nextWeek: 'dddd [g] LT',
50876            lastDay: '[assant g] LT',
50877            lastWeek: 'dddd [g] LT',
50878            sameElse: 'L',
50879        },
50880        relativeTime: {
50881            future: 'dadkh s yan %s',
50882            past: 'yan %s',
50883            s: 'imik',
50884            ss: '%d imik',
50885            m: 'minuḍ',
50886            mm: '%d minuḍ',
50887            h: 'saɛa',
50888            hh: '%d tassaɛin',
50889            d: 'ass',
50890            dd: '%d ossan',
50891            M: 'ayowr',
50892            MM: '%d iyyirn',
50893            y: 'asgas',
50894            yy: '%d isgasn',
50895        },
50896        week: {
50897            dow: 6, // Saturday is the first day of the week.
50898            doy: 12, // The week that contains Jan 12th is the first week of the year.
50899        },
50900    });
50901
50902    return tzmLatn;
50903
50904})));
50905
50906
50907/***/ }),
50908
vendor: 3,014 bytes, lines 50909-50982
50909/***/ "./node_modules/moment/locale/tzm.js":
50910/*!*******************************************!*\
50911  !*** ./node_modules/moment/locale/tzm.js ***!
50912  \*******************************************/
50913/*! no static exports found */
50914/***/ (function(module, exports, __webpack_require__) {
50915
50916//! moment.js locale configuration
50917//! locale : Central Atlas Tamazight [tzm]
50918//! author : Abdel Said : https://github.com/abdelsaid
50919
50920;(function (global, factory) {
50921    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
50922   undefined
50923}(this, (function (moment) { 'use strict';
50924
50925    //! moment.js locale configuration
50926
50927    var tzm = moment.defineLocale('tzm', {
50928        months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(
50929            '_'
50930        ),
50931        monthsShort:
50932            'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(
50933                '_'
50934            ),
50935        weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
50936        weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
50937        weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
50938        longDateFormat: {
50939            LT: 'HH:mm',
50940            LTS: 'HH:mm:ss',
50941            L: 'DD/MM/YYYY',
50942            LL: 'D MMMM YYYY',
50943            LLL: 'D MMMM YYYY HH:mm',
50944            LLLL: 'dddd D MMMM YYYY HH:mm',
50945        },
50946        calendar: {
50947            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
50948            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
50949            nextWeek: 'dddd [â´´] LT',
50950            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
50951            lastWeek: 'dddd [â´´] LT',
50952            sameElse: 'L',
50953        },
50954        relativeTime: {
50955            future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
50956            past: 'ⵢⴰⵏ %s',
50957            s: 'ⵉⵎⵉⴽ',
50958            ss: '%d ⵉⵎⵉⴽ',
50959            m: 'ⵎⵉⵏⵓⴺ',
50960            mm: '%d ⵎⵉⵏⵓⴺ',
50961            h: 'ⵙⴰⵄⴰ',
50962            hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
50963            d: 'ⴰⵙⵙ',
50964            dd: '%d oⵙⵙⴰⵏ',
50965            M: 'ⴰⵢoⵓⵔ',
50966            MM: '%d ⵉⵢⵢⵉⵔⵏ',
50967            y: 'ⴰⵙⴳⴰⵙ',
50968            yy: '%d ⵉⵙⴳⴰⵙⵏ',
50969        },
50970        week: {
50971            dow: 6, // Saturday is the first day of the week.
50972            doy: 12, // The week that contains Jan 12th is the first week of the year.
50973        },
50974    });
50975
50976    return tzm;
50977
50978})));
50979
50980
50981/***/ }),
50982
vendor: 4,806 bytes, lines 50983-51113
50983/***/ "./node_modules/moment/locale/ug-cn.js":
50984/*!*********************************************!*\
50985  !*** ./node_modules/moment/locale/ug-cn.js ***!
50986  \*********************************************/
50987/*! no static exports found */
50988/***/ (function(module, exports, __webpack_require__) {
50989
50990//! moment.js locale configuration
50991//! locale : Uyghur (China) [ug-cn]
50992//! author: boyaq : https://github.com/boyaq
50993
50994;(function (global, factory) {
50995    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
50996   undefined
50997}(this, (function (moment) { 'use strict';
50998
50999    //! moment.js locale configuration
51000
51001    var ugCn = moment.defineLocale('ug-cn', {
51002        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(
51003            '_'
51004        ),
51005        monthsShort:
51006            'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(
51007                '_'
51008            ),
51009        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(
51010            '_'
51011        ),
51012        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
51013        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
51014        longDateFormat: {
51015            LT: 'HH:mm',
51016            LTS: 'HH:mm:ss',
51017            L: 'YYYY-MM-DD',
51018            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',
51019            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',
51020            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',
51021        },
51022        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,
51023        meridiemHour: function (hour, meridiem) {
51024            if (hour === 12) {
51025                hour = 0;
51026            }
51027            if (
51028                meridiem === 'يېرىم كېچە' ||
51029                meridiem === 'سەھەر' ||
51030                meridiem === 'چۈشتىن بۇرۇن'
51031            ) {
51032                return hour;
51033            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {
51034                return hour + 12;
51035            } else {
51036                return hour >= 11 ? hour : hour + 12;
51037            }
51038        },
51039        meridiem: function (hour, minute, isLower) {
51040            var hm = hour * 100 + minute;
51041            if (hm < 600) {
51042                return 'يېرىم كېچە';
51043            } else if (hm < 900) {
51044                return 'سەھەر';
51045            } else if (hm < 1130) {
51046                return 'چۈشتىن بۇرۇن';
51047            } else if (hm < 1230) {
51048                return 'چۈش';
51049            } else if (hm < 1800) {
51050                return 'چۈشتىن كېيىن';
51051            } else {
51052                return 'كەچ';
51053            }
51054        },
51055        calendar: {
51056            sameDay: '[بۈگۈن سائەت] LT',
51057            nextDay: '[ئەتە سائەت] LT',
51058            nextWeek: '[كېلەركى] dddd [سائەت] LT',
51059            lastDay: '[تۆنۈگۈن] LT',
51060            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',
51061            sameElse: 'L',
51062        },
51063        relativeTime: {
51064            future: '%s كېيىن',
51065            past: '%s بۇرۇن',
51066            s: 'نەچچە سېكونت',
51067            ss: '%d سېكونت',
51068            m: 'بىر مىنۇت',
51069            mm: '%d مىنۇت',
51070            h: 'بىر سائەت',
51071            hh: '%d سائەت',
51072            d: 'بىر كۈن',
51073            dd: '%d كۈن',
51074            M: 'بىر ئاي',
51075            MM: '%d ئاي',
51076            y: 'بىر يىل',
51077            yy: '%d يىل',
51078        },
51079
51080        dayOfMonthOrdinalParse: /\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,
51081        ordinal: function (number, period) {
51082            switch (period) {
51083                case 'd':
51084                case 'D':
51085                case 'DDD':
51086                    return number + '-كۈنى';
51087                case 'w':
51088                case 'W':
51089                    return number + '-ھەپتە';
51090                default:
51091                    return number;
51092            }
51093        },
51094        preparse: function (string) {
51095            return string.replace(/،/g, ',');
51096        },
51097        postformat: function (string) {
51098            return string.replace(/,/g, '،');
51099        },
51100        week: {
51101            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
51102            dow: 1, // Monday is the first day of the week.
51103            doy: 7, // The week that contains Jan 1st is the first week of the year.
51104        },
51105    });
51106
51107    return ugCn;
51108
51109})));
51110
51111
51112/***/ }),
51113
vendor: 7,085 bytes, lines 51114-51300
51114/***/ "./node_modules/moment/locale/uk.js":
51115/*!******************************************!*\
51116  !*** ./node_modules/moment/locale/uk.js ***!
51117  \******************************************/
51118/*! no static exports found */
51119/***/ (function(module, exports, __webpack_require__) {
51120
51121//! moment.js locale configuration
51122//! locale : Ukrainian [uk]
51123//! author : zemlanin : https://github.com/zemlanin
51124//! Author : Menelion Elensúle : https://github.com/Oire
51125
51126;(function (global, factory) {
51127    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
51128   undefined
51129}(this, (function (moment) { 'use strict';
51130
51131    //! moment.js locale configuration
51132
51133    function plural(word, num) {
51134        var forms = word.split('_');
51135        return num % 10 === 1 && num % 100 !== 11
51136            ? forms[0]
51137            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
51138              ? forms[1]
51139              : forms[2];
51140    }
51141    function relativeTimeWithPlural(number, withoutSuffix, key) {
51142        var format = {
51143            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',
51144            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
51145            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
51146            dd: 'день_дні_днів',
51147            MM: 'місяць_місяці_місяців',
51148            yy: 'рік_роки_років',
51149        };
51150        if (key === 'm') {
51151            return withoutSuffix ? 'хвилина' : 'хвилину';
51152        } else if (key === 'h') {
51153            return withoutSuffix ? 'година' : 'годину';
51154        } else {
51155            return number + ' ' + plural(format[key], +number);
51156        }
51157    }
51158    function weekdaysCaseReplace(m, format) {
51159        var weekdays = {
51160                nominative:
51161                    'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(
51162                        '_'
51163                    ),
51164                accusative:
51165                    'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(
51166                        '_'
51167                    ),
51168                genitive:
51169                    'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(
51170                        '_'
51171                    ),
51172            },
51173            nounCase;
51174
51175        if (m === true) {
51176            return weekdays['nominative']
51177                .slice(1, 7)
51178                .concat(weekdays['nominative'].slice(0, 1));
51179        }
51180        if (!m) {
51181            return weekdays['nominative'];
51182        }
51183
51184        nounCase = /(\[[ВвУу]\]) ?dddd/.test(format)
51185            ? 'accusative'
51186            : /\[?(?:минулої|наступної)? ?\] ?dddd/.test(format)
51187              ? 'genitive'
51188              : 'nominative';
51189        return weekdays[nounCase][m.day()];
51190    }
51191    function processHoursFunction(str) {
51192        return function () {
51193            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
51194        };
51195    }
51196
51197    var uk = moment.defineLocale('uk', {
51198        months: {
51199            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(
51200                '_'
51201            ),
51202            standalone:
51203                'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(
51204                    '_'
51205                ),
51206        },
51207        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(
51208            '_'
51209        ),
51210        weekdays: weekdaysCaseReplace,
51211        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
51212        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
51213        longDateFormat: {
51214            LT: 'HH:mm',
51215            LTS: 'HH:mm:ss',
51216            L: 'DD.MM.YYYY',
51217            LL: 'D MMMM YYYY р.',
51218            LLL: 'D MMMM YYYY р., HH:mm',
51219            LLLL: 'dddd, D MMMM YYYY р., HH:mm',
51220        },
51221        calendar: {
51222            sameDay: processHoursFunction('[Сьогодні '),
51223            nextDay: processHoursFunction('[Завтра '),
51224            lastDay: processHoursFunction('[Вчора '),
51225            nextWeek: processHoursFunction('[У] dddd ['),
51226            lastWeek: function () {
51227                switch (this.day()) {
51228                    case 0:
51229                    case 3:
51230                    case 5:
51231                    case 6:
51232                        return processHoursFunction('[Минулої] dddd [').call(this);
51233                    case 1:
51234                    case 2:
51235                    case 4:
51236                        return processHoursFunction('[Минулого] dddd [').call(this);
51237                }
51238            },
51239            sameElse: 'L',
51240        },
51241        relativeTime: {
51242            future: 'за %s',
51243            past: '%s тому',
51244            s: 'декілька секунд',
51245            ss: relativeTimeWithPlural,
51246            m: relativeTimeWithPlural,
51247            mm: relativeTimeWithPlural,
51248            h: 'годину',
51249            hh: relativeTimeWithPlural,
51250            d: 'день',
51251            dd: relativeTimeWithPlural,
51252            M: 'місяць',
51253            MM: relativeTimeWithPlural,
51254            y: 'рік',
51255            yy: relativeTimeWithPlural,
51256        },
51257        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
51258        meridiemParse: /ночі|ранку|дня|вечора/,
51259        isPM: function (input) {
51260            return /^(дня|вечора)$/.test(input);
51261        },
51262        meridiem: function (hour, minute, isLower) {
51263            if (hour < 4) {
51264                return 'ночі';
51265            } else if (hour < 12) {
51266                return 'ранку';
51267            } else if (hour < 17) {
51268                return 'дня';
51269            } else {
51270                return 'вечора';
51271            }
51272        },
51273        dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/,
51274        ordinal: function (number, period) {
51275            switch (period) {
51276                case 'M':
51277                case 'd':
51278                case 'DDD':
51279                case 'w':
51280                case 'W':
51281                    return number + '-й';
51282                case 'D':
51283                    return number + '-го';
51284                default:
51285                    return number;
51286            }
51287        },
51288        week: {
51289            dow: 1, // Monday is the first day of the week.
51290            doy: 7, // The week that contains Jan 7th is the first week of the year.
51291        },
51292    });
51293
51294    return uk;
51295
51296})));
51297
51298
51299/***/ }),
51300
vendor: 2,990 bytes, lines 51301-51402
51301/***/ "./node_modules/moment/locale/ur.js":
51302/*!******************************************!*\
51303  !*** ./node_modules/moment/locale/ur.js ***!
51304  \******************************************/
51305/*! no static exports found */
51306/***/ (function(module, exports, __webpack_require__) {
51307
51308//! moment.js locale configuration
51309//! locale : Urdu [ur]
51310//! author : Sawood Alam : https://github.com/ibnesayeed
51311//! author : Zack : https://github.com/ZackVision
51312
51313;(function (global, factory) {
51314    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
51315   undefined
51316}(this, (function (moment) { 'use strict';
51317
51318    //! moment.js locale configuration
51319
51320    var months = [
51321            'جنوری',
51322            'فروری',
51323            'مارچ',
51324            'اپریل',
51325            'مئی',
51326            'جون',
51327            'جولائی',
51328            'اگست',
51329            'ستمبر',
51330            'اکتوبر',
51331            'نومبر',
51332            'دسمبر',
51333        ],
51334        days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];
51335
51336    var ur = moment.defineLocale('ur', {
51337        months: months,
51338        monthsShort: months,
51339        weekdays: days,
51340        weekdaysShort: days,
51341        weekdaysMin: days,
51342        longDateFormat: {
51343            LT: 'HH:mm',
51344            LTS: 'HH:mm:ss',
51345            L: 'DD/MM/YYYY',
51346            LL: 'D MMMM YYYY',
51347            LLL: 'D MMMM YYYY HH:mm',
51348            LLLL: 'dddd، D MMMM YYYY HH:mm',
51349        },
51350        meridiemParse: /صبح|شام/,
51351        isPM: function (input) {
51352            return 'شام' === input;
51353        },
51354        meridiem: function (hour, minute, isLower) {
51355            if (hour < 12) {
51356                return 'صبح';
51357            }
51358            return 'شام';
51359        },
51360        calendar: {
51361            sameDay: '[آج بوقت] LT',
51362            nextDay: '[کل بوقت] LT',
51363            nextWeek: 'dddd [بوقت] LT',
51364            lastDay: '[گذشتہ روز بوقت] LT',
51365            lastWeek: '[گذشتہ] dddd [بوقت] LT',
51366            sameElse: 'L',
51367        },
51368        relativeTime: {
51369            future: '%s بعد',
51370            past: '%s قبل',
51371            s: 'چند سیکنڈ',
51372            ss: '%d سیکنڈ',
51373            m: 'ایک منٹ',
51374            mm: '%d منٹ',
51375            h: 'ایک گھنٹہ',
51376            hh: '%d گھنٹے',
51377            d: 'ایک دن',
51378            dd: '%d دن',
51379            M: 'ایک ماہ',
51380            MM: '%d ماہ',
51381            y: 'ایک سال',
51382            yy: '%d سال',
51383        },
51384        preparse: function (string) {
51385            return string.replace(/،/g, ',');
51386        },
51387        postformat: function (string) {
51388            return string.replace(/,/g, '،');
51389        },
51390        week: {
51391            dow: 1, // Monday is the first day of the week.
51392            doy: 4, // The week that contains Jan 4th is the first week of the year.
51393        },
51394    });
51395
51396    return ur;
51397
51398})));
51399
51400
51401/***/ }),
51402
vendor: 2,353 bytes, lines 51403-51476
51403/***/ "./node_modules/moment/locale/uz-latn.js":
51404/*!***********************************************!*\
51405  !*** ./node_modules/moment/locale/uz-latn.js ***!
51406  \***********************************************/
51407/*! no static exports found */
51408/***/ (function(module, exports, __webpack_require__) {
51409
51410//! moment.js locale configuration
51411//! locale : Uzbek Latin [uz-latn]
51412//! author : Rasulbek Mirzayev : github.com/Rasulbeeek
51413
51414;(function (global, factory) {
51415    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
51416   undefined
51417}(this, (function (moment) { 'use strict';
51418
51419    //! moment.js locale configuration
51420
51421    var uzLatn = moment.defineLocale('uz-latn', {
51422        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(
51423            '_'
51424        ),
51425        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),
51426        weekdays:
51427            'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(
51428                '_'
51429            ),
51430        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),
51431        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),
51432        longDateFormat: {
51433            LT: 'HH:mm',
51434            LTS: 'HH:mm:ss',
51435            L: 'DD/MM/YYYY',
51436            LL: 'D MMMM YYYY',
51437            LLL: 'D MMMM YYYY HH:mm',
51438            LLLL: 'D MMMM YYYY, dddd HH:mm',
51439        },
51440        calendar: {
51441            sameDay: '[Bugun soat] LT [da]',
51442            nextDay: '[Ertaga] LT [da]',
51443            nextWeek: 'dddd [kuni soat] LT [da]',
51444            lastDay: '[Kecha soat] LT [da]',
51445            lastWeek: "[O'tgan] dddd [kuni soat] LT [da]",
51446            sameElse: 'L',
51447        },
51448        relativeTime: {
51449            future: 'Yaqin %s ichida',
51450            past: 'Bir necha %s oldin',
51451            s: 'soniya',
51452            ss: '%d soniya',
51453            m: 'bir daqiqa',
51454            mm: '%d daqiqa',
51455            h: 'bir soat',
51456            hh: '%d soat',
51457            d: 'bir kun',
51458            dd: '%d kun',
51459            M: 'bir oy',
51460            MM: '%d oy',
51461            y: 'bir yil',
51462            yy: '%d yil',
51463        },
51464        week: {
51465            dow: 1, // Monday is the first day of the week.
51466            doy: 7, // The week that contains Jan 7th is the first week of the year.
51467        },
51468    });
51469
51470    return uzLatn;
51471
51472})));
51473
51474
51475/***/ }),
51476
vendor: 2,559 bytes, lines 51477-51547
51477/***/ "./node_modules/moment/locale/uz.js":
51478/*!******************************************!*\
51479  !*** ./node_modules/moment/locale/uz.js ***!
51480  \******************************************/
51481/*! no static exports found */
51482/***/ (function(module, exports, __webpack_require__) {
51483
51484//! moment.js locale configuration
51485//! locale : Uzbek [uz]
51486//! author : Sardor Muminov : https://github.com/muminoff
51487
51488;(function (global, factory) {
51489    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
51490   undefined
51491}(this, (function (moment) { 'use strict';
51492
51493    //! moment.js locale configuration
51494
51495    var uz = moment.defineLocale('uz', {
51496        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(
51497            '_'
51498        ),
51499        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
51500        weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
51501        weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
51502        weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
51503        longDateFormat: {
51504            LT: 'HH:mm',
51505            LTS: 'HH:mm:ss',
51506            L: 'DD/MM/YYYY',
51507            LL: 'D MMMM YYYY',
51508            LLL: 'D MMMM YYYY HH:mm',
51509            LLLL: 'D MMMM YYYY, dddd HH:mm',
51510        },
51511        calendar: {
51512            sameDay: '[Бугун соат] LT [да]',
51513            nextDay: '[Эртага] LT [да]',
51514            nextWeek: 'dddd [куни соат] LT [да]',
51515            lastDay: '[Кеча соат] LT [да]',
51516            lastWeek: '[Утган] dddd [куни соат] LT [да]',
51517            sameElse: 'L',
51518        },
51519        relativeTime: {
51520            future: 'Якин %s ичида',
51521            past: 'Бир неча %s олдин',
51522            s: 'фурсат',
51523            ss: '%d фурсат',
51524            m: 'бир дакика',
51525            mm: '%d дакика',
51526            h: 'бир соат',
51527            hh: '%d соат',
51528            d: 'бир кун',
51529            dd: '%d кун',
51530            M: 'бир ой',
51531            MM: '%d ой',
51532            y: 'бир йил',
51533            yy: '%d йил',
51534        },
51535        week: {
51536            dow: 1, // Monday is the first day of the week.
51537            doy: 7, // The week that contains Jan 4th is the first week of the year.
51538        },
51539    });
51540
51541    return uz;
51542
51543})));
51544
51545
51546/***/ }),
51547
vendor: 3,216 bytes, lines 51548-51647
51548/***/ "./node_modules/moment/locale/vi.js":
51549/*!******************************************!*\
51550  !*** ./node_modules/moment/locale/vi.js ***!
51551  \******************************************/
51552/*! no static exports found */
51553/***/ (function(module, exports, __webpack_require__) {
51554
51555//! moment.js locale configuration
51556//! locale : Vietnamese [vi]
51557//! author : Bang Nguyen : https://github.com/bangnk
51558//! author : Chien Kira : https://github.com/chienkira
51559
51560;(function (global, factory) {
51561    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
51562   undefined
51563}(this, (function (moment) { 'use strict';
51564
51565    //! moment.js locale configuration
51566
51567    var vi = moment.defineLocale('vi', {
51568        months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(
51569            '_'
51570        ),
51571        monthsShort:
51572            'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(
51573                '_'
51574            ),
51575        monthsParseExact: true,
51576        weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(
51577            '_'
51578        ),
51579        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
51580        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
51581        weekdaysParseExact: true,
51582        meridiemParse: /sa|ch/i,
51583        isPM: function (input) {
51584            return /^ch$/i.test(input);
51585        },
51586        meridiem: function (hours, minutes, isLower) {
51587            if (hours < 12) {
51588                return isLower ? 'sa' : 'SA';
51589            } else {
51590                return isLower ? 'ch' : 'CH';
51591            }
51592        },
51593        longDateFormat: {
51594            LT: 'HH:mm',
51595            LTS: 'HH:mm:ss',
51596            L: 'DD/MM/YYYY',
51597            LL: 'D MMMM [năm] YYYY',
51598            LLL: 'D MMMM [năm] YYYY HH:mm',
51599            LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',
51600            l: 'DD/M/YYYY',
51601            ll: 'D MMM YYYY',
51602            lll: 'D MMM YYYY HH:mm',
51603            llll: 'ddd, D MMM YYYY HH:mm',
51604        },
51605        calendar: {
51606            sameDay: '[Hôm nay lúc] LT',
51607            nextDay: '[Ngày mai lúc] LT',
51608            nextWeek: 'dddd [tuần tới lúc] LT',
51609            lastDay: '[Hôm qua lúc] LT',
51610            lastWeek: 'dddd [tuần trước lúc] LT',
51611            sameElse: 'L',
51612        },
51613        relativeTime: {
51614            future: '%s tới',
51615            past: '%s trước',
51616            s: 'vài giây',
51617            ss: '%d giây',
51618            m: 'một phút',
51619            mm: '%d phút',
51620            h: 'một giờ',
51621            hh: '%d giờ',
51622            d: 'một ngày',
51623            dd: '%d ngày',
51624            w: 'một tuần',
51625            ww: '%d tuần',
51626            M: 'một tháng',
51627            MM: '%d tháng',
51628            y: 'một năm',
51629            yy: '%d năm',
51630        },
51631        dayOfMonthOrdinalParse: /\d{1,2}/,
51632        ordinal: function (number) {
51633            return number;
51634        },
51635        week: {
51636            dow: 1, // Monday is the first day of the week.
51637            doy: 4, // The week that contains Jan 4th is the first week of the year.
51638        },
51639    });
51640
51641    return vi;
51642
51643})));
51644
51645
51646/***/ }),
51647
vendor: 3,168 bytes, lines 51648-51740
51648/***/ "./node_modules/moment/locale/x-pseudo.js":
51649/*!************************************************!*\
51650  !*** ./node_modules/moment/locale/x-pseudo.js ***!
51651  \************************************************/
51652/*! no static exports found */
51653/***/ (function(module, exports, __webpack_require__) {
51654
51655//! moment.js locale configuration
51656//! locale : Pseudo [x-pseudo]
51657//! author : Andrew Hood : https://github.com/andrewhood125
51658
51659;(function (global, factory) {
51660    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
51661   undefined
51662}(this, (function (moment) { 'use strict';
51663
51664    //! moment.js locale configuration
51665
51666    var xPseudo = moment.defineLocale('x-pseudo', {
51667        months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(
51668            '_'
51669        ),
51670        monthsShort:
51671            'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(
51672                '_'
51673            ),
51674        monthsParseExact: true,
51675        weekdays:
51676            'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(
51677                '_'
51678            ),
51679        weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
51680        weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
51681        weekdaysParseExact: true,
51682        longDateFormat: {
51683            LT: 'HH:mm',
51684            L: 'DD/MM/YYYY',
51685            LL: 'D MMMM YYYY',
51686            LLL: 'D MMMM YYYY HH:mm',
51687            LLLL: 'dddd, D MMMM YYYY HH:mm',
51688        },
51689        calendar: {
51690            sameDay: '[T~ódá~ý át] LT',
51691            nextDay: '[T~ómó~rró~w át] LT',
51692            nextWeek: 'dddd [át] LT',
51693            lastDay: '[Ý~ést~érdá~ý át] LT',
51694            lastWeek: '[L~ást] dddd [át] LT',
51695            sameElse: 'L',
51696        },
51697        relativeTime: {
51698            future: 'í~ñ %s',
51699            past: '%s á~gó',
51700            s: 'á ~féw ~sécó~ñds',
51701            ss: '%d s~écóñ~ds',
51702            m: 'á ~míñ~úté',
51703            mm: '%d m~íñú~tés',
51704            h: 'á~ñ hó~úr',
51705            hh: '%d h~óúrs',
51706            d: 'á ~dáý',
51707            dd: '%d d~áýs',
51708            M: 'á ~móñ~th',
51709            MM: '%d m~óñt~hs',
51710            y: 'á ~ýéár',
51711            yy: '%d ý~éárs',
51712        },
51713        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
51714        ordinal: function (number) {
51715            var b = number % 10,
51716                output =
51717                    ~~((number % 100) / 10) === 1
51718                        ? 'th'
51719                        : b === 1
51720                          ? 'st'
51721                          : b === 2
51722                            ? 'nd'
51723                            : b === 3
51724                              ? 'rd'
51725                              : 'th';
51726            return number + output;
51727        },
51728        week: {
51729            dow: 1, // Monday is the first day of the week.
51730            doy: 4, // The week that contains Jan 4th is the first week of the year.
51731        },
51732    });
51733
51734    return xPseudo;
51735
51736})));
51737
51738
51739/***/ }),
51740
vendor: 2,569 bytes, lines 51741-51813
51741/***/ "./node_modules/moment/locale/yo.js":
51742/*!******************************************!*\
51743  !*** ./node_modules/moment/locale/yo.js ***!
51744  \******************************************/
51745/*! no static exports found */
51746/***/ (function(module, exports, __webpack_require__) {
51747
51748//! moment.js locale configuration
51749//! locale : Yoruba Nigeria [yo]
51750//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe
51751
51752;(function (global, factory) {
51753    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
51754   undefined
51755}(this, (function (moment) { 'use strict';
51756
51757    //! moment.js locale configuration
51758
51759    var yo = moment.defineLocale('yo', {
51760        months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(
51761            '_'
51762        ),
51763        monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),
51764        weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),
51765        weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),
51766        weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),
51767        longDateFormat: {
51768            LT: 'h:mm A',
51769            LTS: 'h:mm:ss A',
51770            L: 'DD/MM/YYYY',
51771            LL: 'D MMMM YYYY',
51772            LLL: 'D MMMM YYYY h:mm A',
51773            LLLL: 'dddd, D MMMM YYYY h:mm A',
51774        },
51775        calendar: {
51776            sameDay: '[Ònì ni] LT',
51777            nextDay: '[Ọ̀la ni] LT',
51778            nextWeek: "dddd [Ọsẹ̀ tón'bọ] [ni] LT",
51779            lastDay: '[Àna ni] LT',
51780            lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',
51781            sameElse: 'L',
51782        },
51783        relativeTime: {
51784            future: 'ní %s',
51785            past: '%s kọjá',
51786            s: 'ìsẹjú aayá die',
51787            ss: 'aayá %d',
51788            m: 'ìsẹjú kan',
51789            mm: 'ìsẹjú %d',
51790            h: 'wákati kan',
51791            hh: 'wákati %d',
51792            d: 'ọjọ́ kan',
51793            dd: 'ọjọ́ %d',
51794            M: 'osù kan',
51795            MM: 'osù %d',
51796            y: 'ọdún kan',
51797            yy: 'ọdún %d',
51798        },
51799        dayOfMonthOrdinalParse: /ọjọ́\s\d{1,2}/,
51800        ordinal: 'ọjọ́ %d',
51801        week: {
51802            dow: 1, // Monday is the first day of the week.
51803            doy: 4, // The week that contains Jan 4th is the first week of the year.
51804        },
51805    });
51806
51807    return yo;
51808
51809})));
51810
51811
51812/***/ }),
51813
vendor: 4,669 bytes, lines 51814-51953
51814/***/ "./node_modules/moment/locale/zh-cn.js":
51815/*!*********************************************!*\
51816  !*** ./node_modules/moment/locale/zh-cn.js ***!
51817  \*********************************************/
51818/*! no static exports found */
51819/***/ (function(module, exports, __webpack_require__) {
51820
51821//! moment.js locale configuration
51822//! locale : Chinese (China) [zh-cn]
51823//! author : suupic : https://github.com/suupic
51824//! author : Zeno Zeng : https://github.com/zenozeng
51825//! author : uu109 : https://github.com/uu109
51826
51827;(function (global, factory) {
51828    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
51829   undefined
51830}(this, (function (moment) { 'use strict';
51831
51832    //! moment.js locale configuration
51833
51834    var zhCn = moment.defineLocale('zh-cn', {
51835        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
51836            '_'
51837        ),
51838        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
51839            '_'
51840        ),
51841        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
51842        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
51843        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
51844        longDateFormat: {
51845            LT: 'HH:mm',
51846            LTS: 'HH:mm:ss',
51847            L: 'YYYY/MM/DD',
51848            LL: 'YYYY年M月D日',
51849            LLL: 'YYYY年M月D日Ah点mm分',
51850            LLLL: 'YYYY年M月D日ddddAh点mm分',
51851            l: 'YYYY/M/D',
51852            ll: 'YYYY年M月D日',
51853            lll: 'YYYY年M月D日 HH:mm',
51854            llll: 'YYYY年M月D日dddd HH:mm',
51855        },
51856        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
51857        meridiemHour: function (hour, meridiem) {
51858            if (hour === 12) {
51859                hour = 0;
51860            }
51861            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
51862                return hour;
51863            } else if (meridiem === '下午' || meridiem === '晚上') {
51864                return hour + 12;
51865            } else {
51866                // '中午'
51867                return hour >= 11 ? hour : hour + 12;
51868            }
51869        },
51870        meridiem: function (hour, minute, isLower) {
51871            var hm = hour * 100 + minute;
51872            if (hm < 600) {
51873                return '凌晨';
51874            } else if (hm < 900) {
51875                return '早上';
51876            } else if (hm < 1130) {
51877                return '上午';
51878            } else if (hm < 1230) {
51879                return '中午';
51880            } else if (hm < 1800) {
51881                return '下午';
51882            } else {
51883                return '晚上';
51884            }
51885        },
51886        calendar: {
51887            sameDay: '[今天]LT',
51888            nextDay: '[明天]LT',
51889            nextWeek: function (now) {
51890                if (now.week() !== this.week()) {
51891                    return '[下]dddLT';
51892                } else {
51893                    return '[本]dddLT';
51894                }
51895            },
51896            lastDay: '[昨天]LT',
51897            lastWeek: function (now) {
51898                if (this.week() !== now.week()) {
51899                    return '[上]dddLT';
51900                } else {
51901                    return '[本]dddLT';
51902                }
51903            },
51904            sameElse: 'L',
51905        },
51906        dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
51907        ordinal: function (number, period) {
51908            switch (period) {
51909                case 'd':
51910                case 'D':
51911                case 'DDD':
51912                    return number + '日';
51913                case 'M':
51914                    return number + '月';
51915                case 'w':
51916                case 'W':
51917                    return number + '周';
51918                default:
51919                    return number;
51920            }
51921        },
51922        relativeTime: {
51923            future: '%s后',
51924            past: '%s前',
51925            s: '几秒',
51926            ss: '%d 秒',
51927            m: '1 分钟',
51928            mm: '%d 分钟',
51929            h: '1 小时',
51930            hh: '%d 小时',
51931            d: '1 天',
51932            dd: '%d 天',
51933            w: '1 周',
51934            ww: '%d 周',
51935            M: '1 个月',
51936            MM: '%d 个月',
51937            y: '1 å¹´',
51938            yy: '%d å¹´',
51939        },
51940        week: {
51941            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
51942            dow: 1, // Monday is the first day of the week.
51943            doy: 4, // The week that contains Jan 4th is the first week of the year.
51944        },
51945    });
51946
51947    return zhCn;
51948
51949})));
51950
51951
51952/***/ }),
51953
vendor: 3,994 bytes, lines 51954-52074
51954/***/ "./node_modules/moment/locale/zh-hk.js":
51955/*!*********************************************!*\
51956  !*** ./node_modules/moment/locale/zh-hk.js ***!
51957  \*********************************************/
51958/*! no static exports found */
51959/***/ (function(module, exports, __webpack_require__) {
51960
51961//! moment.js locale configuration
51962//! locale : Chinese (Hong Kong) [zh-hk]
51963//! author : Ben : https://github.com/ben-lin
51964//! author : Chris Lam : https://github.com/hehachris
51965//! author : Konstantin : https://github.com/skfd
51966//! author : Anthony : https://github.com/anthonylau
51967
51968;(function (global, factory) {
51969    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
51970   undefined
51971}(this, (function (moment) { 'use strict';
51972
51973    //! moment.js locale configuration
51974
51975    var zhHk = moment.defineLocale('zh-hk', {
51976        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
51977            '_'
51978        ),
51979        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
51980            '_'
51981        ),
51982        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
51983        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
51984        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
51985        longDateFormat: {
51986            LT: 'HH:mm',
51987            LTS: 'HH:mm:ss',
51988            L: 'YYYY/MM/DD',
51989            LL: 'YYYY年M月D日',
51990            LLL: 'YYYY年M月D日 HH:mm',
51991            LLLL: 'YYYY年M月D日dddd HH:mm',
51992            l: 'YYYY/M/D',
51993            ll: 'YYYY年M月D日',
51994            lll: 'YYYY年M月D日 HH:mm',
51995            llll: 'YYYY年M月D日dddd HH:mm',
51996        },
51997        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
51998        meridiemHour: function (hour, meridiem) {
51999            if (hour === 12) {
52000                hour = 0;
52001            }
52002            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
52003                return hour;
52004            } else if (meridiem === '中午') {
52005                return hour >= 11 ? hour : hour + 12;
52006            } else if (meridiem === '下午' || meridiem === '晚上') {
52007                return hour + 12;
52008            }
52009        },
52010        meridiem: function (hour, minute, isLower) {
52011            var hm = hour * 100 + minute;
52012            if (hm < 600) {
52013                return '凌晨';
52014            } else if (hm < 900) {
52015                return '早上';
52016            } else if (hm < 1200) {
52017                return '上午';
52018            } else if (hm === 1200) {
52019                return '中午';
52020            } else if (hm < 1800) {
52021                return '下午';
52022            } else {
52023                return '晚上';
52024            }
52025        },
52026        calendar: {
52027            sameDay: '[今天]LT',
52028            nextDay: '[明天]LT',
52029            nextWeek: '[下]ddddLT',
52030            lastDay: '[昨天]LT',
52031            lastWeek: '[上]ddddLT',
52032            sameElse: 'L',
52033        },
52034        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
52035        ordinal: function (number, period) {
52036            switch (period) {
52037                case 'd':
52038                case 'D':
52039                case 'DDD':
52040                    return number + '日';
52041                case 'M':
52042                    return number + '月';
52043                case 'w':
52044                case 'W':
52045                    return number + '週';
52046                default:
52047                    return number;
52048            }
52049        },
52050        relativeTime: {
52051            future: '%s後',
52052            past: '%s前',
52053            s: '幾秒',
52054            ss: '%d 秒',
52055            m: '1 分鐘',
52056            mm: '%d 分鐘',
52057            h: '1 小時',
52058            hh: '%d 小時',
52059            d: '1 天',
52060            dd: '%d 天',
52061            M: '1 個月',
52062            MM: '%d 個月',
52063            y: '1 å¹´',
52064            yy: '%d å¹´',
52065        },
52066    });
52067
52068    return zhHk;
52069
52070})));
52071
52072
52073/***/ }),
52074
vendor: 3,944 bytes, lines 52075-52194
52075/***/ "./node_modules/moment/locale/zh-mo.js":
52076/*!*********************************************!*\
52077  !*** ./node_modules/moment/locale/zh-mo.js ***!
52078  \*********************************************/
52079/*! no static exports found */
52080/***/ (function(module, exports, __webpack_require__) {
52081
52082//! moment.js locale configuration
52083//! locale : Chinese (Macau) [zh-mo]
52084//! author : Ben : https://github.com/ben-lin
52085//! author : Chris Lam : https://github.com/hehachris
52086//! author : Tan Yuanhong : https://github.com/le0tan
52087
52088;(function (global, factory) {
52089    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
52090   undefined
52091}(this, (function (moment) { 'use strict';
52092
52093    //! moment.js locale configuration
52094
52095    var zhMo = moment.defineLocale('zh-mo', {
52096        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
52097            '_'
52098        ),
52099        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
52100            '_'
52101        ),
52102        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
52103        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
52104        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
52105        longDateFormat: {
52106            LT: 'HH:mm',
52107            LTS: 'HH:mm:ss',
52108            L: 'DD/MM/YYYY',
52109            LL: 'YYYY年M月D日',
52110            LLL: 'YYYY年M月D日 HH:mm',
52111            LLLL: 'YYYY年M月D日dddd HH:mm',
52112            l: 'D/M/YYYY',
52113            ll: 'YYYY年M月D日',
52114            lll: 'YYYY年M月D日 HH:mm',
52115            llll: 'YYYY年M月D日dddd HH:mm',
52116        },
52117        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
52118        meridiemHour: function (hour, meridiem) {
52119            if (hour === 12) {
52120                hour = 0;
52121            }
52122            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
52123                return hour;
52124            } else if (meridiem === '中午') {
52125                return hour >= 11 ? hour : hour + 12;
52126            } else if (meridiem === '下午' || meridiem === '晚上') {
52127                return hour + 12;
52128            }
52129        },
52130        meridiem: function (hour, minute, isLower) {
52131            var hm = hour * 100 + minute;
52132            if (hm < 600) {
52133                return '凌晨';
52134            } else if (hm < 900) {
52135                return '早上';
52136            } else if (hm < 1130) {
52137                return '上午';
52138            } else if (hm < 1230) {
52139                return '中午';
52140            } else if (hm < 1800) {
52141                return '下午';
52142            } else {
52143                return '晚上';
52144            }
52145        },
52146        calendar: {
52147            sameDay: '[今天] LT',
52148            nextDay: '[明天] LT',
52149            nextWeek: '[下]dddd LT',
52150            lastDay: '[昨天] LT',
52151            lastWeek: '[上]dddd LT',
52152            sameElse: 'L',
52153        },
52154        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
52155        ordinal: function (number, period) {
52156            switch (period) {
52157                case 'd':
52158                case 'D':
52159                case 'DDD':
52160                    return number + '日';
52161                case 'M':
52162                    return number + '月';
52163                case 'w':
52164                case 'W':
52165                    return number + '週';
52166                default:
52167                    return number;
52168            }
52169        },
52170        relativeTime: {
52171            future: '%s內',
52172            past: '%s前',
52173            s: '幾秒',
52174            ss: '%d 秒',
52175            m: '1 分鐘',
52176            mm: '%d 分鐘',
52177            h: '1 小時',
52178            hh: '%d 小時',
52179            d: '1 天',
52180            dd: '%d 天',
52181            M: '1 個月',
52182            MM: '%d 個月',
52183            y: '1 å¹´',
52184            yy: '%d å¹´',
52185        },
52186    });
52187
52188    return zhMo;
52189
52190})));
52191
52192
52193/***/ }),
52194
vendor: 3,891 bytes, lines 52195-52313
52195/***/ "./node_modules/moment/locale/zh-tw.js":
52196/*!*********************************************!*\
52197  !*** ./node_modules/moment/locale/zh-tw.js ***!
52198  \*********************************************/
52199/*! no static exports found */
52200/***/ (function(module, exports, __webpack_require__) {
52201
52202//! moment.js locale configuration
52203//! locale : Chinese (Taiwan) [zh-tw]
52204//! author : Ben : https://github.com/ben-lin
52205//! author : Chris Lam : https://github.com/hehachris
52206
52207;(function (global, factory) {
52208    true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) :
52209   undefined
52210}(this, (function (moment) { 'use strict';
52211
52212    //! moment.js locale configuration
52213
52214    var zhTw = moment.defineLocale('zh-tw', {
52215        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
52216            '_'
52217        ),
52218        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
52219            '_'
52220        ),
52221        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
52222        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
52223        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
52224        longDateFormat: {
52225            LT: 'HH:mm',
52226            LTS: 'HH:mm:ss',
52227            L: 'YYYY/MM/DD',
52228            LL: 'YYYY年M月D日',
52229            LLL: 'YYYY年M月D日 HH:mm',
52230            LLLL: 'YYYY年M月D日dddd HH:mm',
52231            l: 'YYYY/M/D',
52232            ll: 'YYYY年M月D日',
52233            lll: 'YYYY年M月D日 HH:mm',
52234            llll: 'YYYY年M月D日dddd HH:mm',
52235        },
52236        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
52237        meridiemHour: function (hour, meridiem) {
52238            if (hour === 12) {
52239                hour = 0;
52240            }
52241            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
52242                return hour;
52243            } else if (meridiem === '中午') {
52244                return hour >= 11 ? hour : hour + 12;
52245            } else if (meridiem === '下午' || meridiem === '晚上') {
52246                return hour + 12;
52247            }
52248        },
52249        meridiem: function (hour, minute, isLower) {
52250            var hm = hour * 100 + minute;
52251            if (hm < 600) {
52252                return '凌晨';
52253            } else if (hm < 900) {
52254                return '早上';
52255            } else if (hm < 1130) {
52256                return '上午';
52257            } else if (hm < 1230) {
52258                return '中午';
52259            } else if (hm < 1800) {
52260                return '下午';
52261            } else {
52262                return '晚上';
52263            }
52264        },
52265        calendar: {
52266            sameDay: '[今天] LT',
52267            nextDay: '[明天] LT',
52268            nextWeek: '[下]dddd LT',
52269            lastDay: '[昨天] LT',
52270            lastWeek: '[上]dddd LT',
52271            sameElse: 'L',
52272        },
52273        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
52274        ordinal: function (number, period) {
52275            switch (period) {
52276                case 'd':
52277                case 'D':
52278                case 'DDD':
52279                    return number + '日';
52280                case 'M':
52281                    return number + '月';
52282                case 'w':
52283                case 'W':
52284                    return number + '週';
52285                default:
52286                    return number;
52287            }
52288        },
52289        relativeTime: {
52290            future: '%s後',
52291            past: '%s前',
52292            s: '幾秒',
52293            ss: '%d 秒',
52294            m: '1 分鐘',
52295            mm: '%d 分鐘',
52296            h: '1 小時',
52297            hh: '%d 小時',
52298            d: '1 天',
52299            dd: '%d 天',
52300            M: '1 個月',
52301            MM: '%d 個月',
52302            y: '1 å¹´',
52303            yy: '%d å¹´',
52304        },
52305    });
52306
52307    return zhTw;
52308
52309})));
52310
52311
52312/***/ }),
52313
vendor: 176,839 bytes, lines 52314-58012
52314/***/ "./node_modules/moment/moment.js":
52315/*!***************************************!*\
52316  !*** ./node_modules/moment/moment.js ***!
52317  \***************************************/
52318/*! no static exports found */
52319/***/ (function(module, exports, __webpack_require__) {
52320
52321/* WEBPACK VAR INJECTION */(function(module) {var require;//! moment.js
52322//! version : 2.30.1
52323//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
52324//! license : MIT
52325//! momentjs.com
52326
52327;(function (global, factory) {
52328     true ? module.exports = factory() :
52329    undefined
52330}(this, (function () { 'use strict';
52331
52332    var hookCallback;
52333
52334    function hooks() {
52335        return hookCallback.apply(null, arguments);
52336    }
52337
52338    // This is done to register the method called with moment()
52339    // without creating circular dependencies.
52340    function setHookCallback(callback) {
52341        hookCallback = callback;
52342    }
52343
52344    function isArray(input) {
52345        return (
52346            input instanceof Array ||
52347            Object.prototype.toString.call(input) === '[object Array]'
52348        );
52349    }
52350
52351    function isObject(input) {
52352        // IE8 will treat undefined and null as object if it wasn't for
52353        // input != null
52354        return (
52355            input != null &&
52356            Object.prototype.toString.call(input) === '[object Object]'
52357        );
52358    }
52359
52360    function hasOwnProp(a, b) {
52361        return Object.prototype.hasOwnProperty.call(a, b);
52362    }
52363
52364    function isObjectEmpty(obj) {
52365        if (Object.getOwnPropertyNames) {
52366            return Object.getOwnPropertyNames(obj).length === 0;
52367        } else {
52368            var k;
52369            for (k in obj) {
52370                if (hasOwnProp(obj, k)) {
52371                    return false;
52372                }
52373            }
52374            return true;
52375        }
52376    }
52377
52378    function isUndefined(input) {
52379        return input === void 0;
52380    }
52381
52382    function isNumber(input) {
52383        return (
52384            typeof input === 'number' ||
52385            Object.prototype.toString.call(input) === '[object Number]'
52386        );
52387    }
52388
52389    function isDate(input) {
52390        return (
52391            input instanceof Date ||
52392            Object.prototype.toString.call(input) === '[object Date]'
52393        );
52394    }
52395
52396    function map(arr, fn) {
52397        var res = [],
52398            i,
52399            arrLen = arr.length;
52400        for (i = 0; i < arrLen; ++i) {
52401            res.push(fn(arr[i], i));
52402        }
52403        return res;
52404    }
52405
52406    function extend(a, b) {
52407        for (var i in b) {
52408            if (hasOwnProp(b, i)) {
52409                a[i] = b[i];
52410            }
52411        }
52412
52413        if (hasOwnProp(b, 'toString')) {
52414            a.toString = b.toString;
52415        }
52416
52417        if (hasOwnProp(b, 'valueOf')) {
52418            a.valueOf = b.valueOf;
52419        }
52420
52421        return a;
52422    }
52423
52424    function createUTC(input, format, locale, strict) {
52425        return createLocalOrUTC(input, format, locale, strict, true).utc();
52426    }
52427
52428    function defaultParsingFlags() {
52429        // We need to deep clone this object.
52430        return {
52431            empty: false,
52432            unusedTokens: [],
52433            unusedInput: [],
52434            overflow: -2,
52435            charsLeftOver: 0,
52436            nullInput: false,
52437            invalidEra: null,
52438            invalidMonth: null,
52439            invalidFormat: false,
52440            userInvalidated: false,
52441            iso: false,
52442            parsedDateParts: [],
52443            era: null,
52444            meridiem: null,
52445            rfc2822: false,
52446            weekdayMismatch: false,
52447        };
52448    }
52449
52450    function getParsingFlags(m) {
52451        if (m._pf == null) {
52452            m._pf = defaultParsingFlags();
52453        }
52454        return m._pf;
52455    }
52456
52457    var some;
52458    if (Array.prototype.some) {
52459        some = Array.prototype.some;
52460    } else {
52461        some = function (fun) {
52462            var t = Object(this),
52463                len = t.length >>> 0,
52464                i;
52465
52466            for (i = 0; i < len; i++) {
52467                if (i in t && fun.call(this, t[i], i, t)) {
52468                    return true;
52469                }
52470            }
52471
52472            return false;
52473        };
52474    }
52475
52476    function isValid(m) {
52477        var flags = null,
52478            parsedParts = false,
52479            isNowValid = m._d && !isNaN(m._d.getTime());
52480        if (isNowValid) {
52481            flags = getParsingFlags(m);
52482            parsedParts = some.call(flags.parsedDateParts, function (i) {
52483                return i != null;
52484            });
52485            isNowValid =
52486                flags.overflow < 0 &&
52487                !flags.empty &&
52488                !flags.invalidEra &&
52489                !flags.invalidMonth &&
52490                !flags.invalidWeekday &&
52491                !flags.weekdayMismatch &&
52492                !flags.nullInput &&
52493                !flags.invalidFormat &&
52494                !flags.userInvalidated &&
52495                (!flags.meridiem || (flags.meridiem && parsedParts));
52496            if (m._strict) {
52497                isNowValid =
52498                    isNowValid &&
52499                    flags.charsLeftOver === 0 &&
52500                    flags.unusedTokens.length === 0 &&
52501                    flags.bigHour === undefined;
52502            }
52503        }
52504        if (Object.isFrozen == null || !Object.isFrozen(m)) {
52505            m._isValid = isNowValid;
52506        } else {
52507            return isNowValid;
52508        }
52509        return m._isValid;
52510    }
52511
52512    function createInvalid(flags) {
52513        var m = createUTC(NaN);
52514        if (flags != null) {
52515            extend(getParsingFlags(m), flags);
52516        } else {
52517            getParsingFlags(m).userInvalidated = true;
52518        }
52519
52520        return m;
52521    }
52522
52523    // Plugins that add properties should also add the key here (null value),
52524    // so we can properly clone ourselves.
52525    var momentProperties = (hooks.momentProperties = []),
52526        updateInProgress = false;
52527
52528    function copyConfig(to, from) {
52529        var i,
52530            prop,
52531            val,
52532            momentPropertiesLen = momentProperties.length;
52533
52534        if (!isUndefined(from._isAMomentObject)) {
52535            to._isAMomentObject = from._isAMomentObject;
52536        }
52537        if (!isUndefined(from._i)) {
52538            to._i = from._i;
52539        }
52540        if (!isUndefined(from._f)) {
52541            to._f = from._f;
52542        }
52543        if (!isUndefined(from._l)) {
52544            to._l = from._l;
52545        }
52546        if (!isUndefined(from._strict)) {
52547            to._strict = from._strict;
52548        }
52549        if (!isUndefined(from._tzm)) {
52550            to._tzm = from._tzm;
52551        }
52552        if (!isUndefined(from._isUTC)) {
52553            to._isUTC = from._isUTC;
52554        }
52555        if (!isUndefined(from._offset)) {
52556            to._offset = from._offset;
52557        }
52558        if (!isUndefined(from._pf)) {
52559            to._pf = getParsingFlags(from);
52560        }
52561        if (!isUndefined(from._locale)) {
52562            to._locale = from._locale;
52563        }
52564
52565        if (momentPropertiesLen > 0) {
52566            for (i = 0; i < momentPropertiesLen; i++) {
52567                prop = momentProperties[i];
52568                val = from[prop];
52569                if (!isUndefined(val)) {
52570                    to[prop] = val;
52571                }
52572            }
52573        }
52574
52575        return to;
52576    }
52577
52578    // Moment prototype object
52579    function Moment(config) {
52580        copyConfig(this, config);
52581        this._d = new Date(config._d != null ? config._d.getTime() : NaN);
52582        if (!this.isValid()) {
52583            this._d = new Date(NaN);
52584        }
52585        // Prevent infinite loop in case updateOffset creates new moment
52586        // objects.
52587        if (updateInProgress === false) {
52588            updateInProgress = true;
52589            hooks.updateOffset(this);
52590            updateInProgress = false;
52591        }
52592    }
52593
52594    function isMoment(obj) {
52595        return (
52596            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
52597        );
52598    }
52599
52600    function warn(msg) {
52601        if (
52602            hooks.suppressDeprecationWarnings === false &&
52603            typeof console !== 'undefined' &&
52604            console.warn
52605        ) {
52606            console.warn('Deprecation warning: ' + msg);
52607        }
52608    }
52609
52610    function deprecate(msg, fn) {
52611        var firstTime = true;
52612
52613        return extend(function () {
52614            if (hooks.deprecationHandler != null) {
52615                hooks.deprecationHandler(null, msg);
52616            }
52617            if (firstTime) {
52618                var args = [],
52619                    arg,
52620                    i,
52621                    key,
52622                    argLen = arguments.length;
52623                for (i = 0; i < argLen; i++) {
52624                    arg = '';
52625                    if (typeof arguments[i] === 'object') {
52626                        arg += '\n[' + i + '] ';
52627                        for (key in arguments[0]) {
52628                            if (hasOwnProp(arguments[0], key)) {
52629                                arg += key + ': ' + arguments[0][key] + ', ';
52630                            }
52631                        }
52632                        arg = arg.slice(0, -2); // Remove trailing comma and space
52633                    } else {
52634                        arg = arguments[i];
52635                    }
52636                    args.push(arg);
52637                }
52638                warn(
52639                    msg +
52640                        '\nArguments: ' +
52641                        Array.prototype.slice.call(args).join('') +
52642                        '\n' +
52643                        new Error().stack
52644                );
52645                firstTime = false;
52646            }
52647            return fn.apply(this, arguments);
52648        }, fn);
52649    }
52650
52651    var deprecations = {};
52652
52653    function deprecateSimple(name, msg) {
52654        if (hooks.deprecationHandler != null) {
52655            hooks.deprecationHandler(name, msg);
52656        }
52657        if (!deprecations[name]) {
52658            warn(msg);
52659            deprecations[name] = true;
52660        }
52661    }
52662
52663    hooks.suppressDeprecationWarnings = false;
52664    hooks.deprecationHandler = null;
52665
52666    function isFunction(input) {
52667        return (
52668            (typeof Function !== 'undefined' && input instanceof Function) ||
52669            Object.prototype.toString.call(input) === '[object Function]'
52670        );
52671    }
52672
52673    function set(config) {
52674        var prop, i;
52675        for (i in config) {
52676            if (hasOwnProp(config, i)) {
52677                prop = config[i];
52678                if (isFunction(prop)) {
52679                    this[i] = prop;
52680                } else {
52681                    this['_' + i] = prop;
52682                }
52683            }
52684        }
52685        this._config = config;
52686        // Lenient ordinal parsing accepts just a number in addition to
52687        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
52688        // TODO: Remove "ordinalParse" fallback in next major release.
52689        this._dayOfMonthOrdinalParseLenient = new RegExp(
52690            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
52691                '|' +
52692                /\d{1,2}/.source
52693        );
52694    }
52695
52696    function mergeConfigs(parentConfig, childConfig) {
52697        var res = extend({}, parentConfig),
52698            prop;
52699        for (prop in childConfig) {
52700            if (hasOwnProp(childConfig, prop)) {
52701                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
52702                    res[prop] = {};
52703                    extend(res[prop], parentConfig[prop]);
52704                    extend(res[prop], childConfig[prop]);
52705                } else if (childConfig[prop] != null) {
52706                    res[prop] = childConfig[prop];
52707                } else {
52708                    delete res[prop];
52709                }
52710            }
52711        }
52712        for (prop in parentConfig) {
52713            if (
52714                hasOwnProp(parentConfig, prop) &&
52715                !hasOwnProp(childConfig, prop) &&
52716                isObject(parentConfig[prop])
52717            ) {
52718                // make sure changes to properties don't modify parent config
52719                res[prop] = extend({}, res[prop]);
52720            }
52721        }
52722        return res;
52723    }
52724
52725    function Locale(config) {
52726        if (config != null) {
52727            this.set(config);
52728        }
52729    }
52730
52731    var keys;
52732
52733    if (Object.keys) {
52734        keys = Object.keys;
52735    } else {
52736        keys = function (obj) {
52737            var i,
52738                res = [];
52739            for (i in obj) {
52740                if (hasOwnProp(obj, i)) {
52741                    res.push(i);
52742                }
52743            }
52744            return res;
52745        };
52746    }
52747
52748    var defaultCalendar = {
52749        sameDay: '[Today at] LT',
52750        nextDay: '[Tomorrow at] LT',
52751        nextWeek: 'dddd [at] LT',
52752        lastDay: '[Yesterday at] LT',
52753        lastWeek: '[Last] dddd [at] LT',
52754        sameElse: 'L',
52755    };
52756
52757    function calendar(key, mom, now) {
52758        var output = this._calendar[key] || this._calendar['sameElse'];
52759        return isFunction(output) ? output.call(mom, now) : output;
52760    }
52761
52762    function zeroFill(number, targetLength, forceSign) {
52763        var absNumber = '' + Math.abs(number),
52764            zerosToFill = targetLength - absNumber.length,
52765            sign = number >= 0;
52766        return (
52767            (sign ? (forceSign ? '+' : '') : '-') +
52768            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
52769            absNumber
52770        );
52771    }
52772
52773    var formattingTokens =
52774            /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
52775        localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
52776        formatFunctions = {},
52777        formatTokenFunctions = {};
52778
52779    // token:    'M'
52780    // padded:   ['MM', 2]
52781    // ordinal:  'Mo'
52782    // callback: function () { this.month() + 1 }
52783    function addFormatToken(token, padded, ordinal, callback) {
52784        var func = callback;
52785        if (typeof callback === 'string') {
52786            func = function () {
52787                return this[callback]();
52788            };
52789        }
52790        if (token) {
52791            formatTokenFunctions[token] = func;
52792        }
52793        if (padded) {
52794            formatTokenFunctions[padded[0]] = function () {
52795                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
52796            };
52797        }
52798        if (ordinal) {
52799            formatTokenFunctions[ordinal] = function () {
52800                return this.localeData().ordinal(
52801                    func.apply(this, arguments),
52802                    token
52803                );
52804            };
52805        }
52806    }
52807
52808    function removeFormattingTokens(input) {
52809        if (input.match(/\[[\s\S]/)) {
52810            return input.replace(/^\[|\]$/g, '');
52811        }
52812        return input.replace(/\\/g, '');
52813    }
52814
52815    function makeFormatFunction(format) {
52816        var array = format.match(formattingTokens),
52817            i,
52818            length;
52819
52820        for (i = 0, length = array.length; i < length; i++) {
52821            if (formatTokenFunctions[array[i]]) {
52822                array[i] = formatTokenFunctions[array[i]];
52823            } else {
52824                array[i] = removeFormattingTokens(array[i]);
52825            }
52826        }
52827
52828        return function (mom) {
52829            var output = '',
52830                i;
52831            for (i = 0; i < length; i++) {
52832                output += isFunction(array[i])
52833                    ? array[i].call(mom, format)
52834                    : array[i];
52835            }
52836            return output;
52837        };
52838    }
52839
52840    // format date using native date object
52841    function formatMoment(m, format) {
52842        if (!m.isValid()) {
52843            return m.localeData().invalidDate();
52844        }
52845
52846        format = expandFormat(format, m.localeData());
52847        formatFunctions[format] =
52848            formatFunctions[format] || makeFormatFunction(format);
52849
52850        return formatFunctions[format](m);
52851    }
52852
52853    function expandFormat(format, locale) {
52854        var i = 5;
52855
52856        function replaceLongDateFormatTokens(input) {
52857            return locale.longDateFormat(input) || input;
52858        }
52859
52860        localFormattingTokens.lastIndex = 0;
52861        while (i >= 0 && localFormattingTokens.test(format)) {
52862            format = format.replace(
52863                localFormattingTokens,
52864                replaceLongDateFormatTokens
52865            );
52866            localFormattingTokens.lastIndex = 0;
52867            i -= 1;
52868        }
52869
52870        return format;
52871    }
52872
52873    var defaultLongDateFormat = {
52874        LTS: 'h:mm:ss A',
52875        LT: 'h:mm A',
52876        L: 'MM/DD/YYYY',
52877        LL: 'MMMM D, YYYY',
52878        LLL: 'MMMM D, YYYY h:mm A',
52879        LLLL: 'dddd, MMMM D, YYYY h:mm A',
52880    };
52881
52882    function longDateFormat(key) {
52883        var format = this._longDateFormat[key],
52884            formatUpper = this._longDateFormat[key.toUpperCase()];
52885
52886        if (format || !formatUpper) {
52887            return format;
52888        }
52889
52890        this._longDateFormat[key] = formatUpper
52891            .match(formattingTokens)
52892            .map(function (tok) {
52893                if (
52894                    tok === 'MMMM' ||
52895                    tok === 'MM' ||
52896                    tok === 'DD' ||
52897                    tok === 'dddd'
52898                ) {
52899                    return tok.slice(1);
52900                }
52901                return tok;
52902            })
52903            .join('');
52904
52905        return this._longDateFormat[key];
52906    }
52907
52908    var defaultInvalidDate = 'Invalid date';
52909
52910    function invalidDate() {
52911        return this._invalidDate;
52912    }
52913
52914    var defaultOrdinal = '%d',
52915        defaultDayOfMonthOrdinalParse = /\d{1,2}/;
52916
52917    function ordinal(number) {
52918        return this._ordinal.replace('%d', number);
52919    }
52920
52921    var defaultRelativeTime = {
52922        future: 'in %s',
52923        past: '%s ago',
52924        s: 'a few seconds',
52925        ss: '%d seconds',
52926        m: 'a minute',
52927        mm: '%d minutes',
52928        h: 'an hour',
52929        hh: '%d hours',
52930        d: 'a day',
52931        dd: '%d days',
52932        w: 'a week',
52933        ww: '%d weeks',
52934        M: 'a month',
52935        MM: '%d months',
52936        y: 'a year',
52937        yy: '%d years',
52938    };
52939
52940    function relativeTime(number, withoutSuffix, string, isFuture) {
52941        var output = this._relativeTime[string];
52942        return isFunction(output)
52943            ? output(number, withoutSuffix, string, isFuture)
52944            : output.replace(/%d/i, number);
52945    }
52946
52947    function pastFuture(diff, output) {
52948        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
52949        return isFunction(format) ? format(output) : format.replace(/%s/i, output);
52950    }
52951
52952    var aliases = {
52953        D: 'date',
52954        dates: 'date',
52955        date: 'date',
52956        d: 'day',
52957        days: 'day',
52958        day: 'day',
52959        e: 'weekday',
52960        weekdays: 'weekday',
52961        weekday: 'weekday',
52962        E: 'isoWeekday',
52963        isoweekdays: 'isoWeekday',
52964        isoweekday: 'isoWeekday',
52965        DDD: 'dayOfYear',
52966        dayofyears: 'dayOfYear',
52967        dayofyear: 'dayOfYear',
52968        h: 'hour',
52969        hours: 'hour',
52970        hour: 'hour',
52971        ms: 'millisecond',
52972        milliseconds: 'millisecond',
52973        millisecond: 'millisecond',
52974        m: 'minute',
52975        minutes: 'minute',
52976        minute: 'minute',
52977        M: 'month',
52978        months: 'month',
52979        month: 'month',
52980        Q: 'quarter',
52981        quarters: 'quarter',
52982        quarter: 'quarter',
52983        s: 'second',
52984        seconds: 'second',
52985        second: 'second',
52986        gg: 'weekYear',
52987        weekyears: 'weekYear',
52988        weekyear: 'weekYear',
52989        GG: 'isoWeekYear',
52990        isoweekyears: 'isoWeekYear',
52991        isoweekyear: 'isoWeekYear',
52992        w: 'week',
52993        weeks: 'week',
52994        week: 'week',
52995        W: 'isoWeek',
52996        isoweeks: 'isoWeek',
52997        isoweek: 'isoWeek',
52998        y: 'year',
52999        years: 'year',
53000        year: 'year',
53001    };
53002
53003    function normalizeUnits(units) {
53004        return typeof units === 'string'
53005            ? aliases[units] || aliases[units.toLowerCase()]
53006            : undefined;
53007    }
53008
53009    function normalizeObjectUnits(inputObject) {
53010        var normalizedInput = {},
53011            normalizedProp,
53012            prop;
53013
53014        for (prop in inputObject) {
53015            if (hasOwnProp(inputObject, prop)) {
53016                normalizedProp = normalizeUnits(prop);
53017                if (normalizedProp) {
53018                    normalizedInput[normalizedProp] = inputObject[prop];
53019                }
53020            }
53021        }
53022
53023        return normalizedInput;
53024    }
53025
53026    var priorities = {
53027        date: 9,
53028        day: 11,
53029        weekday: 11,
53030        isoWeekday: 11,
53031        dayOfYear: 4,
53032        hour: 13,
53033        millisecond: 16,
53034        minute: 14,
53035        month: 8,
53036        quarter: 7,
53037        second: 15,
53038        weekYear: 1,
53039        isoWeekYear: 1,
53040        week: 5,
53041        isoWeek: 5,
53042        year: 1,
53043    };
53044
53045    function getPrioritizedUnits(unitsObj) {
53046        var units = [],
53047            u;
53048        for (u in unitsObj) {
53049            if (hasOwnProp(unitsObj, u)) {
53050                units.push({ unit: u, priority: priorities[u] });
53051            }
53052        }
53053        units.sort(function (a, b) {
53054            return a.priority - b.priority;
53055        });
53056        return units;
53057    }
53058
53059    var match1 = /\d/, //       0 - 9
53060        match2 = /\d\d/, //      00 - 99
53061        match3 = /\d{3}/, //     000 - 999
53062        match4 = /\d{4}/, //    0000 - 9999
53063        match6 = /[+-]?\d{6}/, // -999999 - 999999
53064        match1to2 = /\d\d?/, //       0 - 99
53065        match3to4 = /\d\d\d\d?/, //     999 - 9999
53066        match5to6 = /\d\d\d\d\d\d?/, //   99999 - 999999
53067        match1to3 = /\d{1,3}/, //       0 - 999
53068        match1to4 = /\d{1,4}/, //       0 - 9999
53069        match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
53070        matchUnsigned = /\d+/, //       0 - inf
53071        matchSigned = /[+-]?\d+/, //    -inf - inf
53072        matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
53073        matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
53074        matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
53075        // any word (or two) characters or numbers including two/three word month in arabic.
53076        // includes scottish gaelic two word and hyphenated months
53077        matchWord =
53078            /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
53079        match1to2NoLeadingZero = /^[1-9]\d?/, //         1-99
53080        match1to2HasZero = /^([1-9]\d|\d)/, //           0-99
53081        regexes;
53082
53083    regexes = {};
53084
53085    function addRegexToken(token, regex, strictRegex) {
53086        regexes[token] = isFunction(regex)
53087            ? regex
53088            : function (isStrict, localeData) {
53089                  return isStrict && strictRegex ? strictRegex : regex;
53090              };
53091    }
53092
53093    function getParseRegexForToken(token, config) {
53094        if (!hasOwnProp(regexes, token)) {
53095            return new RegExp(unescapeFormat(token));
53096        }
53097
53098        return regexes[token](config._strict, config._locale);
53099    }
53100
53101    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
53102    function unescapeFormat(s) {
53103        return regexEscape(
53104            s
53105                .replace('\\', '')
53106                .replace(
53107                    /\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,
53108                    function (matched, p1, p2, p3, p4) {
53109                        return p1 || p2 || p3 || p4;
53110                    }
53111                )
53112        );
53113    }
53114
53115    function regexEscape(s) {
53116        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
53117    }
53118
53119    function absFloor(number) {
53120        if (number < 0) {
53121            // -0 -> 0
53122            return Math.ceil(number) || 0;
53123        } else {
53124            return Math.floor(number);
53125        }
53126    }
53127
53128    function toInt(argumentForCoercion) {
53129        var coercedNumber = +argumentForCoercion,
53130            value = 0;
53131
53132        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
53133            value = absFloor(coercedNumber);
53134        }
53135
53136        return value;
53137    }
53138
53139    var tokens = {};
53140
53141    function addParseToken(token, callback) {
53142        var i,
53143            func = callback,
53144            tokenLen;
53145        if (typeof token === 'string') {
53146            token = [token];
53147        }
53148        if (isNumber(callback)) {
53149            func = function (input, array) {
53150                array[callback] = toInt(input);
53151            };
53152        }
53153        tokenLen = token.length;
53154        for (i = 0; i < tokenLen; i++) {
53155            tokens[token[i]] = func;
53156        }
53157    }
53158
53159    function addWeekParseToken(token, callback) {
53160        addParseToken(token, function (input, array, config, token) {
53161            config._w = config._w || {};
53162            callback(input, config._w, config, token);
53163        });
53164    }
53165
53166    function addTimeToArrayFromToken(token, input, config) {
53167        if (input != null && hasOwnProp(tokens, token)) {
53168            tokens[token](input, config._a, config, token);
53169        }
53170    }
53171
53172    function isLeapYear(year) {
53173        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
53174    }
53175
53176    var YEAR = 0,
53177        MONTH = 1,
53178        DATE = 2,
53179        HOUR = 3,
53180        MINUTE = 4,
53181        SECOND = 5,
53182        MILLISECOND = 6,
53183        WEEK = 7,
53184        WEEKDAY = 8;
53185
53186    // FORMATTING
53187
53188    addFormatToken('Y', 0, 0, function () {
53189        var y = this.year();
53190        return y <= 9999 ? zeroFill(y, 4) : '+' + y;
53191    });
53192
53193    addFormatToken(0, ['YY', 2], 0, function () {
53194        return this.year() % 100;
53195    });
53196
53197    addFormatToken(0, ['YYYY', 4], 0, 'year');
53198    addFormatToken(0, ['YYYYY', 5], 0, 'year');
53199    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
53200
53201    // PARSING
53202
53203    addRegexToken('Y', matchSigned);
53204    addRegexToken('YY', match1to2, match2);
53205    addRegexToken('YYYY', match1to4, match4);
53206    addRegexToken('YYYYY', match1to6, match6);
53207    addRegexToken('YYYYYY', match1to6, match6);
53208
53209    addParseToken(['YYYYY', 'YYYYYY'], YEAR);
53210    addParseToken('YYYY', function (input, array) {
53211        array[YEAR] =
53212            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
53213    });
53214    addParseToken('YY', function (input, array) {
53215        array[YEAR] = hooks.parseTwoDigitYear(input);
53216    });
53217    addParseToken('Y', function (input, array) {
53218        array[YEAR] = parseInt(input, 10);
53219    });
53220
53221    // HELPERS
53222
53223    function daysInYear(year) {
53224        return isLeapYear(year) ? 366 : 365;
53225    }
53226
53227    // HOOKS
53228
53229    hooks.parseTwoDigitYear = function (input) {
53230        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
53231    };
53232
53233    // MOMENTS
53234
53235    var getSetYear = makeGetSet('FullYear', true);
53236
53237    function getIsLeapYear() {
53238        return isLeapYear(this.year());
53239    }
53240
53241    function makeGetSet(unit, keepTime) {
53242        return function (value) {
53243            if (value != null) {
53244                set$1(this, unit, value);
53245                hooks.updateOffset(this, keepTime);
53246                return this;
53247            } else {
53248                return get(this, unit);
53249            }
53250        };
53251    }
53252
53253    function get(mom, unit) {
53254        if (!mom.isValid()) {
53255            return NaN;
53256        }
53257
53258        var d = mom._d,
53259            isUTC = mom._isUTC;
53260
53261        switch (unit) {
53262            case 'Milliseconds':
53263                return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();
53264            case 'Seconds':
53265                return isUTC ? d.getUTCSeconds() : d.getSeconds();
53266            case 'Minutes':
53267                return isUTC ? d.getUTCMinutes() : d.getMinutes();
53268            case 'Hours':
53269                return isUTC ? d.getUTCHours() : d.getHours();
53270            case 'Date':
53271                return isUTC ? d.getUTCDate() : d.getDate();
53272            case 'Day':
53273                return isUTC ? d.getUTCDay() : d.getDay();
53274            case 'Month':
53275                return isUTC ? d.getUTCMonth() : d.getMonth();
53276            case 'FullYear':
53277                return isUTC ? d.getUTCFullYear() : d.getFullYear();
53278            default:
53279                return NaN; // Just in case
53280        }
53281    }
53282
53283    function set$1(mom, unit, value) {
53284        var d, isUTC, year, month, date;
53285
53286        if (!mom.isValid() || isNaN(value)) {
53287            return;
53288        }
53289
53290        d = mom._d;
53291        isUTC = mom._isUTC;
53292
53293        switch (unit) {
53294            case 'Milliseconds':
53295                return void (isUTC
53296                    ? d.setUTCMilliseconds(value)
53297                    : d.setMilliseconds(value));
53298            case 'Seconds':
53299                return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));
53300            case 'Minutes':
53301                return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));
53302            case 'Hours':
53303                return void (isUTC ? d.setUTCHours(value) : d.setHours(value));
53304            case 'Date':
53305                return void (isUTC ? d.setUTCDate(value) : d.setDate(value));
53306            // case 'Day': // Not real
53307            //    return void (isUTC ? d.setUTCDay(value) : d.setDay(value));
53308            // case 'Month': // Not used because we need to pass two variables
53309            //     return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));
53310            case 'FullYear':
53311                break; // See below ...
53312            default:
53313                return; // Just in case
53314        }
53315
53316        year = value;
53317        month = mom.month();
53318        date = mom.date();
53319        date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;
53320        void (isUTC
53321            ? d.setUTCFullYear(year, month, date)
53322            : d.setFullYear(year, month, date));
53323    }
53324
53325    // MOMENTS
53326
53327    function stringGet(units) {
53328        units = normalizeUnits(units);
53329        if (isFunction(this[units])) {
53330            return this[units]();
53331        }
53332        return this;
53333    }
53334
53335    function stringSet(units, value) {
53336        if (typeof units === 'object') {
53337            units = normalizeObjectUnits(units);
53338            var prioritized = getPrioritizedUnits(units),
53339                i,
53340                prioritizedLen = prioritized.length;
53341            for (i = 0; i < prioritizedLen; i++) {
53342                this[prioritized[i].unit](units[prioritized[i].unit]);
53343            }
53344        } else {
53345            units = normalizeUnits(units);
53346            if (isFunction(this[units])) {
53347                return this[units](value);
53348            }
53349        }
53350        return this;
53351    }
53352
53353    function mod(n, x) {
53354        return ((n % x) + x) % x;
53355    }
53356
53357    var indexOf;
53358
53359    if (Array.prototype.indexOf) {
53360        indexOf = Array.prototype.indexOf;
53361    } else {
53362        indexOf = function (o) {
53363            // I know
53364            var i;
53365            for (i = 0; i < this.length; ++i) {
53366                if (this[i] === o) {
53367                    return i;
53368                }
53369            }
53370            return -1;
53371        };
53372    }
53373
53374    function daysInMonth(year, month) {
53375        if (isNaN(year) || isNaN(month)) {
53376            return NaN;
53377        }
53378        var modMonth = mod(month, 12);
53379        year += (month - modMonth) / 12;
53380        return modMonth === 1
53381            ? isLeapYear(year)
53382                ? 29
53383                : 28
53384            : 31 - ((modMonth % 7) % 2);
53385    }
53386
53387    // FORMATTING
53388
53389    addFormatToken('M', ['MM', 2], 'Mo', function () {
53390        return this.month() + 1;
53391    });
53392
53393    addFormatToken('MMM', 0, 0, function (format) {
53394        return this.localeData().monthsShort(this, format);
53395    });
53396
53397    addFormatToken('MMMM', 0, 0, function (format) {
53398        return this.localeData().months(this, format);
53399    });
53400
53401    // PARSING
53402
53403    addRegexToken('M', match1to2, match1to2NoLeadingZero);
53404    addRegexToken('MM', match1to2, match2);
53405    addRegexToken('MMM', function (isStrict, locale) {
53406        return locale.monthsShortRegex(isStrict);
53407    });
53408    addRegexToken('MMMM', function (isStrict, locale) {
53409        return locale.monthsRegex(isStrict);
53410    });
53411
53412    addParseToken(['M', 'MM'], function (input, array) {
53413        array[MONTH] = toInt(input) - 1;
53414    });
53415
53416    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
53417        var month = config._locale.monthsParse(input, token, config._strict);
53418        // if we didn't find a month name, mark the date as invalid.
53419        if (month != null) {
53420            array[MONTH] = month;
53421        } else {
53422            getParsingFlags(config).invalidMonth = input;
53423        }
53424    });
53425
53426    // LOCALES
53427
53428    var defaultLocaleMonths =
53429            'January_February_March_April_May_June_July_August_September_October_November_December'.split(
53430                '_'
53431            ),
53432        defaultLocaleMonthsShort =
53433            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
53434        MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
53435        defaultMonthsShortRegex = matchWord,
53436        defaultMonthsRegex = matchWord;
53437
53438    function localeMonths(m, format) {
53439        if (!m) {
53440            return isArray(this._months)
53441                ? this._months
53442                : this._months['standalone'];
53443        }
53444        return isArray(this._months)
53445            ? this._months[m.month()]
53446            : this._months[
53447                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
53448                      ? 'format'
53449                      : 'standalone'
53450              ][m.month()];
53451    }
53452
53453    function localeMonthsShort(m, format) {
53454        if (!m) {
53455            return isArray(this._monthsShort)
53456                ? this._monthsShort
53457                : this._monthsShort['standalone'];
53458        }
53459        return isArray(this._monthsShort)
53460            ? this._monthsShort[m.month()]
53461            : this._monthsShort[
53462                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
53463              ][m.month()];
53464    }
53465
53466    function handleStrictParse(monthName, format, strict) {
53467        var i,
53468            ii,
53469            mom,
53470            llc = monthName.toLocaleLowerCase();
53471        if (!this._monthsParse) {
53472            // this is not used
53473            this._monthsParse = [];
53474            this._longMonthsParse = [];
53475            this._shortMonthsParse = [];
53476            for (i = 0; i < 12; ++i) {
53477                mom = createUTC([2000, i]);
53478                this._shortMonthsParse[i] = this.monthsShort(
53479                    mom,
53480                    ''
53481                ).toLocaleLowerCase();
53482                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
53483            }
53484        }
53485
53486        if (strict) {
53487            if (format === 'MMM') {
53488                ii = indexOf.call(this._shortMonthsParse, llc);
53489                return ii !== -1 ? ii : null;
53490            } else {
53491                ii = indexOf.call(this._longMonthsParse, llc);
53492                return ii !== -1 ? ii : null;
53493            }
53494        } else {
53495            if (format === 'MMM') {
53496                ii = indexOf.call(this._shortMonthsParse, llc);
53497                if (ii !== -1) {
53498                    return ii;
53499                }
53500                ii = indexOf.call(this._longMonthsParse, llc);
53501                return ii !== -1 ? ii : null;
53502            } else {
53503                ii = indexOf.call(this._longMonthsParse, llc);
53504                if (ii !== -1) {
53505                    return ii;
53506                }
53507                ii = indexOf.call(this._shortMonthsParse, llc);
53508                return ii !== -1 ? ii : null;
53509            }
53510        }
53511    }
53512
53513    function localeMonthsParse(monthName, format, strict) {
53514        var i, mom, regex;
53515
53516        if (this._monthsParseExact) {
53517            return handleStrictParse.call(this, monthName, format, strict);
53518        }
53519
53520        if (!this._monthsParse) {
53521            this._monthsParse = [];
53522            this._longMonthsParse = [];
53523            this._shortMonthsParse = [];
53524        }
53525
53526        // TODO: add sorting
53527        // Sorting makes sure if one month (or abbr) is a prefix of another
53528        // see sorting in computeMonthsParse
53529        for (i = 0; i < 12; i++) {
53530            // make the regex if we don't have it already
53531            mom = createUTC([2000, i]);
53532            if (strict && !this._longMonthsParse[i]) {
53533                this._longMonthsParse[i] = new RegExp(
53534                    '^' + this.months(mom, '').replace('.', '') + '$',
53535                    'i'
53536                );
53537                this._shortMonthsParse[i] = new RegExp(
53538                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',
53539                    'i'
53540                );
53541            }
53542            if (!strict && !this._monthsParse[i]) {
53543                regex =
53544                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
53545                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
53546            }
53547            // test the regex
53548            if (
53549                strict &&
53550                format === 'MMMM' &&
53551                this._longMonthsParse[i].test(monthName)
53552            ) {
53553                return i;
53554            } else if (
53555                strict &&
53556                format === 'MMM' &&
53557                this._shortMonthsParse[i].test(monthName)
53558            ) {
53559                return i;
53560            } else if (!strict && this._monthsParse[i].test(monthName)) {
53561                return i;
53562            }
53563        }
53564    }
53565
53566    // MOMENTS
53567
53568    function setMonth(mom, value) {
53569        if (!mom.isValid()) {
53570            // No op
53571            return mom;
53572        }
53573
53574        if (typeof value === 'string') {
53575            if (/^\d+$/.test(value)) {
53576                value = toInt(value);
53577            } else {
53578                value = mom.localeData().monthsParse(value);
53579                // TODO: Another silent failure?
53580                if (!isNumber(value)) {
53581                    return mom;
53582                }
53583            }
53584        }
53585
53586        var month = value,
53587            date = mom.date();
53588
53589        date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));
53590        void (mom._isUTC
53591            ? mom._d.setUTCMonth(month, date)
53592            : mom._d.setMonth(month, date));
53593        return mom;
53594    }
53595
53596    function getSetMonth(value) {
53597        if (value != null) {
53598            setMonth(this, value);
53599            hooks.updateOffset(this, true);
53600            return this;
53601        } else {
53602            return get(this, 'Month');
53603        }
53604    }
53605
53606    function getDaysInMonth() {
53607        return daysInMonth(this.year(), this.month());
53608    }
53609
53610    function monthsShortRegex(isStrict) {
53611        if (this._monthsParseExact) {
53612            if (!hasOwnProp(this, '_monthsRegex')) {
53613                computeMonthsParse.call(this);
53614            }
53615            if (isStrict) {
53616                return this._monthsShortStrictRegex;
53617            } else {
53618                return this._monthsShortRegex;
53619            }
53620        } else {
53621            if (!hasOwnProp(this, '_monthsShortRegex')) {
53622                this._monthsShortRegex = defaultMonthsShortRegex;
53623            }
53624            return this._monthsShortStrictRegex && isStrict
53625                ? this._monthsShortStrictRegex
53626                : this._monthsShortRegex;
53627        }
53628    }
53629
53630    function monthsRegex(isStrict) {
53631        if (this._monthsParseExact) {
53632            if (!hasOwnProp(this, '_monthsRegex')) {
53633                computeMonthsParse.call(this);
53634            }
53635            if (isStrict) {
53636                return this._monthsStrictRegex;
53637            } else {
53638                return this._monthsRegex;
53639            }
53640        } else {
53641            if (!hasOwnProp(this, '_monthsRegex')) {
53642                this._monthsRegex = defaultMonthsRegex;
53643            }
53644            return this._monthsStrictRegex && isStrict
53645                ? this._monthsStrictRegex
53646                : this._monthsRegex;
53647        }
53648    }
53649
53650    function computeMonthsParse() {
53651        function cmpLenRev(a, b) {
53652            return b.length - a.length;
53653        }
53654
53655        var shortPieces = [],
53656            longPieces = [],
53657            mixedPieces = [],
53658            i,
53659            mom,
53660            shortP,
53661            longP;
53662        for (i = 0; i < 12; i++) {
53663            // make the regex if we don't have it already
53664            mom = createUTC([2000, i]);
53665            shortP = regexEscape(this.monthsShort(mom, ''));
53666            longP = regexEscape(this.months(mom, ''));
53667            shortPieces.push(shortP);
53668            longPieces.push(longP);
53669            mixedPieces.push(longP);
53670            mixedPieces.push(shortP);
53671        }
53672        // Sorting makes sure if one month (or abbr) is a prefix of another it
53673        // will match the longer piece.
53674        shortPieces.sort(cmpLenRev);
53675        longPieces.sort(cmpLenRev);
53676        mixedPieces.sort(cmpLenRev);
53677
53678        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
53679        this._monthsShortRegex = this._monthsRegex;
53680        this._monthsStrictRegex = new RegExp(
53681            '^(' + longPieces.join('|') + ')',
53682            'i'
53683        );
53684        this._monthsShortStrictRegex = new RegExp(
53685            '^(' + shortPieces.join('|') + ')',
53686            'i'
53687        );
53688    }
53689
53690    function createDate(y, m, d, h, M, s, ms) {
53691        // can't just apply() to create a date:
53692        // https://stackoverflow.com/q/181348
53693        var date;
53694        // the date constructor remaps years 0-99 to 1900-1999
53695        if (y < 100 && y >= 0) {
53696            // preserve leap years using a full 400 year cycle, then reset
53697            date = new Date(y + 400, m, d, h, M, s, ms);
53698            if (isFinite(date.getFullYear())) {
53699                date.setFullYear(y);
53700            }
53701        } else {
53702            date = new Date(y, m, d, h, M, s, ms);
53703        }
53704
53705        return date;
53706    }
53707
53708    function createUTCDate(y) {
53709        var date, args;
53710        // the Date.UTC function remaps years 0-99 to 1900-1999
53711        if (y < 100 && y >= 0) {
53712            args = Array.prototype.slice.call(arguments);
53713            // preserve leap years using a full 400 year cycle, then reset
53714            args[0] = y + 400;
53715            date = new Date(Date.UTC.apply(null, args));
53716            if (isFinite(date.getUTCFullYear())) {
53717                date.setUTCFullYear(y);
53718            }
53719        } else {
53720            date = new Date(Date.UTC.apply(null, arguments));
53721        }
53722
53723        return date;
53724    }
53725
53726    // start-of-first-week - start-of-year
53727    function firstWeekOffset(year, dow, doy) {
53728        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
53729            fwd = 7 + dow - doy,
53730            // first-week day local weekday -- which local weekday is fwd
53731            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
53732
53733        return -fwdlw + fwd - 1;
53734    }
53735
53736    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
53737    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
53738        var localWeekday = (7 + weekday - dow) % 7,
53739            weekOffset = firstWeekOffset(year, dow, doy),
53740            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
53741            resYear,
53742            resDayOfYear;
53743
53744        if (dayOfYear <= 0) {
53745            resYear = year - 1;
53746            resDayOfYear = daysInYear(resYear) + dayOfYear;
53747        } else if (dayOfYear > daysInYear(year)) {
53748            resYear = year + 1;
53749            resDayOfYear = dayOfYear - daysInYear(year);
53750        } else {
53751            resYear = year;
53752            resDayOfYear = dayOfYear;
53753        }
53754
53755        return {
53756            year: resYear,
53757            dayOfYear: resDayOfYear,
53758        };
53759    }
53760
53761    function weekOfYear(mom, dow, doy) {
53762        var weekOffset = firstWeekOffset(mom.year(), dow, doy),
53763            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
53764            resWeek,
53765            resYear;
53766
53767        if (week < 1) {
53768            resYear = mom.year() - 1;
53769            resWeek = week + weeksInYear(resYear, dow, doy);
53770        } else if (week > weeksInYear(mom.year(), dow, doy)) {
53771            resWeek = week - weeksInYear(mom.year(), dow, doy);
53772            resYear = mom.year() + 1;
53773        } else {
53774            resYear = mom.year();
53775            resWeek = week;
53776        }
53777
53778        return {
53779            week: resWeek,
53780            year: resYear,
53781        };
53782    }
53783
53784    function weeksInYear(year, dow, doy) {
53785        var weekOffset = firstWeekOffset(year, dow, doy),
53786            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
53787        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
53788    }
53789
53790    // FORMATTING
53791
53792    addFormatToken('w', ['ww', 2], 'wo', 'week');
53793    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
53794
53795    // PARSING
53796
53797    addRegexToken('w', match1to2, match1to2NoLeadingZero);
53798    addRegexToken('ww', match1to2, match2);
53799    addRegexToken('W', match1to2, match1to2NoLeadingZero);
53800    addRegexToken('WW', match1to2, match2);
53801
53802    addWeekParseToken(
53803        ['w', 'ww', 'W', 'WW'],
53804        function (input, week, config, token) {
53805            week[token.substr(0, 1)] = toInt(input);
53806        }
53807    );
53808
53809    // HELPERS
53810
53811    // LOCALES
53812
53813    function localeWeek(mom) {
53814        return weekOfYear(mom, this._week.dow, this._week.doy).week;
53815    }
53816
53817    var defaultLocaleWeek = {
53818        dow: 0, // Sunday is the first day of the week.
53819        doy: 6, // The week that contains Jan 6th is the first week of the year.
53820    };
53821
53822    function localeFirstDayOfWeek() {
53823        return this._week.dow;
53824    }
53825
53826    function localeFirstDayOfYear() {
53827        return this._week.doy;
53828    }
53829
53830    // MOMENTS
53831
53832    function getSetWeek(input) {
53833        var week = this.localeData().week(this);
53834        return input == null ? week : this.add((input - week) * 7, 'd');
53835    }
53836
53837    function getSetISOWeek(input) {
53838        var week = weekOfYear(this, 1, 4).week;
53839        return input == null ? week : this.add((input - week) * 7, 'd');
53840    }
53841
53842    // FORMATTING
53843
53844    addFormatToken('d', 0, 'do', 'day');
53845
53846    addFormatToken('dd', 0, 0, function (format) {
53847        return this.localeData().weekdaysMin(this, format);
53848    });
53849
53850    addFormatToken('ddd', 0, 0, function (format) {
53851        return this.localeData().weekdaysShort(this, format);
53852    });
53853
53854    addFormatToken('dddd', 0, 0, function (format) {
53855        return this.localeData().weekdays(this, format);
53856    });
53857
53858    addFormatToken('e', 0, 0, 'weekday');
53859    addFormatToken('E', 0, 0, 'isoWeekday');
53860
53861    // PARSING
53862
53863    addRegexToken('d', match1to2);
53864    addRegexToken('e', match1to2);
53865    addRegexToken('E', match1to2);
53866    addRegexToken('dd', function (isStrict, locale) {
53867        return locale.weekdaysMinRegex(isStrict);
53868    });
53869    addRegexToken('ddd', function (isStrict, locale) {
53870        return locale.weekdaysShortRegex(isStrict);
53871    });
53872    addRegexToken('dddd', function (isStrict, locale) {
53873        return locale.weekdaysRegex(isStrict);
53874    });
53875
53876    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
53877        var weekday = config._locale.weekdaysParse(input, token, config._strict);
53878        // if we didn't get a weekday name, mark the date as invalid
53879        if (weekday != null) {
53880            week.d = weekday;
53881        } else {
53882            getParsingFlags(config).invalidWeekday = input;
53883        }
53884    });
53885
53886    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
53887        week[token] = toInt(input);
53888    });
53889
53890    // HELPERS
53891
53892    function parseWeekday(input, locale) {
53893        if (typeof input !== 'string') {
53894            return input;
53895        }
53896
53897        if (!isNaN(input)) {
53898            return parseInt(input, 10);
53899        }
53900
53901        input = locale.weekdaysParse(input);
53902        if (typeof input === 'number') {
53903            return input;
53904        }
53905
53906        return null;
53907    }
53908
53909    function parseIsoWeekday(input, locale) {
53910        if (typeof input === 'string') {
53911            return locale.weekdaysParse(input) % 7 || 7;
53912        }
53913        return isNaN(input) ? null : input;
53914    }
53915
53916    // LOCALES
53917    function shiftWeekdays(ws, n) {
53918        return ws.slice(n, 7).concat(ws.slice(0, n));
53919    }
53920
53921    var defaultLocaleWeekdays =
53922            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
53923        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
53924        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
53925        defaultWeekdaysRegex = matchWord,
53926        defaultWeekdaysShortRegex = matchWord,
53927        defaultWeekdaysMinRegex = matchWord;
53928
53929    function localeWeekdays(m, format) {
53930        var weekdays = isArray(this._weekdays)
53931            ? this._weekdays
53932            : this._weekdays[
53933                  m && m !== true && this._weekdays.isFormat.test(format)
53934                      ? 'format'
53935                      : 'standalone'
53936              ];
53937        return m === true
53938            ? shiftWeekdays(weekdays, this._week.dow)
53939            : m
53940              ? weekdays[m.day()]
53941              : weekdays;
53942    }
53943
53944    function localeWeekdaysShort(m) {
53945        return m === true
53946            ? shiftWeekdays(this._weekdaysShort, this._week.dow)
53947            : m
53948              ? this._weekdaysShort[m.day()]
53949              : this._weekdaysShort;
53950    }
53951
53952    function localeWeekdaysMin(m) {
53953        return m === true
53954            ? shiftWeekdays(this._weekdaysMin, this._week.dow)
53955            : m
53956              ? this._weekdaysMin[m.day()]
53957              : this._weekdaysMin;
53958    }
53959
53960    function handleStrictParse$1(weekdayName, format, strict) {
53961        var i,
53962            ii,
53963            mom,
53964            llc = weekdayName.toLocaleLowerCase();
53965        if (!this._weekdaysParse) {
53966            this._weekdaysParse = [];
53967            this._shortWeekdaysParse = [];
53968            this._minWeekdaysParse = [];
53969
53970            for (i = 0; i < 7; ++i) {
53971                mom = createUTC([2000, 1]).day(i);
53972                this._minWeekdaysParse[i] = this.weekdaysMin(
53973                    mom,
53974                    ''
53975                ).toLocaleLowerCase();
53976                this._shortWeekdaysParse[i] = this.weekdaysShort(
53977                    mom,
53978                    ''
53979                ).toLocaleLowerCase();
53980                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
53981            }
53982        }
53983
53984        if (strict) {
53985            if (format === 'dddd') {
53986                ii = indexOf.call(this._weekdaysParse, llc);
53987                return ii !== -1 ? ii : null;
53988            } else if (format === 'ddd') {
53989                ii = indexOf.call(this._shortWeekdaysParse, llc);
53990                return ii !== -1 ? ii : null;
53991            } else {
53992                ii = indexOf.call(this._minWeekdaysParse, llc);
53993                return ii !== -1 ? ii : null;
53994            }
53995        } else {
53996            if (format === 'dddd') {
53997                ii = indexOf.call(this._weekdaysParse, llc);
53998                if (ii !== -1) {
53999                    return ii;
54000                }
54001                ii = indexOf.call(this._shortWeekdaysParse, llc);
54002                if (ii !== -1) {
54003                    return ii;
54004                }
54005                ii = indexOf.call(this._minWeekdaysParse, llc);
54006                return ii !== -1 ? ii : null;
54007            } else if (format === 'ddd') {
54008                ii = indexOf.call(this._shortWeekdaysParse, llc);
54009                if (ii !== -1) {
54010                    return ii;
54011                }
54012                ii = indexOf.call(this._weekdaysParse, llc);
54013                if (ii !== -1) {
54014                    return ii;
54015                }
54016                ii = indexOf.call(this._minWeekdaysParse, llc);
54017                return ii !== -1 ? ii : null;
54018            } else {
54019                ii = indexOf.call(this._minWeekdaysParse, llc);
54020                if (ii !== -1) {
54021                    return ii;
54022                }
54023                ii = indexOf.call(this._weekdaysParse, llc);
54024                if (ii !== -1) {
54025                    return ii;
54026                }
54027                ii = indexOf.call(this._shortWeekdaysParse, llc);
54028                return ii !== -1 ? ii : null;
54029            }
54030        }
54031    }
54032
54033    function localeWeekdaysParse(weekdayName, format, strict) {
54034        var i, mom, regex;
54035
54036        if (this._weekdaysParseExact) {
54037            return handleStrictParse$1.call(this, weekdayName, format, strict);
54038        }
54039
54040        if (!this._weekdaysParse) {
54041            this._weekdaysParse = [];
54042            this._minWeekdaysParse = [];
54043            this._shortWeekdaysParse = [];
54044            this._fullWeekdaysParse = [];
54045        }
54046
54047        for (i = 0; i < 7; i++) {
54048            // make the regex if we don't have it already
54049
54050            mom = createUTC([2000, 1]).day(i);
54051            if (strict && !this._fullWeekdaysParse[i]) {
54052                this._fullWeekdaysParse[i] = new RegExp(
54053                    '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
54054                    'i'
54055                );
54056                this._shortWeekdaysParse[i] = new RegExp(
54057                    '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
54058                    'i'
54059                );
54060                this._minWeekdaysParse[i] = new RegExp(
54061                    '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
54062                    'i'
54063                );
54064            }
54065            if (!this._weekdaysParse[i]) {
54066                regex =
54067                    '^' +
54068                    this.weekdays(mom, '') +
54069                    '|^' +
54070                    this.weekdaysShort(mom, '') +
54071                    '|^' +
54072                    this.weekdaysMin(mom, '');
54073                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
54074            }
54075            // test the regex
54076            if (
54077                strict &&
54078                format === 'dddd' &&
54079                this._fullWeekdaysParse[i].test(weekdayName)
54080            ) {
54081                return i;
54082            } else if (
54083                strict &&
54084                format === 'ddd' &&
54085                this._shortWeekdaysParse[i].test(weekdayName)
54086            ) {
54087                return i;
54088            } else if (
54089                strict &&
54090                format === 'dd' &&
54091                this._minWeekdaysParse[i].test(weekdayName)
54092            ) {
54093                return i;
54094            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
54095                return i;
54096            }
54097        }
54098    }
54099
54100    // MOMENTS
54101
54102    function getSetDayOfWeek(input) {
54103        if (!this.isValid()) {
54104            return input != null ? this : NaN;
54105        }
54106
54107        var day = get(this, 'Day');
54108        if (input != null) {
54109            input = parseWeekday(input, this.localeData());
54110            return this.add(input - day, 'd');
54111        } else {
54112            return day;
54113        }
54114    }
54115
54116    function getSetLocaleDayOfWeek(input) {
54117        if (!this.isValid()) {
54118            return input != null ? this : NaN;
54119        }
54120        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
54121        return input == null ? weekday : this.add(input - weekday, 'd');
54122    }
54123
54124    function getSetISODayOfWeek(input) {
54125        if (!this.isValid()) {
54126            return input != null ? this : NaN;
54127        }
54128
54129        // behaves the same as moment#day except
54130        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
54131        // as a setter, sunday should belong to the previous week.
54132
54133        if (input != null) {
54134            var weekday = parseIsoWeekday(input, this.localeData());
54135            return this.day(this.day() % 7 ? weekday : weekday - 7);
54136        } else {
54137            return this.day() || 7;
54138        }
54139    }
54140
54141    function weekdaysRegex(isStrict) {
54142        if (this._weekdaysParseExact) {
54143            if (!hasOwnProp(this, '_weekdaysRegex')) {
54144                computeWeekdaysParse.call(this);
54145            }
54146            if (isStrict) {
54147                return this._weekdaysStrictRegex;
54148            } else {
54149                return this._weekdaysRegex;
54150            }
54151        } else {
54152            if (!hasOwnProp(this, '_weekdaysRegex')) {
54153                this._weekdaysRegex = defaultWeekdaysRegex;
54154            }
54155            return this._weekdaysStrictRegex && isStrict
54156                ? this._weekdaysStrictRegex
54157                : this._weekdaysRegex;
54158        }
54159    }
54160
54161    function weekdaysShortRegex(isStrict) {
54162        if (this._weekdaysParseExact) {
54163            if (!hasOwnProp(this, '_weekdaysRegex')) {
54164                computeWeekdaysParse.call(this);
54165            }
54166            if (isStrict) {
54167                return this._weekdaysShortStrictRegex;
54168            } else {
54169                return this._weekdaysShortRegex;
54170            }
54171        } else {
54172            if (!hasOwnProp(this, '_weekdaysShortRegex')) {
54173                this._weekdaysShortRegex = defaultWeekdaysShortRegex;
54174            }
54175            return this._weekdaysShortStrictRegex && isStrict
54176                ? this._weekdaysShortStrictRegex
54177                : this._weekdaysShortRegex;
54178        }
54179    }
54180
54181    function weekdaysMinRegex(isStrict) {
54182        if (this._weekdaysParseExact) {
54183            if (!hasOwnProp(this, '_weekdaysRegex')) {
54184                computeWeekdaysParse.call(this);
54185            }
54186            if (isStrict) {
54187                return this._weekdaysMinStrictRegex;
54188            } else {
54189                return this._weekdaysMinRegex;
54190            }
54191        } else {
54192            if (!hasOwnProp(this, '_weekdaysMinRegex')) {
54193                this._weekdaysMinRegex = defaultWeekdaysMinRegex;
54194            }
54195            return this._weekdaysMinStrictRegex && isStrict
54196                ? this._weekdaysMinStrictRegex
54197                : this._weekdaysMinRegex;
54198        }
54199    }
54200
54201    function computeWeekdaysParse() {
54202        function cmpLenRev(a, b) {
54203            return b.length - a.length;
54204        }
54205
54206        var minPieces = [],
54207            shortPieces = [],
54208            longPieces = [],
54209            mixedPieces = [],
54210            i,
54211            mom,
54212            minp,
54213            shortp,
54214            longp;
54215        for (i = 0; i < 7; i++) {
54216            // make the regex if we don't have it already
54217            mom = createUTC([2000, 1]).day(i);
54218            minp = regexEscape(this.weekdaysMin(mom, ''));
54219            shortp = regexEscape(this.weekdaysShort(mom, ''));
54220            longp = regexEscape(this.weekdays(mom, ''));
54221            minPieces.push(minp);
54222            shortPieces.push(shortp);
54223            longPieces.push(longp);
54224            mixedPieces.push(minp);
54225            mixedPieces.push(shortp);
54226            mixedPieces.push(longp);
54227        }
54228        // Sorting makes sure if one weekday (or abbr) is a prefix of another it
54229        // will match the longer piece.
54230        minPieces.sort(cmpLenRev);
54231        shortPieces.sort(cmpLenRev);
54232        longPieces.sort(cmpLenRev);
54233        mixedPieces.sort(cmpLenRev);
54234
54235        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
54236        this._weekdaysShortRegex = this._weekdaysRegex;
54237        this._weekdaysMinRegex = this._weekdaysRegex;
54238
54239        this._weekdaysStrictRegex = new RegExp(
54240            '^(' + longPieces.join('|') + ')',
54241            'i'
54242        );
54243        this._weekdaysShortStrictRegex = new RegExp(
54244            '^(' + shortPieces.join('|') + ')',
54245            'i'
54246        );
54247        this._weekdaysMinStrictRegex = new RegExp(
54248            '^(' + minPieces.join('|') + ')',
54249            'i'
54250        );
54251    }
54252
54253    // FORMATTING
54254
54255    function hFormat() {
54256        return this.hours() % 12 || 12;
54257    }
54258
54259    function kFormat() {
54260        return this.hours() || 24;
54261    }
54262
54263    addFormatToken('H', ['HH', 2], 0, 'hour');
54264    addFormatToken('h', ['hh', 2], 0, hFormat);
54265    addFormatToken('k', ['kk', 2], 0, kFormat);
54266
54267    addFormatToken('hmm', 0, 0, function () {
54268        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
54269    });
54270
54271    addFormatToken('hmmss', 0, 0, function () {
54272        return (
54273            '' +
54274            hFormat.apply(this) +
54275            zeroFill(this.minutes(), 2) +
54276            zeroFill(this.seconds(), 2)
54277        );
54278    });
54279
54280    addFormatToken('Hmm', 0, 0, function () {
54281        return '' + this.hours() + zeroFill(this.minutes(), 2);
54282    });
54283
54284    addFormatToken('Hmmss', 0, 0, function () {
54285        return (
54286            '' +
54287            this.hours() +
54288            zeroFill(this.minutes(), 2) +
54289            zeroFill(this.seconds(), 2)
54290        );
54291    });
54292
54293    function meridiem(token, lowercase) {
54294        addFormatToken(token, 0, 0, function () {
54295            return this.localeData().meridiem(
54296                this.hours(),
54297                this.minutes(),
54298                lowercase
54299            );
54300        });
54301    }
54302
54303    meridiem('a', true);
54304    meridiem('A', false);
54305
54306    // PARSING
54307
54308    function matchMeridiem(isStrict, locale) {
54309        return locale._meridiemParse;
54310    }
54311
54312    addRegexToken('a', matchMeridiem);
54313    addRegexToken('A', matchMeridiem);
54314    addRegexToken('H', match1to2, match1to2HasZero);
54315    addRegexToken('h', match1to2, match1to2NoLeadingZero);
54316    addRegexToken('k', match1to2, match1to2NoLeadingZero);
54317    addRegexToken('HH', match1to2, match2);
54318    addRegexToken('hh', match1to2, match2);
54319    addRegexToken('kk', match1to2, match2);
54320
54321    addRegexToken('hmm', match3to4);
54322    addRegexToken('hmmss', match5to6);
54323    addRegexToken('Hmm', match3to4);
54324    addRegexToken('Hmmss', match5to6);
54325
54326    addParseToken(['H', 'HH'], HOUR);
54327    addParseToken(['k', 'kk'], function (input, array, config) {
54328        var kInput = toInt(input);
54329        array[HOUR] = kInput === 24 ? 0 : kInput;
54330    });
54331    addParseToken(['a', 'A'], function (input, array, config) {
54332        config._isPm = config._locale.isPM(input);
54333        config._meridiem = input;
54334    });
54335    addParseToken(['h', 'hh'], function (input, array, config) {
54336        array[HOUR] = toInt(input);
54337        getParsingFlags(config).bigHour = true;
54338    });
54339    addParseToken('hmm', function (input, array, config) {
54340        var pos = input.length - 2;
54341        array[HOUR] = toInt(input.substr(0, pos));
54342        array[MINUTE] = toInt(input.substr(pos));
54343        getParsingFlags(config).bigHour = true;
54344    });
54345    addParseToken('hmmss', function (input, array, config) {
54346        var pos1 = input.length - 4,
54347            pos2 = input.length - 2;
54348        array[HOUR] = toInt(input.substr(0, pos1));
54349        array[MINUTE] = toInt(input.substr(pos1, 2));
54350        array[SECOND] = toInt(input.substr(pos2));
54351        getParsingFlags(config).bigHour = true;
54352    });
54353    addParseToken('Hmm', function (input, array, config) {
54354        var pos = input.length - 2;
54355        array[HOUR] = toInt(input.substr(0, pos));
54356        array[MINUTE] = toInt(input.substr(pos));
54357    });
54358    addParseToken('Hmmss', function (input, array, config) {
54359        var pos1 = input.length - 4,
54360            pos2 = input.length - 2;
54361        array[HOUR] = toInt(input.substr(0, pos1));
54362        array[MINUTE] = toInt(input.substr(pos1, 2));
54363        array[SECOND] = toInt(input.substr(pos2));
54364    });
54365
54366    // LOCALES
54367
54368    function localeIsPM(input) {
54369        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
54370        // Using charAt should be more compatible.
54371        return (input + '').toLowerCase().charAt(0) === 'p';
54372    }
54373
54374    var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
54375        // Setting the hour should keep the time, because the user explicitly
54376        // specified which hour they want. So trying to maintain the same hour (in
54377        // a new timezone) makes sense. Adding/subtracting hours does not follow
54378        // this rule.
54379        getSetHour = makeGetSet('Hours', true);
54380
54381    function localeMeridiem(hours, minutes, isLower) {
54382        if (hours > 11) {
54383            return isLower ? 'pm' : 'PM';
54384        } else {
54385            return isLower ? 'am' : 'AM';
54386        }
54387    }
54388
54389    var baseConfig = {
54390        calendar: defaultCalendar,
54391        longDateFormat: defaultLongDateFormat,
54392        invalidDate: defaultInvalidDate,
54393        ordinal: defaultOrdinal,
54394        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
54395        relativeTime: defaultRelativeTime,
54396
54397        months: defaultLocaleMonths,
54398        monthsShort: defaultLocaleMonthsShort,
54399
54400        week: defaultLocaleWeek,
54401
54402        weekdays: defaultLocaleWeekdays,
54403        weekdaysMin: defaultLocaleWeekdaysMin,
54404        weekdaysShort: defaultLocaleWeekdaysShort,
54405
54406        meridiemParse: defaultLocaleMeridiemParse,
54407    };
54408
54409    // internal storage for locale config files
54410    var locales = {},
54411        localeFamilies = {},
54412        globalLocale;
54413
54414    function commonPrefix(arr1, arr2) {
54415        var i,
54416            minl = Math.min(arr1.length, arr2.length);
54417        for (i = 0; i < minl; i += 1) {
54418            if (arr1[i] !== arr2[i]) {
54419                return i;
54420            }
54421        }
54422        return minl;
54423    }
54424
54425    function normalizeLocale(key) {
54426        return key ? key.toLowerCase().replace('_', '-') : key;
54427    }
54428
54429    // pick the locale from the array
54430    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
54431    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
54432    function chooseLocale(names) {
54433        var i = 0,
54434            j,
54435            next,
54436            locale,
54437            split;
54438
54439        while (i < names.length) {
54440            split = normalizeLocale(names[i]).split('-');
54441            j = split.length;
54442            next = normalizeLocale(names[i + 1]);
54443            next = next ? next.split('-') : null;
54444            while (j > 0) {
54445                locale = loadLocale(split.slice(0, j).join('-'));
54446                if (locale) {
54447                    return locale;
54448                }
54449                if (
54450                    next &&
54451                    next.length >= j &&
54452                    commonPrefix(split, next) >= j - 1
54453                ) {
54454                    //the next array item is better than a shallower substring of this one
54455                    break;
54456                }
54457                j--;
54458            }
54459            i++;
54460        }
54461        return globalLocale;
54462    }
54463
54464    function isLocaleNameSane(name) {
54465        // Prevent names that look like filesystem paths, i.e contain '/' or '\'
54466        // Ensure name is available and function returns boolean
54467        return !!(name && name.match('^[^/\\\\]*$'));
54468    }
54469
54470    function loadLocale(name) {
54471        var oldLocale = null,
54472            aliasedRequire;
54473        // TODO: Find a better way to register and load all the locales in Node
54474        if (
54475            locales[name] === undefined &&
54476            typeof module !== 'undefined' &&
54477            module &&
54478            module.exports &&
54479            isLocaleNameSane(name)
54480        ) {
54481            try {
54482                oldLocale = globalLocale._abbr;
54483                aliasedRequire = require;
54484                __webpack_require__("./node_modules/moment/locale sync recursive ^\\.\\/.*$")("./" + name);
54485                getSetGlobalLocale(oldLocale);
54486            } catch (e) {
54487                // mark as not found to avoid repeating expensive file require call causing high CPU
54488                // when trying to find en-US, en_US, en-us for every format call
54489                locales[name] = null; // null means not found
54490            }
54491        }
54492        return locales[name];
54493    }
54494
54495    // This function will load locale and then set the global locale.  If
54496    // no arguments are passed in, it will simply return the current global
54497    // locale key.
54498    function getSetGlobalLocale(key, values) {
54499        var data;
54500        if (key) {
54501            if (isUndefined(values)) {
54502                data = getLocale(key);
54503            } else {
54504                data = defineLocale(key, values);
54505            }
54506
54507            if (data) {
54508                // moment.duration._locale = moment._locale = data;
54509                globalLocale = data;
54510            } else {
54511                if (typeof console !== 'undefined' && console.warn) {
54512                    //warn user if arguments are passed but the locale could not be set
54513                    console.warn(
54514                        'Locale ' + key + ' not found. Did you forget to load it?'
54515                    );
54516                }
54517            }
54518        }
54519
54520        return globalLocale._abbr;
54521    }
54522
54523    function defineLocale(name, config) {
54524        if (config !== null) {
54525            var locale,
54526                parentConfig = baseConfig;
54527            config.abbr = name;
54528            if (locales[name] != null) {
54529                deprecateSimple(
54530                    'defineLocaleOverride',
54531                    'use moment.updateLocale(localeName, config) to change ' +
54532                        'an existing locale. moment.defineLocale(localeName, ' +
54533                        'config) should only be used for creating a new locale ' +
54534                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
54535                );
54536                parentConfig = locales[name]._config;
54537            } else if (config.parentLocale != null) {
54538                if (locales[config.parentLocale] != null) {
54539                    parentConfig = locales[config.parentLocale]._config;
54540                } else {
54541                    locale = loadLocale(config.parentLocale);
54542                    if (locale != null) {
54543                        parentConfig = locale._config;
54544                    } else {
54545                        if (!localeFamilies[config.parentLocale]) {
54546                            localeFamilies[config.parentLocale] = [];
54547                        }
54548                        localeFamilies[config.parentLocale].push({
54549                            name: name,
54550                            config: config,
54551                        });
54552                        return null;
54553                    }
54554                }
54555            }
54556            locales[name] = new Locale(mergeConfigs(parentConfig, config));
54557
54558            if (localeFamilies[name]) {
54559                localeFamilies[name].forEach(function (x) {
54560                    defineLocale(x.name, x.config);
54561                });
54562            }
54563
54564            // backwards compat for now: also set the locale
54565            // make sure we set the locale AFTER all child locales have been
54566            // created, so we won't end up with the child locale set.
54567            getSetGlobalLocale(name);
54568
54569            return locales[name];
54570        } else {
54571            // useful for testing
54572            delete locales[name];
54573            return null;
54574        }
54575    }
54576
54577    function updateLocale(name, config) {
54578        if (config != null) {
54579            var locale,
54580                tmpLocale,
54581                parentConfig = baseConfig;
54582
54583            if (locales[name] != null && locales[name].parentLocale != null) {
54584                // Update existing child locale in-place to avoid memory-leaks
54585                locales[name].set(mergeConfigs(locales[name]._config, config));
54586            } else {
54587                // MERGE
54588                tmpLocale = loadLocale(name);
54589                if (tmpLocale != null) {
54590                    parentConfig = tmpLocale._config;
54591                }
54592                config = mergeConfigs(parentConfig, config);
54593                if (tmpLocale == null) {
54594                    // updateLocale is called for creating a new locale
54595                    // Set abbr so it will have a name (getters return
54596                    // undefined otherwise).
54597                    config.abbr = name;
54598                }
54599                locale = new Locale(config);
54600                locale.parentLocale = locales[name];
54601                locales[name] = locale;
54602            }
54603
54604            // backwards compat for now: also set the locale
54605            getSetGlobalLocale(name);
54606        } else {
54607            // pass null for config to unupdate, useful for tests
54608            if (locales[name] != null) {
54609                if (locales[name].parentLocale != null) {
54610                    locales[name] = locales[name].parentLocale;
54611                    if (name === getSetGlobalLocale()) {
54612                        getSetGlobalLocale(name);
54613                    }
54614                } else if (locales[name] != null) {
54615                    delete locales[name];
54616                }
54617            }
54618        }
54619        return locales[name];
54620    }
54621
54622    // returns locale data
54623    function getLocale(key) {
54624        var locale;
54625
54626        if (key && key._locale && key._locale._abbr) {
54627            key = key._locale._abbr;
54628        }
54629
54630        if (!key) {
54631            return globalLocale;
54632        }
54633
54634        if (!isArray(key)) {
54635            //short-circuit everything else
54636            locale = loadLocale(key);
54637            if (locale) {
54638                return locale;
54639            }
54640            key = [key];
54641        }
54642
54643        return chooseLocale(key);
54644    }
54645
54646    function listLocales() {
54647        return keys(locales);
54648    }
54649
54650    function checkOverflow(m) {
54651        var overflow,
54652            a = m._a;
54653
54654        if (a && getParsingFlags(m).overflow === -2) {
54655            overflow =
54656                a[MONTH] < 0 || a[MONTH] > 11
54657                    ? MONTH
54658                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
54659                      ? DATE
54660                      : a[HOUR] < 0 ||
54661                          a[HOUR] > 24 ||
54662                          (a[HOUR] === 24 &&
54663                              (a[MINUTE] !== 0 ||
54664                                  a[SECOND] !== 0 ||
54665                                  a[MILLISECOND] !== 0))
54666                        ? HOUR
54667                        : a[MINUTE] < 0 || a[MINUTE] > 59
54668                          ? MINUTE
54669                          : a[SECOND] < 0 || a[SECOND] > 59
54670                            ? SECOND
54671                            : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
54672                              ? MILLISECOND
54673                              : -1;
54674
54675            if (
54676                getParsingFlags(m)._overflowDayOfYear &&
54677                (overflow < YEAR || overflow > DATE)
54678            ) {
54679                overflow = DATE;
54680            }
54681            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
54682                overflow = WEEK;
54683            }
54684            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
54685                overflow = WEEKDAY;
54686            }
54687
54688            getParsingFlags(m).overflow = overflow;
54689        }
54690
54691        return m;
54692    }
54693
54694    // iso 8601 regex
54695    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
54696    var extendedIsoRegex =
54697            /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
54698        basicIsoRegex =
54699            /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
54700        tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
54701        isoDates = [
54702            ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
54703            ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
54704            ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
54705            ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
54706            ['YYYY-DDD', /\d{4}-\d{3}/],
54707            ['YYYY-MM', /\d{4}-\d\d/, false],
54708            ['YYYYYYMMDD', /[+-]\d{10}/],
54709            ['YYYYMMDD', /\d{8}/],
54710            ['GGGG[W]WWE', /\d{4}W\d{3}/],
54711            ['GGGG[W]WW', /\d{4}W\d{2}/, false],
54712            ['YYYYDDD', /\d{7}/],
54713            ['YYYYMM', /\d{6}/, false],
54714            ['YYYY', /\d{4}/, false],
54715        ],
54716        // iso time formats and regexes
54717        isoTimes = [
54718            ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
54719            ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
54720            ['HH:mm:ss', /\d\d:\d\d:\d\d/],
54721            ['HH:mm', /\d\d:\d\d/],
54722            ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
54723            ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
54724            ['HHmmss', /\d\d\d\d\d\d/],
54725            ['HHmm', /\d\d\d\d/],
54726            ['HH', /\d\d/],
54727        ],
54728        aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
54729        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
54730        rfc2822 =
54731            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
54732        obsOffsets = {
54733            UT: 0,
54734            GMT: 0,
54735            EDT: -4 * 60,
54736            EST: -5 * 60,
54737            CDT: -5 * 60,
54738            CST: -6 * 60,
54739            MDT: -6 * 60,
54740            MST: -7 * 60,
54741            PDT: -7 * 60,
54742            PST: -8 * 60,
54743        };
54744
54745    // date from iso format
54746    function configFromISO(config) {
54747        var i,
54748            l,
54749            string = config._i,
54750            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
54751            allowTime,
54752            dateFormat,
54753            timeFormat,
54754            tzFormat,
54755            isoDatesLen = isoDates.length,
54756            isoTimesLen = isoTimes.length;
54757
54758        if (match) {
54759            getParsingFlags(config).iso = true;
54760            for (i = 0, l = isoDatesLen; i < l; i++) {
54761                if (isoDates[i][1].exec(match[1])) {
54762                    dateFormat = isoDates[i][0];
54763                    allowTime = isoDates[i][2] !== false;
54764                    break;
54765                }
54766            }
54767            if (dateFormat == null) {
54768                config._isValid = false;
54769                return;
54770            }
54771            if (match[3]) {
54772                for (i = 0, l = isoTimesLen; i < l; i++) {
54773                    if (isoTimes[i][1].exec(match[3])) {
54774                        // match[2] should be 'T' or space
54775                        timeFormat = (match[2] || ' ') + isoTimes[i][0];
54776                        break;
54777                    }
54778                }
54779                if (timeFormat == null) {
54780                    config._isValid = false;
54781                    return;
54782                }
54783            }
54784            if (!allowTime && timeFormat != null) {
54785                config._isValid = false;
54786                return;
54787            }
54788            if (match[4]) {
54789                if (tzRegex.exec(match[4])) {
54790                    tzFormat = 'Z';
54791                } else {
54792                    config._isValid = false;
54793                    return;
54794                }
54795            }
54796            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
54797            configFromStringAndFormat(config);
54798        } else {
54799            config._isValid = false;
54800        }
54801    }
54802
54803    function extractFromRFC2822Strings(
54804        yearStr,
54805        monthStr,
54806        dayStr,
54807        hourStr,
54808        minuteStr,
54809        secondStr
54810    ) {
54811        var result = [
54812            untruncateYear(yearStr),
54813            defaultLocaleMonthsShort.indexOf(monthStr),
54814            parseInt(dayStr, 10),
54815            parseInt(hourStr, 10),
54816            parseInt(minuteStr, 10),
54817        ];
54818
54819        if (secondStr) {
54820            result.push(parseInt(secondStr, 10));
54821        }
54822
54823        return result;
54824    }
54825
54826    function untruncateYear(yearStr) {
54827        var year = parseInt(yearStr, 10);
54828        if (year <= 49) {
54829            return 2000 + year;
54830        } else if (year <= 999) {
54831            return 1900 + year;
54832        }
54833        return year;
54834    }
54835
54836    function preprocessRFC2822(s) {
54837        // Remove comments and folding whitespace and replace multiple-spaces with a single space
54838        return s
54839            .replace(/\([^()]*\)|[\n\t]/g, ' ')
54840            .replace(/(\s\s+)/g, ' ')
54841            .replace(/^\s\s*/, '')
54842            .replace(/\s\s*$/, '');
54843    }
54844
54845    function checkWeekday(weekdayStr, parsedInput, config) {
54846        if (weekdayStr) {
54847            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
54848            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
54849                weekdayActual = new Date(
54850                    parsedInput[0],
54851                    parsedInput[1],
54852                    parsedInput[2]
54853                ).getDay();
54854            if (weekdayProvided !== weekdayActual) {
54855                getParsingFlags(config).weekdayMismatch = true;
54856                config._isValid = false;
54857                return false;
54858            }
54859        }
54860        return true;
54861    }
54862
54863    function calculateOffset(obsOffset, militaryOffset, numOffset) {
54864        if (obsOffset) {
54865            return obsOffsets[obsOffset];
54866        } else if (militaryOffset) {
54867            // the only allowed military tz is Z
54868            return 0;
54869        } else {
54870            var hm = parseInt(numOffset, 10),
54871                m = hm % 100,
54872                h = (hm - m) / 100;
54873            return h * 60 + m;
54874        }
54875    }
54876
54877    // date and time from ref 2822 format
54878    function configFromRFC2822(config) {
54879        var match = rfc2822.exec(preprocessRFC2822(config._i)),
54880            parsedArray;
54881        if (match) {
54882            parsedArray = extractFromRFC2822Strings(
54883                match[4],
54884                match[3],
54885                match[2],
54886                match[5],
54887                match[6],
54888                match[7]
54889            );
54890            if (!checkWeekday(match[1], parsedArray, config)) {
54891                return;
54892            }
54893
54894            config._a = parsedArray;
54895            config._tzm = calculateOffset(match[8], match[9], match[10]);
54896
54897            config._d = createUTCDate.apply(null, config._a);
54898            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
54899
54900            getParsingFlags(config).rfc2822 = true;
54901        } else {
54902            config._isValid = false;
54903        }
54904    }
54905
54906    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
54907    function configFromString(config) {
54908        var matched = aspNetJsonRegex.exec(config._i);
54909        if (matched !== null) {
54910            config._d = new Date(+matched[1]);
54911            return;
54912        }
54913
54914        configFromISO(config);
54915        if (config._isValid === false) {
54916            delete config._isValid;
54917        } else {
54918            return;
54919        }
54920
54921        configFromRFC2822(config);
54922        if (config._isValid === false) {
54923            delete config._isValid;
54924        } else {
54925            return;
54926        }
54927
54928        if (config._strict) {
54929            config._isValid = false;
54930        } else {
54931            // Final attempt, use Input Fallback
54932            hooks.createFromInputFallback(config);
54933        }
54934    }
54935
54936    hooks.createFromInputFallback = deprecate(
54937        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
54938            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
54939            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',
54940        function (config) {
54941            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
54942        }
54943    );
54944
54945    // Pick the first defined of two or three arguments.
54946    function defaults(a, b, c) {
54947        if (a != null) {
54948            return a;
54949        }
54950        if (b != null) {
54951            return b;
54952        }
54953        return c;
54954    }
54955
54956    function currentDateArray(config) {
54957        // hooks is actually the exported moment object
54958        var nowValue = new Date(hooks.now());
54959        if (config._useUTC) {
54960            return [
54961                nowValue.getUTCFullYear(),
54962                nowValue.getUTCMonth(),
54963                nowValue.getUTCDate(),
54964            ];
54965        }
54966        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
54967    }
54968
54969    // convert an array to a date.
54970    // the array should mirror the parameters below
54971    // note: all values past the year are optional and will default to the lowest possible value.
54972    // [year, month, day , hour, minute, second, millisecond]
54973    function configFromArray(config) {
54974        var i,
54975            date,
54976            input = [],
54977            currentDate,
54978            expectedWeekday,
54979            yearToUse;
54980
54981        if (config._d) {
54982            return;
54983        }
54984
54985        currentDate = currentDateArray(config);
54986
54987        //compute day of the year from weeks and weekdays
54988        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
54989            dayOfYearFromWeekInfo(config);
54990        }
54991
54992        //if the day of the year is set, figure out what it is
54993        if (config._dayOfYear != null) {
54994            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
54995
54996            if (
54997                config._dayOfYear > daysInYear(yearToUse) ||
54998                config._dayOfYear === 0
54999            ) {
55000                getParsingFlags(config)._overflowDayOfYear = true;
55001            }
55002
55003            date = createUTCDate(yearToUse, 0, config._dayOfYear);
55004            config._a[MONTH] = date.getUTCMonth();
55005            config._a[DATE] = date.getUTCDate();
55006        }
55007
55008        // Default to current date.
55009        // * if no year, month, day of month are given, default to today
55010        // * if day of month is given, default month and year
55011        // * if month is given, default only year
55012        // * if year is given, don't default anything
55013        for (i = 0; i < 3 && config._a[i] == null; ++i) {
55014            config._a[i] = input[i] = currentDate[i];
55015        }
55016
55017        // Zero out whatever was not defaulted, including time
55018        for (; i < 7; i++) {
55019            config._a[i] = input[i] =
55020                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
55021        }
55022
55023        // Check for 24:00:00.000
55024        if (
55025            config._a[HOUR] === 24 &&
55026            config._a[MINUTE] === 0 &&
55027            config._a[SECOND] === 0 &&
55028            config._a[MILLISECOND] === 0
55029        ) {
55030            config._nextDay = true;
55031            config._a[HOUR] = 0;
55032        }
55033
55034        config._d = (config._useUTC ? createUTCDate : createDate).apply(
55035            null,
55036            input
55037        );
55038        expectedWeekday = config._useUTC
55039            ? config._d.getUTCDay()
55040            : config._d.getDay();
55041
55042        // Apply timezone offset from input. The actual utcOffset can be changed
55043        // with parseZone.
55044        if (config._tzm != null) {
55045            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
55046        }
55047
55048        if (config._nextDay) {
55049            config._a[HOUR] = 24;
55050        }
55051
55052        // check for mismatching day of week
55053        if (
55054            config._w &&
55055            typeof config._w.d !== 'undefined' &&
55056            config._w.d !== expectedWeekday
55057        ) {
55058            getParsingFlags(config).weekdayMismatch = true;
55059        }
55060    }
55061
55062    function dayOfYearFromWeekInfo(config) {
55063        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
55064
55065        w = config._w;
55066        if (w.GG != null || w.W != null || w.E != null) {
55067            dow = 1;
55068            doy = 4;
55069
55070            // TODO: We need to take the current isoWeekYear, but that depends on
55071            // how we interpret now (local, utc, fixed offset). So create
55072            // a now version of current config (take local/utc/offset flags, and
55073            // create now).
55074            weekYear = defaults(
55075                w.GG,
55076                config._a[YEAR],
55077                weekOfYear(createLocal(), 1, 4).year
55078            );
55079            week = defaults(w.W, 1);
55080            weekday = defaults(w.E, 1);
55081            if (weekday < 1 || weekday > 7) {
55082                weekdayOverflow = true;
55083            }
55084        } else {
55085            dow = config._locale._week.dow;
55086            doy = config._locale._week.doy;
55087
55088            curWeek = weekOfYear(createLocal(), dow, doy);
55089
55090            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
55091
55092            // Default to current week.
55093            week = defaults(w.w, curWeek.week);
55094
55095            if (w.d != null) {
55096                // weekday -- low day numbers are considered next week
55097                weekday = w.d;
55098                if (weekday < 0 || weekday > 6) {
55099                    weekdayOverflow = true;
55100                }
55101            } else if (w.e != null) {
55102                // local weekday -- counting starts from beginning of week
55103                weekday = w.e + dow;
55104                if (w.e < 0 || w.e > 6) {
55105                    weekdayOverflow = true;
55106                }
55107            } else {
55108                // default to beginning of week
55109                weekday = dow;
55110            }
55111        }
55112        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
55113            getParsingFlags(config)._overflowWeeks = true;
55114        } else if (weekdayOverflow != null) {
55115            getParsingFlags(config)._overflowWeekday = true;
55116        } else {
55117            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
55118            config._a[YEAR] = temp.year;
55119            config._dayOfYear = temp.dayOfYear;
55120        }
55121    }
55122
55123    // constant that refers to the ISO standard
55124    hooks.ISO_8601 = function () {};
55125
55126    // constant that refers to the RFC 2822 form
55127    hooks.RFC_2822 = function () {};
55128
55129    // date from string and format string
55130    function configFromStringAndFormat(config) {
55131        // TODO: Move this to another part of the creation flow to prevent circular deps
55132        if (config._f === hooks.ISO_8601) {
55133            configFromISO(config);
55134            return;
55135        }
55136        if (config._f === hooks.RFC_2822) {
55137            configFromRFC2822(config);
55138            return;
55139        }
55140        config._a = [];
55141        getParsingFlags(config).empty = true;
55142
55143        // This array is used to make a Date, either with `new Date` or `Date.UTC`
55144        var string = '' + config._i,
55145            i,
55146            parsedInput,
55147            tokens,
55148            token,
55149            skipped,
55150            stringLength = string.length,
55151            totalParsedInputLength = 0,
55152            era,
55153            tokenLen;
55154
55155        tokens =
55156            expandFormat(config._f, config._locale).match(formattingTokens) || [];
55157        tokenLen = tokens.length;
55158        for (i = 0; i < tokenLen; i++) {
55159            token = tokens[i];
55160            parsedInput = (string.match(getParseRegexForToken(token, config)) ||
55161                [])[0];
55162            if (parsedInput) {
55163                skipped = string.substr(0, string.indexOf(parsedInput));
55164                if (skipped.length > 0) {
55165                    getParsingFlags(config).unusedInput.push(skipped);
55166                }
55167                string = string.slice(
55168                    string.indexOf(parsedInput) + parsedInput.length
55169                );
55170                totalParsedInputLength += parsedInput.length;
55171            }
55172            // don't parse if it's not a known token
55173            if (formatTokenFunctions[token]) {
55174                if (parsedInput) {
55175                    getParsingFlags(config).empty = false;
55176                } else {
55177                    getParsingFlags(config).unusedTokens.push(token);
55178                }
55179                addTimeToArrayFromToken(token, parsedInput, config);
55180            } else if (config._strict && !parsedInput) {
55181                getParsingFlags(config).unusedTokens.push(token);
55182            }
55183        }
55184
55185        // add remaining unparsed input length to the string
55186        getParsingFlags(config).charsLeftOver =
55187            stringLength - totalParsedInputLength;
55188        if (string.length > 0) {
55189            getParsingFlags(config).unusedInput.push(string);
55190        }
55191
55192        // clear _12h flag if hour is <= 12
55193        if (
55194            config._a[HOUR] <= 12 &&
55195            getParsingFlags(config).bigHour === true &&
55196            config._a[HOUR] > 0
55197        ) {
55198            getParsingFlags(config).bigHour = undefined;
55199        }
55200
55201        getParsingFlags(config).parsedDateParts = config._a.slice(0);
55202        getParsingFlags(config).meridiem = config._meridiem;
55203        // handle meridiem
55204        config._a[HOUR] = meridiemFixWrap(
55205            config._locale,
55206            config._a[HOUR],
55207            config._meridiem
55208        );
55209
55210        // handle era
55211        era = getParsingFlags(config).era;
55212        if (era !== null) {
55213            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
55214        }
55215
55216        configFromArray(config);
55217        checkOverflow(config);
55218    }
55219
55220    function meridiemFixWrap(locale, hour, meridiem) {
55221        var isPm;
55222
55223        if (meridiem == null) {
55224            // nothing to do
55225            return hour;
55226        }
55227        if (locale.meridiemHour != null) {
55228            return locale.meridiemHour(hour, meridiem);
55229        } else if (locale.isPM != null) {
55230            // Fallback
55231            isPm = locale.isPM(meridiem);
55232            if (isPm && hour < 12) {
55233                hour += 12;
55234            }
55235            if (!isPm && hour === 12) {
55236                hour = 0;
55237            }
55238            return hour;
55239        } else {
55240            // this is not supposed to happen
55241            return hour;
55242        }
55243    }
55244
55245    // date from string and array of format strings
55246    function configFromStringAndArray(config) {
55247        var tempConfig,
55248            bestMoment,
55249            scoreToBeat,
55250            i,
55251            currentScore,
55252            validFormatFound,
55253            bestFormatIsValid = false,
55254            configfLen = config._f.length;
55255
55256        if (configfLen === 0) {
55257            getParsingFlags(config).invalidFormat = true;
55258            config._d = new Date(NaN);
55259            return;
55260        }
55261
55262        for (i = 0; i < configfLen; i++) {
55263            currentScore = 0;
55264            validFormatFound = false;
55265            tempConfig = copyConfig({}, config);
55266            if (config._useUTC != null) {
55267                tempConfig._useUTC = config._useUTC;
55268            }
55269            tempConfig._f = config._f[i];
55270            configFromStringAndFormat(tempConfig);
55271
55272            if (isValid(tempConfig)) {
55273                validFormatFound = true;
55274            }
55275
55276            // if there is any input that was not parsed add a penalty for that format
55277            currentScore += getParsingFlags(tempConfig).charsLeftOver;
55278
55279            //or tokens
55280            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
55281
55282            getParsingFlags(tempConfig).score = currentScore;
55283
55284            if (!bestFormatIsValid) {
55285                if (
55286                    scoreToBeat == null ||
55287                    currentScore < scoreToBeat ||
55288                    validFormatFound
55289                ) {
55290                    scoreToBeat = currentScore;
55291                    bestMoment = tempConfig;
55292                    if (validFormatFound) {
55293                        bestFormatIsValid = true;
55294                    }
55295                }
55296            } else {
55297                if (currentScore < scoreToBeat) {
55298                    scoreToBeat = currentScore;
55299                    bestMoment = tempConfig;
55300                }
55301            }
55302        }
55303
55304        extend(config, bestMoment || tempConfig);
55305    }
55306
55307    function configFromObject(config) {
55308        if (config._d) {
55309            return;
55310        }
55311
55312        var i = normalizeObjectUnits(config._i),
55313            dayOrDate = i.day === undefined ? i.date : i.day;
55314        config._a = map(
55315            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
55316            function (obj) {
55317                return obj && parseInt(obj, 10);
55318            }
55319        );
55320
55321        configFromArray(config);
55322    }
55323
55324    function createFromConfig(config) {
55325        var res = new Moment(checkOverflow(prepareConfig(config)));
55326        if (res._nextDay) {
55327            // Adding is smart enough around DST
55328            res.add(1, 'd');
55329            res._nextDay = undefined;
55330        }
55331
55332        return res;
55333    }
55334
55335    function prepareConfig(config) {
55336        var input = config._i,
55337            format = config._f;
55338
55339        config._locale = config._locale || getLocale(config._l);
55340
55341        if (input === null || (format === undefined && input === '')) {
55342            return createInvalid({ nullInput: true });
55343        }
55344
55345        if (typeof input === 'string') {
55346            config._i = input = config._locale.preparse(input);
55347        }
55348
55349        if (isMoment(input)) {
55350            return new Moment(checkOverflow(input));
55351        } else if (isDate(input)) {
55352            config._d = input;
55353        } else if (isArray(format)) {
55354            configFromStringAndArray(config);
55355        } else if (format) {
55356            configFromStringAndFormat(config);
55357        } else {
55358            configFromInput(config);
55359        }
55360
55361        if (!isValid(config)) {
55362            config._d = null;
55363        }
55364
55365        return config;
55366    }
55367
55368    function configFromInput(config) {
55369        var input = config._i;
55370        if (isUndefined(input)) {
55371            config._d = new Date(hooks.now());
55372        } else if (isDate(input)) {
55373            config._d = new Date(input.valueOf());
55374        } else if (typeof input === 'string') {
55375            configFromString(config);
55376        } else if (isArray(input)) {
55377            config._a = map(input.slice(0), function (obj) {
55378                return parseInt(obj, 10);
55379            });
55380            configFromArray(config);
55381        } else if (isObject(input)) {
55382            configFromObject(config);
55383        } else if (isNumber(input)) {
55384            // from milliseconds
55385            config._d = new Date(input);
55386        } else {
55387            hooks.createFromInputFallback(config);
55388        }
55389    }
55390
55391    function createLocalOrUTC(input, format, locale, strict, isUTC) {
55392        var c = {};
55393
55394        if (format === true || format === false) {
55395            strict = format;
55396            format = undefined;
55397        }
55398
55399        if (locale === true || locale === false) {
55400            strict = locale;
55401            locale = undefined;
55402        }
55403
55404        if (
55405            (isObject(input) && isObjectEmpty(input)) ||
55406            (isArray(input) && input.length === 0)
55407        ) {
55408            input = undefined;
55409        }
55410        // object construction must be done this way.
55411        // https://github.com/moment/moment/issues/1423
55412        c._isAMomentObject = true;
55413        c._useUTC = c._isUTC = isUTC;
55414        c._l = locale;
55415        c._i = input;
55416        c._f = format;
55417        c._strict = strict;
55418
55419        return createFromConfig(c);
55420    }
55421
55422    function createLocal(input, format, locale, strict) {
55423        return createLocalOrUTC(input, format, locale, strict, false);
55424    }
55425
55426    var prototypeMin = deprecate(
55427            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
55428            function () {
55429                var other = createLocal.apply(null, arguments);
55430                if (this.isValid() && other.isValid()) {
55431                    return other < this ? this : other;
55432                } else {
55433                    return createInvalid();
55434                }
55435            }
55436        ),
55437        prototypeMax = deprecate(
55438            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
55439            function () {
55440                var other = createLocal.apply(null, arguments);
55441                if (this.isValid() && other.isValid()) {
55442                    return other > this ? this : other;
55443                } else {
55444                    return createInvalid();
55445                }
55446            }
55447        );
55448
55449    // Pick a moment m from moments so that m[fn](other) is true for all
55450    // other. This relies on the function fn to be transitive.
55451    //
55452    // moments should either be an array of moment objects or an array, whose
55453    // first element is an array of moment objects.
55454    function pickBy(fn, moments) {
55455        var res, i;
55456        if (moments.length === 1 && isArray(moments[0])) {
55457            moments = moments[0];
55458        }
55459        if (!moments.length) {
55460            return createLocal();
55461        }
55462        res = moments[0];
55463        for (i = 1; i < moments.length; ++i) {
55464            if (!moments[i].isValid() || moments[i][fn](res)) {
55465                res = moments[i];
55466            }
55467        }
55468        return res;
55469    }
55470
55471    // TODO: Use [].sort instead?
55472    function min() {
55473        var args = [].slice.call(arguments, 0);
55474
55475        return pickBy('isBefore', args);
55476    }
55477
55478    function max() {
55479        var args = [].slice.call(arguments, 0);
55480
55481        return pickBy('isAfter', args);
55482    }
55483
55484    var now = function () {
55485        return Date.now ? Date.now() : +new Date();
55486    };
55487
55488    var ordering = [
55489        'year',
55490        'quarter',
55491        'month',
55492        'week',
55493        'day',
55494        'hour',
55495        'minute',
55496        'second',
55497        'millisecond',
55498    ];
55499
55500    function isDurationValid(m) {
55501        var key,
55502            unitHasDecimal = false,
55503            i,
55504            orderLen = ordering.length;
55505        for (key in m) {
55506            if (
55507                hasOwnProp(m, key) &&
55508                !(
55509                    indexOf.call(ordering, key) !== -1 &&
55510                    (m[key] == null || !isNaN(m[key]))
55511                )
55512            ) {
55513                return false;
55514            }
55515        }
55516
55517        for (i = 0; i < orderLen; ++i) {
55518            if (m[ordering[i]]) {
55519                if (unitHasDecimal) {
55520                    return false; // only allow non-integers for smallest unit
55521                }
55522                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
55523                    unitHasDecimal = true;
55524                }
55525            }
55526        }
55527
55528        return true;
55529    }
55530
55531    function isValid$1() {
55532        return this._isValid;
55533    }
55534
55535    function createInvalid$1() {
55536        return createDuration(NaN);
55537    }
55538
55539    function Duration(duration) {
55540        var normalizedInput = normalizeObjectUnits(duration),
55541            years = normalizedInput.year || 0,
55542            quarters = normalizedInput.quarter || 0,
55543            months = normalizedInput.month || 0,
55544            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
55545            days = normalizedInput.day || 0,
55546            hours = normalizedInput.hour || 0,
55547            minutes = normalizedInput.minute || 0,
55548            seconds = normalizedInput.second || 0,
55549            milliseconds = normalizedInput.millisecond || 0;
55550
55551        this._isValid = isDurationValid(normalizedInput);
55552
55553        // representation for dateAddRemove
55554        this._milliseconds =
55555            +milliseconds +
55556            seconds * 1e3 + // 1000
55557            minutes * 6e4 + // 1000 * 60
55558            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
55559        // Because of dateAddRemove treats 24 hours as different from a
55560        // day when working around DST, we need to store them separately
55561        this._days = +days + weeks * 7;
55562        // It is impossible to translate months into days without knowing
55563        // which months you are are talking about, so we have to store
55564        // it separately.
55565        this._months = +months + quarters * 3 + years * 12;
55566
55567        this._data = {};
55568
55569        this._locale = getLocale();
55570
55571        this._bubble();
55572    }
55573
55574    function isDuration(obj) {
55575        return obj instanceof Duration;
55576    }
55577
55578    function absRound(number) {
55579        if (number < 0) {
55580            return Math.round(-1 * number) * -1;
55581        } else {
55582            return Math.round(number);
55583        }
55584    }
55585
55586    // compare two arrays, return the number of differences
55587    function compareArrays(array1, array2, dontConvert) {
55588        var len = Math.min(array1.length, array2.length),
55589            lengthDiff = Math.abs(array1.length - array2.length),
55590            diffs = 0,
55591            i;
55592        for (i = 0; i < len; i++) {
55593            if (
55594                (dontConvert && array1[i] !== array2[i]) ||
55595                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
55596            ) {
55597                diffs++;
55598            }
55599        }
55600        return diffs + lengthDiff;
55601    }
55602
55603    // FORMATTING
55604
55605    function offset(token, separator) {
55606        addFormatToken(token, 0, 0, function () {
55607            var offset = this.utcOffset(),
55608                sign = '+';
55609            if (offset < 0) {
55610                offset = -offset;
55611                sign = '-';
55612            }
55613            return (
55614                sign +
55615                zeroFill(~~(offset / 60), 2) +
55616                separator +
55617                zeroFill(~~offset % 60, 2)
55618            );
55619        });
55620    }
55621
55622    offset('Z', ':');
55623    offset('ZZ', '');
55624
55625    // PARSING
55626
55627    addRegexToken('Z', matchShortOffset);
55628    addRegexToken('ZZ', matchShortOffset);
55629    addParseToken(['Z', 'ZZ'], function (input, array, config) {
55630        config._useUTC = true;
55631        config._tzm = offsetFromString(matchShortOffset, input);
55632    });
55633
55634    // HELPERS
55635
55636    // timezone chunker
55637    // '+10:00' > ['10',  '00']
55638    // '-1530'  > ['-15', '30']
55639    var chunkOffset = /([\+\-]|\d\d)/gi;
55640
55641    function offsetFromString(matcher, string) {
55642        var matches = (string || '').match(matcher),
55643            chunk,
55644            parts,
55645            minutes;
55646
55647        if (matches === null) {
55648            return null;
55649        }
55650
55651        chunk = matches[matches.length - 1] || [];
55652        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
55653        minutes = +(parts[1] * 60) + toInt(parts[2]);
55654
55655        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
55656    }
55657
55658    // Return a moment from input, that is local/utc/zone equivalent to model.
55659    function cloneWithOffset(input, model) {
55660        var res, diff;
55661        if (model._isUTC) {
55662            res = model.clone();
55663            diff =
55664                (isMoment(input) || isDate(input)
55665                    ? input.valueOf()
55666                    : createLocal(input).valueOf()) - res.valueOf();
55667            // Use low-level api, because this fn is low-level api.
55668            res._d.setTime(res._d.valueOf() + diff);
55669            hooks.updateOffset(res, false);
55670            return res;
55671        } else {
55672            return createLocal(input).local();
55673        }
55674    }
55675
55676    function getDateOffset(m) {
55677        // On Firefox.24 Date#getTimezoneOffset returns a floating point.
55678        // https://github.com/moment/moment/pull/1871
55679        return -Math.round(m._d.getTimezoneOffset());
55680    }
55681
55682    // HOOKS
55683
55684    // This function will be called whenever a moment is mutated.
55685    // It is intended to keep the offset in sync with the timezone.
55686    hooks.updateOffset = function () {};
55687
55688    // MOMENTS
55689
55690    // keepLocalTime = true means only change the timezone, without
55691    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
55692    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
55693    // +0200, so we adjust the time as needed, to be valid.
55694    //
55695    // Keeping the time actually adds/subtracts (one hour)
55696    // from the actual represented time. That is why we call updateOffset
55697    // a second time. In case it wants us to change the offset again
55698    // _changeInProgress == true case, then we have to adjust, because
55699    // there is no such time in the given timezone.
55700    function getSetOffset(input, keepLocalTime, keepMinutes) {
55701        var offset = this._offset || 0,
55702            localAdjust;
55703        if (!this.isValid()) {
55704            return input != null ? this : NaN;
55705        }
55706        if (input != null) {
55707            if (typeof input === 'string') {
55708                input = offsetFromString(matchShortOffset, input);
55709                if (input === null) {
55710                    return this;
55711                }
55712            } else if (Math.abs(input) < 16 && !keepMinutes) {
55713                input = input * 60;
55714            }
55715            if (!this._isUTC && keepLocalTime) {
55716                localAdjust = getDateOffset(this);
55717            }
55718            this._offset = input;
55719            this._isUTC = true;
55720            if (localAdjust != null) {
55721                this.add(localAdjust, 'm');
55722            }
55723            if (offset !== input) {
55724                if (!keepLocalTime || this._changeInProgress) {
55725                    addSubtract(
55726                        this,
55727                        createDuration(input - offset, 'm'),
55728                        1,
55729                        false
55730                    );
55731                } else if (!this._changeInProgress) {
55732                    this._changeInProgress = true;
55733                    hooks.updateOffset(this, true);
55734                    this._changeInProgress = null;
55735                }
55736            }
55737            return this;
55738        } else {
55739            return this._isUTC ? offset : getDateOffset(this);
55740        }
55741    }
55742
55743    function getSetZone(input, keepLocalTime) {
55744        if (input != null) {
55745            if (typeof input !== 'string') {
55746                input = -input;
55747            }
55748
55749            this.utcOffset(input, keepLocalTime);
55750
55751            return this;
55752        } else {
55753            return -this.utcOffset();
55754        }
55755    }
55756
55757    function setOffsetToUTC(keepLocalTime) {
55758        return this.utcOffset(0, keepLocalTime);
55759    }
55760
55761    function setOffsetToLocal(keepLocalTime) {
55762        if (this._isUTC) {
55763            this.utcOffset(0, keepLocalTime);
55764            this._isUTC = false;
55765
55766            if (keepLocalTime) {
55767                this.subtract(getDateOffset(this), 'm');
55768            }
55769        }
55770        return this;
55771    }
55772
55773    function setOffsetToParsedOffset() {
55774        if (this._tzm != null) {
55775            this.utcOffset(this._tzm, false, true);
55776        } else if (typeof this._i === 'string') {
55777            var tZone = offsetFromString(matchOffset, this._i);
55778            if (tZone != null) {
55779                this.utcOffset(tZone);
55780            } else {
55781                this.utcOffset(0, true);
55782            }
55783        }
55784        return this;
55785    }
55786
55787    function hasAlignedHourOffset(input) {
55788        if (!this.isValid()) {
55789            return false;
55790        }
55791        input = input ? createLocal(input).utcOffset() : 0;
55792
55793        return (this.utcOffset() - input) % 60 === 0;
55794    }
55795
55796    function isDaylightSavingTime() {
55797        return (
55798            this.utcOffset() > this.clone().month(0).utcOffset() ||
55799            this.utcOffset() > this.clone().month(5).utcOffset()
55800        );
55801    }
55802
55803    function isDaylightSavingTimeShifted() {
55804        if (!isUndefined(this._isDSTShifted)) {
55805            return this._isDSTShifted;
55806        }
55807
55808        var c = {},
55809            other;
55810
55811        copyConfig(c, this);
55812        c = prepareConfig(c);
55813
55814        if (c._a) {
55815            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
55816            this._isDSTShifted =
55817                this.isValid() && compareArrays(c._a, other.toArray()) > 0;
55818        } else {
55819            this._isDSTShifted = false;
55820        }
55821
55822        return this._isDSTShifted;
55823    }
55824
55825    function isLocal() {
55826        return this.isValid() ? !this._isUTC : false;
55827    }
55828
55829    function isUtcOffset() {
55830        return this.isValid() ? this._isUTC : false;
55831    }
55832
55833    function isUtc() {
55834        return this.isValid() ? this._isUTC && this._offset === 0 : false;
55835    }
55836
55837    // ASP.NET json date format regex
55838    var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
55839        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
55840        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
55841        // and further modified to allow for strings containing both week and day
55842        isoRegex =
55843            /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
55844
55845    function createDuration(input, key) {
55846        var duration = input,
55847            // matching against regexp is expensive, do it on demand
55848            match = null,
55849            sign,
55850            ret,
55851            diffRes;
55852
55853        if (isDuration(input)) {
55854            duration = {
55855                ms: input._milliseconds,
55856                d: input._days,
55857                M: input._months,
55858            };
55859        } else if (isNumber(input) || !isNaN(+input)) {
55860            duration = {};
55861            if (key) {
55862                duration[key] = +input;
55863            } else {
55864                duration.milliseconds = +input;
55865            }
55866        } else if ((match = aspNetRegex.exec(input))) {
55867            sign = match[1] === '-' ? -1 : 1;
55868            duration = {
55869                y: 0,
55870                d: toInt(match[DATE]) * sign,
55871                h: toInt(match[HOUR]) * sign,
55872                m: toInt(match[MINUTE]) * sign,
55873                s: toInt(match[SECOND]) * sign,
55874                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
55875            };
55876        } else if ((match = isoRegex.exec(input))) {
55877            sign = match[1] === '-' ? -1 : 1;
55878            duration = {
55879                y: parseIso(match[2], sign),
55880                M: parseIso(match[3], sign),
55881                w: parseIso(match[4], sign),
55882                d: parseIso(match[5], sign),
55883                h: parseIso(match[6], sign),
55884                m: parseIso(match[7], sign),
55885                s: parseIso(match[8], sign),
55886            };
55887        } else if (duration == null) {
55888            // checks for null or undefined
55889            duration = {};
55890        } else if (
55891            typeof duration === 'object' &&
55892            ('from' in duration || 'to' in duration)
55893        ) {
55894            diffRes = momentsDifference(
55895                createLocal(duration.from),
55896                createLocal(duration.to)
55897            );
55898
55899            duration = {};
55900            duration.ms = diffRes.milliseconds;
55901            duration.M = diffRes.months;
55902        }
55903
55904        ret = new Duration(duration);
55905
55906        if (isDuration(input) && hasOwnProp(input, '_locale')) {
55907            ret._locale = input._locale;
55908        }
55909
55910        if (isDuration(input) && hasOwnProp(input, '_isValid')) {
55911            ret._isValid = input._isValid;
55912        }
55913
55914        return ret;
55915    }
55916
55917    createDuration.fn = Duration.prototype;
55918    createDuration.invalid = createInvalid$1;
55919
55920    function parseIso(inp, sign) {
55921        // We'd normally use ~~inp for this, but unfortunately it also
55922        // converts floats to ints.
55923        // inp may be undefined, so careful calling replace on it.
55924        var res = inp && parseFloat(inp.replace(',', '.'));
55925        // apply sign while we're at it
55926        return (isNaN(res) ? 0 : res) * sign;
55927    }
55928
55929    function positiveMomentsDifference(base, other) {
55930        var res = {};
55931
55932        res.months =
55933            other.month() - base.month() + (other.year() - base.year()) * 12;
55934        if (base.clone().add(res.months, 'M').isAfter(other)) {
55935            --res.months;
55936        }
55937
55938        res.milliseconds = +other - +base.clone().add(res.months, 'M');
55939
55940        return res;
55941    }
55942
55943    function momentsDifference(base, other) {
55944        var res;
55945        if (!(base.isValid() && other.isValid())) {
55946            return { milliseconds: 0, months: 0 };
55947        }
55948
55949        other = cloneWithOffset(other, base);
55950        if (base.isBefore(other)) {
55951            res = positiveMomentsDifference(base, other);
55952        } else {
55953            res = positiveMomentsDifference(other, base);
55954            res.milliseconds = -res.milliseconds;
55955            res.months = -res.months;
55956        }
55957
55958        return res;
55959    }
55960
55961    // TODO: remove 'name' arg after deprecation is removed
55962    function createAdder(direction, name) {
55963        return function (val, period) {
55964            var dur, tmp;
55965            //invert the arguments, but complain about it
55966            if (period !== null && !isNaN(+period)) {
55967                deprecateSimple(
55968                    name,
55969                    'moment().' +
55970                        name +
55971                        '(period, number) is deprecated. Please use moment().' +
55972                        name +
55973                        '(number, period). ' +
55974                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
55975                );
55976                tmp = val;
55977                val = period;
55978                period = tmp;
55979            }
55980
55981            dur = createDuration(val, period);
55982            addSubtract(this, dur, direction);
55983            return this;
55984        };
55985    }
55986
55987    function addSubtract(mom, duration, isAdding, updateOffset) {
55988        var milliseconds = duration._milliseconds,
55989            days = absRound(duration._days),
55990            months = absRound(duration._months);
55991
55992        if (!mom.isValid()) {
55993            // No op
55994            return;
55995        }
55996
55997        updateOffset = updateOffset == null ? true : updateOffset;
55998
55999        if (months) {
56000            setMonth(mom, get(mom, 'Month') + months * isAdding);
56001        }
56002        if (days) {
56003            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
56004        }
56005        if (milliseconds) {
56006            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
56007        }
56008        if (updateOffset) {
56009            hooks.updateOffset(mom, days || months);
56010        }
56011    }
56012
56013    var add = createAdder(1, 'add'),
56014        subtract = createAdder(-1, 'subtract');
56015
56016    function isString(input) {
56017        return typeof input === 'string' || input instanceof String;
56018    }
56019
56020    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
56021    function isMomentInput(input) {
56022        return (
56023            isMoment(input) ||
56024            isDate(input) ||
56025            isString(input) ||
56026            isNumber(input) ||
56027            isNumberOrStringArray(input) ||
56028            isMomentInputObject(input) ||
56029            input === null ||
56030            input === undefined
56031        );
56032    }
56033
56034    function isMomentInputObject(input) {
56035        var objectTest = isObject(input) && !isObjectEmpty(input),
56036            propertyTest = false,
56037            properties = [
56038                'years',
56039                'year',
56040                'y',
56041                'months',
56042                'month',
56043                'M',
56044                'days',
56045                'day',
56046                'd',
56047                'dates',
56048                'date',
56049                'D',
56050                'hours',
56051                'hour',
56052                'h',
56053                'minutes',
56054                'minute',
56055                'm',
56056                'seconds',
56057                'second',
56058                's',
56059                'milliseconds',
56060                'millisecond',
56061                'ms',
56062            ],
56063            i,
56064            property,
56065            propertyLen = properties.length;
56066
56067        for (i = 0; i < propertyLen; i += 1) {
56068            property = properties[i];
56069            propertyTest = propertyTest || hasOwnProp(input, property);
56070        }
56071
56072        return objectTest && propertyTest;
56073    }
56074
56075    function isNumberOrStringArray(input) {
56076        var arrayTest = isArray(input),
56077            dataTypeTest = false;
56078        if (arrayTest) {
56079            dataTypeTest =
56080                input.filter(function (item) {
56081                    return !isNumber(item) && isString(input);
56082                }).length === 0;
56083        }
56084        return arrayTest && dataTypeTest;
56085    }
56086
56087    function isCalendarSpec(input) {
56088        var objectTest = isObject(input) && !isObjectEmpty(input),
56089            propertyTest = false,
56090            properties = [
56091                'sameDay',
56092                'nextDay',
56093                'lastDay',
56094                'nextWeek',
56095                'lastWeek',
56096                'sameElse',
56097            ],
56098            i,
56099            property;
56100
56101        for (i = 0; i < properties.length; i += 1) {
56102            property = properties[i];
56103            propertyTest = propertyTest || hasOwnProp(input, property);
56104        }
56105
56106        return objectTest && propertyTest;
56107    }
56108
56109    function getCalendarFormat(myMoment, now) {
56110        var diff = myMoment.diff(now, 'days', true);
56111        return diff < -6
56112            ? 'sameElse'
56113            : diff < -1
56114              ? 'lastWeek'
56115              : diff < 0
56116                ? 'lastDay'
56117                : diff < 1
56118                  ? 'sameDay'
56119                  : diff < 2
56120                    ? 'nextDay'
56121                    : diff < 7
56122                      ? 'nextWeek'
56123                      : 'sameElse';
56124    }
56125
56126    function calendar$1(time, formats) {
56127        // Support for single parameter, formats only overload to the calendar function
56128        if (arguments.length === 1) {
56129            if (!arguments[0]) {
56130                time = undefined;
56131                formats = undefined;
56132            } else if (isMomentInput(arguments[0])) {
56133                time = arguments[0];
56134                formats = undefined;
56135            } else if (isCalendarSpec(arguments[0])) {
56136                formats = arguments[0];
56137                time = undefined;
56138            }
56139        }
56140        // We want to compare the start of today, vs this.
56141        // Getting start-of-today depends on whether we're local/utc/offset or not.
56142        var now = time || createLocal(),
56143            sod = cloneWithOffset(now, this).startOf('day'),
56144            format = hooks.calendarFormat(this, sod) || 'sameElse',
56145            output =
56146                formats &&
56147                (isFunction(formats[format])
56148                    ? formats[format].call(this, now)
56149                    : formats[format]);
56150
56151        return this.format(
56152            output || this.localeData().calendar(format, this, createLocal(now))
56153        );
56154    }
56155
56156    function clone() {
56157        return new Moment(this);
56158    }
56159
56160    function isAfter(input, units) {
56161        var localInput = isMoment(input) ? input : createLocal(input);
56162        if (!(this.isValid() && localInput.isValid())) {
56163            return false;
56164        }
56165        units = normalizeUnits(units) || 'millisecond';
56166        if (units === 'millisecond') {
56167            return this.valueOf() > localInput.valueOf();
56168        } else {
56169            return localInput.valueOf() < this.clone().startOf(units).valueOf();
56170        }
56171    }
56172
56173    function isBefore(input, units) {
56174        var localInput = isMoment(input) ? input : createLocal(input);
56175        if (!(this.isValid() && localInput.isValid())) {
56176            return false;
56177        }
56178        units = normalizeUnits(units) || 'millisecond';
56179        if (units === 'millisecond') {
56180            return this.valueOf() < localInput.valueOf();
56181        } else {
56182            return this.clone().endOf(units).valueOf() < localInput.valueOf();
56183        }
56184    }
56185
56186    function isBetween(from, to, units, inclusivity) {
56187        var localFrom = isMoment(from) ? from : createLocal(from),
56188            localTo = isMoment(to) ? to : createLocal(to);
56189        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
56190            return false;
56191        }
56192        inclusivity = inclusivity || '()';
56193        return (
56194            (inclusivity[0] === '('
56195                ? this.isAfter(localFrom, units)
56196                : !this.isBefore(localFrom, units)) &&
56197            (inclusivity[1] === ')'
56198                ? this.isBefore(localTo, units)
56199                : !this.isAfter(localTo, units))
56200        );
56201    }
56202
56203    function isSame(input, units) {
56204        var localInput = isMoment(input) ? input : createLocal(input),
56205            inputMs;
56206        if (!(this.isValid() && localInput.isValid())) {
56207            return false;
56208        }
56209        units = normalizeUnits(units) || 'millisecond';
56210        if (units === 'millisecond') {
56211            return this.valueOf() === localInput.valueOf();
56212        } else {
56213            inputMs = localInput.valueOf();
56214            return (
56215                this.clone().startOf(units).valueOf() <= inputMs &&
56216                inputMs <= this.clone().endOf(units).valueOf()
56217            );
56218        }
56219    }
56220
56221    function isSameOrAfter(input, units) {
56222        return this.isSame(input, units) || this.isAfter(input, units);
56223    }
56224
56225    function isSameOrBefore(input, units) {
56226        return this.isSame(input, units) || this.isBefore(input, units);
56227    }
56228
56229    function diff(input, units, asFloat) {
56230        var that, zoneDelta, output;
56231
56232        if (!this.isValid()) {
56233            return NaN;
56234        }
56235
56236        that = cloneWithOffset(input, this);
56237
56238        if (!that.isValid()) {
56239            return NaN;
56240        }
56241
56242        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
56243
56244        units = normalizeUnits(units);
56245
56246        switch (units) {
56247            case 'year':
56248                output = monthDiff(this, that) / 12;
56249                break;
56250            case 'month':
56251                output = monthDiff(this, that);
56252                break;
56253            case 'quarter':
56254                output = monthDiff(this, that) / 3;
56255                break;
56256            case 'second':
56257                output = (this - that) / 1e3;
56258                break; // 1000
56259            case 'minute':
56260                output = (this - that) / 6e4;
56261                break; // 1000 * 60
56262            case 'hour':
56263                output = (this - that) / 36e5;
56264                break; // 1000 * 60 * 60
56265            case 'day':
56266                output = (this - that - zoneDelta) / 864e5;
56267                break; // 1000 * 60 * 60 * 24, negate dst
56268            case 'week':
56269                output = (this - that - zoneDelta) / 6048e5;
56270                break; // 1000 * 60 * 60 * 24 * 7, negate dst
56271            default:
56272                output = this - that;
56273        }
56274
56275        return asFloat ? output : absFloor(output);
56276    }
56277
56278    function monthDiff(a, b) {
56279        if (a.date() < b.date()) {
56280            // end-of-month calculations work correct when the start month has more
56281            // days than the end month.
56282            return -monthDiff(b, a);
56283        }
56284        // difference in months
56285        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
56286            // b is in (anchor - 1 month, anchor + 1 month)
56287            anchor = a.clone().add(wholeMonthDiff, 'months'),
56288            anchor2,
56289            adjust;
56290
56291        if (b - anchor < 0) {
56292            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
56293            // linear across the month
56294            adjust = (b - anchor) / (anchor - anchor2);
56295        } else {
56296            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
56297            // linear across the month
56298            adjust = (b - anchor) / (anchor2 - anchor);
56299        }
56300
56301        //check for negative zero, return zero if negative zero
56302        return -(wholeMonthDiff + adjust) || 0;
56303    }
56304
56305    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
56306    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
56307
56308    function toString() {
56309        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
56310    }
56311
56312    function toISOString(keepOffset) {
56313        if (!this.isValid()) {
56314            return null;
56315        }
56316        var utc = keepOffset !== true,
56317            m = utc ? this.clone().utc() : this;
56318        if (m.year() < 0 || m.year() > 9999) {
56319            return formatMoment(
56320                m,
56321                utc
56322                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
56323                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
56324            );
56325        }
56326        if (isFunction(Date.prototype.toISOString)) {
56327            // native implementation is ~50x faster, use it when we can
56328            if (utc) {
56329                return this.toDate().toISOString();
56330            } else {
56331                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
56332                    .toISOString()
56333                    .replace('Z', formatMoment(m, 'Z'));
56334            }
56335        }
56336        return formatMoment(
56337            m,
56338            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
56339        );
56340    }
56341
56342    /**
56343     * Return a human readable representation of a moment that can
56344     * also be evaluated to get a new moment which is the same
56345     *
56346     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
56347     */
56348    function inspect() {
56349        if (!this.isValid()) {
56350            return 'moment.invalid(/* ' + this._i + ' */)';
56351        }
56352        var func = 'moment',
56353            zone = '',
56354            prefix,
56355            year,
56356            datetime,
56357            suffix;
56358        if (!this.isLocal()) {
56359            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
56360            zone = 'Z';
56361        }
56362        prefix = '[' + func + '("]';
56363        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
56364        datetime = '-MM-DD[T]HH:mm:ss.SSS';
56365        suffix = zone + '[")]';
56366
56367        return this.format(prefix + year + datetime + suffix);
56368    }
56369
56370    function format(inputString) {
56371        if (!inputString) {
56372            inputString = this.isUtc()
56373                ? hooks.defaultFormatUtc
56374                : hooks.defaultFormat;
56375        }
56376        var output = formatMoment(this, inputString);
56377        return this.localeData().postformat(output);
56378    }
56379
56380    function from(time, withoutSuffix) {
56381        if (
56382            this.isValid() &&
56383            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
56384        ) {
56385            return createDuration({ to: this, from: time })
56386                .locale(this.locale())
56387                .humanize(!withoutSuffix);
56388        } else {
56389            return this.localeData().invalidDate();
56390        }
56391    }
56392
56393    function fromNow(withoutSuffix) {
56394        return this.from(createLocal(), withoutSuffix);
56395    }
56396
56397    function to(time, withoutSuffix) {
56398        if (
56399            this.isValid() &&
56400            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
56401        ) {
56402            return createDuration({ from: this, to: time })
56403                .locale(this.locale())
56404                .humanize(!withoutSuffix);
56405        } else {
56406            return this.localeData().invalidDate();
56407        }
56408    }
56409
56410    function toNow(withoutSuffix) {
56411        return this.to(createLocal(), withoutSuffix);
56412    }
56413
56414    // If passed a locale key, it will set the locale for this
56415    // instance.  Otherwise, it will return the locale configuration
56416    // variables for this instance.
56417    function locale(key) {
56418        var newLocaleData;
56419
56420        if (key === undefined) {
56421            return this._locale._abbr;
56422        } else {
56423            newLocaleData = getLocale(key);
56424            if (newLocaleData != null) {
56425                this._locale = newLocaleData;
56426            }
56427            return this;
56428        }
56429    }
56430
56431    var lang = deprecate(
56432        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
56433        function (key) {
56434            if (key === undefined) {
56435                return this.localeData();
56436            } else {
56437                return this.locale(key);
56438            }
56439        }
56440    );
56441
56442    function localeData() {
56443        return this._locale;
56444    }
56445
56446    var MS_PER_SECOND = 1000,
56447        MS_PER_MINUTE = 60 * MS_PER_SECOND,
56448        MS_PER_HOUR = 60 * MS_PER_MINUTE,
56449        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
56450
56451    // actual modulo - handles negative numbers (for dates before 1970):
56452    function mod$1(dividend, divisor) {
56453        return ((dividend % divisor) + divisor) % divisor;
56454    }
56455
56456    function localStartOfDate(y, m, d) {
56457        // the date constructor remaps years 0-99 to 1900-1999
56458        if (y < 100 && y >= 0) {
56459            // preserve leap years using a full 400 year cycle, then reset
56460            return new Date(y + 400, m, d) - MS_PER_400_YEARS;
56461        } else {
56462            return new Date(y, m, d).valueOf();
56463        }
56464    }
56465
56466    function utcStartOfDate(y, m, d) {
56467        // Date.UTC remaps years 0-99 to 1900-1999
56468        if (y < 100 && y >= 0) {
56469            // preserve leap years using a full 400 year cycle, then reset
56470            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
56471        } else {
56472            return Date.UTC(y, m, d);
56473        }
56474    }
56475
56476    function startOf(units) {
56477        var time, startOfDate;
56478        units = normalizeUnits(units);
56479        if (units === undefined || units === 'millisecond' || !this.isValid()) {
56480            return this;
56481        }
56482
56483        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
56484
56485        switch (units) {
56486            case 'year':
56487                time = startOfDate(this.year(), 0, 1);
56488                break;
56489            case 'quarter':
56490                time = startOfDate(
56491                    this.year(),
56492                    this.month() - (this.month() % 3),
56493                    1
56494                );
56495                break;
56496            case 'month':
56497                time = startOfDate(this.year(), this.month(), 1);
56498                break;
56499            case 'week':
56500                time = startOfDate(
56501                    this.year(),
56502                    this.month(),
56503                    this.date() - this.weekday()
56504                );
56505                break;
56506            case 'isoWeek':
56507                time = startOfDate(
56508                    this.year(),
56509                    this.month(),
56510                    this.date() - (this.isoWeekday() - 1)
56511                );
56512                break;
56513            case 'day':
56514            case 'date':
56515                time = startOfDate(this.year(), this.month(), this.date());
56516                break;
56517            case 'hour':
56518                time = this._d.valueOf();
56519                time -= mod$1(
56520                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
56521                    MS_PER_HOUR
56522                );
56523                break;
56524            case 'minute':
56525                time = this._d.valueOf();
56526                time -= mod$1(time, MS_PER_MINUTE);
56527                break;
56528            case 'second':
56529                time = this._d.valueOf();
56530                time -= mod$1(time, MS_PER_SECOND);
56531                break;
56532        }
56533
56534        this._d.setTime(time);
56535        hooks.updateOffset(this, true);
56536        return this;
56537    }
56538
56539    function endOf(units) {
56540        var time, startOfDate;
56541        units = normalizeUnits(units);
56542        if (units === undefined || units === 'millisecond' || !this.isValid()) {
56543            return this;
56544        }
56545
56546        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
56547
56548        switch (units) {
56549            case 'year':
56550                time = startOfDate(this.year() + 1, 0, 1) - 1;
56551                break;
56552            case 'quarter':
56553                time =
56554                    startOfDate(
56555                        this.year(),
56556                        this.month() - (this.month() % 3) + 3,
56557                        1
56558                    ) - 1;
56559                break;
56560            case 'month':
56561                time = startOfDate(this.year(), this.month() + 1, 1) - 1;
56562                break;
56563            case 'week':
56564                time =
56565                    startOfDate(
56566                        this.year(),
56567                        this.month(),
56568                        this.date() - this.weekday() + 7
56569                    ) - 1;
56570                break;
56571            case 'isoWeek':
56572                time =
56573                    startOfDate(
56574                        this.year(),
56575                        this.month(),
56576                        this.date() - (this.isoWeekday() - 1) + 7
56577                    ) - 1;
56578                break;
56579            case 'day':
56580            case 'date':
56581                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
56582                break;
56583            case 'hour':
56584                time = this._d.valueOf();
56585                time +=
56586                    MS_PER_HOUR -
56587                    mod$1(
56588                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
56589                        MS_PER_HOUR
56590                    ) -
56591                    1;
56592                break;
56593            case 'minute':
56594                time = this._d.valueOf();
56595                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
56596                break;
56597            case 'second':
56598                time = this._d.valueOf();
56599                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
56600                break;
56601        }
56602
56603        this._d.setTime(time);
56604        hooks.updateOffset(this, true);
56605        return this;
56606    }
56607
56608    function valueOf() {
56609        return this._d.valueOf() - (this._offset || 0) * 60000;
56610    }
56611
56612    function unix() {
56613        return Math.floor(this.valueOf() / 1000);
56614    }
56615
56616    function toDate() {
56617        return new Date(this.valueOf());
56618    }
56619
56620    function toArray() {
56621        var m = this;
56622        return [
56623            m.year(),
56624            m.month(),
56625            m.date(),
56626            m.hour(),
56627            m.minute(),
56628            m.second(),
56629            m.millisecond(),
56630        ];
56631    }
56632
56633    function toObject() {
56634        var m = this;
56635        return {
56636            years: m.year(),
56637            months: m.month(),
56638            date: m.date(),
56639            hours: m.hours(),
56640            minutes: m.minutes(),
56641            seconds: m.seconds(),
56642            milliseconds: m.milliseconds(),
56643        };
56644    }
56645
56646    function toJSON() {
56647        // new Date(NaN).toJSON() === null
56648        return this.isValid() ? this.toISOString() : null;
56649    }
56650
56651    function isValid$2() {
56652        return isValid(this);
56653    }
56654
56655    function parsingFlags() {
56656        return extend({}, getParsingFlags(this));
56657    }
56658
56659    function invalidAt() {
56660        return getParsingFlags(this).overflow;
56661    }
56662
56663    function creationData() {
56664        return {
56665            input: this._i,
56666            format: this._f,
56667            locale: this._locale,
56668            isUTC: this._isUTC,
56669            strict: this._strict,
56670        };
56671    }
56672
56673    addFormatToken('N', 0, 0, 'eraAbbr');
56674    addFormatToken('NN', 0, 0, 'eraAbbr');
56675    addFormatToken('NNN', 0, 0, 'eraAbbr');
56676    addFormatToken('NNNN', 0, 0, 'eraName');
56677    addFormatToken('NNNNN', 0, 0, 'eraNarrow');
56678
56679    addFormatToken('y', ['y', 1], 'yo', 'eraYear');
56680    addFormatToken('y', ['yy', 2], 0, 'eraYear');
56681    addFormatToken('y', ['yyy', 3], 0, 'eraYear');
56682    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');
56683
56684    addRegexToken('N', matchEraAbbr);
56685    addRegexToken('NN', matchEraAbbr);
56686    addRegexToken('NNN', matchEraAbbr);
56687    addRegexToken('NNNN', matchEraName);
56688    addRegexToken('NNNNN', matchEraNarrow);
56689
56690    addParseToken(
56691        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],
56692        function (input, array, config, token) {
56693            var era = config._locale.erasParse(input, token, config._strict);
56694            if (era) {
56695                getParsingFlags(config).era = era;
56696            } else {
56697                getParsingFlags(config).invalidEra = input;
56698            }
56699        }
56700    );
56701
56702    addRegexToken('y', matchUnsigned);
56703    addRegexToken('yy', matchUnsigned);
56704    addRegexToken('yyy', matchUnsigned);
56705    addRegexToken('yyyy', matchUnsigned);
56706    addRegexToken('yo', matchEraYearOrdinal);
56707
56708    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
56709    addParseToken(['yo'], function (input, array, config, token) {
56710        var match;
56711        if (config._locale._eraYearOrdinalRegex) {
56712            match = input.match(config._locale._eraYearOrdinalRegex);
56713        }
56714
56715        if (config._locale.eraYearOrdinalParse) {
56716            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
56717        } else {
56718            array[YEAR] = parseInt(input, 10);
56719        }
56720    });
56721
56722    function localeEras(m, format) {
56723        var i,
56724            l,
56725            date,
56726            eras = this._eras || getLocale('en')._eras;
56727        for (i = 0, l = eras.length; i < l; ++i) {
56728            switch (typeof eras[i].since) {
56729                case 'string':
56730                    // truncate time
56731                    date = hooks(eras[i].since).startOf('day');
56732                    eras[i].since = date.valueOf();
56733                    break;
56734            }
56735
56736            switch (typeof eras[i].until) {
56737                case 'undefined':
56738                    eras[i].until = +Infinity;
56739                    break;
56740                case 'string':
56741                    // truncate time
56742                    date = hooks(eras[i].until).startOf('day').valueOf();
56743                    eras[i].until = date.valueOf();
56744                    break;
56745            }
56746        }
56747        return eras;
56748    }
56749
56750    function localeErasParse(eraName, format, strict) {
56751        var i,
56752            l,
56753            eras = this.eras(),
56754            name,
56755            abbr,
56756            narrow;
56757        eraName = eraName.toUpperCase();
56758
56759        for (i = 0, l = eras.length; i < l; ++i) {
56760            name = eras[i].name.toUpperCase();
56761            abbr = eras[i].abbr.toUpperCase();
56762            narrow = eras[i].narrow.toUpperCase();
56763
56764            if (strict) {
56765                switch (format) {
56766                    case 'N':
56767                    case 'NN':
56768                    case 'NNN':
56769                        if (abbr === eraName) {
56770                            return eras[i];
56771                        }
56772                        break;
56773
56774                    case 'NNNN':
56775                        if (name === eraName) {
56776                            return eras[i];
56777                        }
56778                        break;
56779
56780                    case 'NNNNN':
56781                        if (narrow === eraName) {
56782                            return eras[i];
56783                        }
56784                        break;
56785                }
56786            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
56787                return eras[i];
56788            }
56789        }
56790    }
56791
56792    function localeErasConvertYear(era, year) {
56793        var dir = era.since <= era.until ? +1 : -1;
56794        if (year === undefined) {
56795            return hooks(era.since).year();
56796        } else {
56797            return hooks(era.since).year() + (year - era.offset) * dir;
56798        }
56799    }
56800
56801    function getEraName() {
56802        var i,
56803            l,
56804            val,
56805            eras = this.localeData().eras();
56806        for (i = 0, l = eras.length; i < l; ++i) {
56807            // truncate time
56808            val = this.clone().startOf('day').valueOf();
56809
56810            if (eras[i].since <= val && val <= eras[i].until) {
56811                return eras[i].name;
56812            }
56813            if (eras[i].until <= val && val <= eras[i].since) {
56814                return eras[i].name;
56815            }
56816        }
56817
56818        return '';
56819    }
56820
56821    function getEraNarrow() {
56822        var i,
56823            l,
56824            val,
56825            eras = this.localeData().eras();
56826        for (i = 0, l = eras.length; i < l; ++i) {
56827            // truncate time
56828            val = this.clone().startOf('day').valueOf();
56829
56830            if (eras[i].since <= val && val <= eras[i].until) {
56831                return eras[i].narrow;
56832            }
56833            if (eras[i].until <= val && val <= eras[i].since) {
56834                return eras[i].narrow;
56835            }
56836        }
56837
56838        return '';
56839    }
56840
56841    function getEraAbbr() {
56842        var i,
56843            l,
56844            val,
56845            eras = this.localeData().eras();
56846        for (i = 0, l = eras.length; i < l; ++i) {
56847            // truncate time
56848            val = this.clone().startOf('day').valueOf();
56849
56850            if (eras[i].since <= val && val <= eras[i].until) {
56851                return eras[i].abbr;
56852            }
56853            if (eras[i].until <= val && val <= eras[i].since) {
56854                return eras[i].abbr;
56855            }
56856        }
56857
56858        return '';
56859    }
56860
56861    function getEraYear() {
56862        var i,
56863            l,
56864            dir,
56865            val,
56866            eras = this.localeData().eras();
56867        for (i = 0, l = eras.length; i < l; ++i) {
56868            dir = eras[i].since <= eras[i].until ? +1 : -1;
56869
56870            // truncate time
56871            val = this.clone().startOf('day').valueOf();
56872
56873            if (
56874                (eras[i].since <= val && val <= eras[i].until) ||
56875                (eras[i].until <= val && val <= eras[i].since)
56876            ) {
56877                return (
56878                    (this.year() - hooks(eras[i].since).year()) * dir +
56879                    eras[i].offset
56880                );
56881            }
56882        }
56883
56884        return this.year();
56885    }
56886
56887    function erasNameRegex(isStrict) {
56888        if (!hasOwnProp(this, '_erasNameRegex')) {
56889            computeErasParse.call(this);
56890        }
56891        return isStrict ? this._erasNameRegex : this._erasRegex;
56892    }
56893
56894    function erasAbbrRegex(isStrict) {
56895        if (!hasOwnProp(this, '_erasAbbrRegex')) {
56896            computeErasParse.call(this);
56897        }
56898        return isStrict ? this._erasAbbrRegex : this._erasRegex;
56899    }
56900
56901    function erasNarrowRegex(isStrict) {
56902        if (!hasOwnProp(this, '_erasNarrowRegex')) {
56903            computeErasParse.call(this);
56904        }
56905        return isStrict ? this._erasNarrowRegex : this._erasRegex;
56906    }
56907
56908    function matchEraAbbr(isStrict, locale) {
56909        return locale.erasAbbrRegex(isStrict);
56910    }
56911
56912    function matchEraName(isStrict, locale) {
56913        return locale.erasNameRegex(isStrict);
56914    }
56915
56916    function matchEraNarrow(isStrict, locale) {
56917        return locale.erasNarrowRegex(isStrict);
56918    }
56919
56920    function matchEraYearOrdinal(isStrict, locale) {
56921        return locale._eraYearOrdinalRegex || matchUnsigned;
56922    }
56923
56924    function computeErasParse() {
56925        var abbrPieces = [],
56926            namePieces = [],
56927            narrowPieces = [],
56928            mixedPieces = [],
56929            i,
56930            l,
56931            erasName,
56932            erasAbbr,
56933            erasNarrow,
56934            eras = this.eras();
56935
56936        for (i = 0, l = eras.length; i < l; ++i) {
56937            erasName = regexEscape(eras[i].name);
56938            erasAbbr = regexEscape(eras[i].abbr);
56939            erasNarrow = regexEscape(eras[i].narrow);
56940
56941            namePieces.push(erasName);
56942            abbrPieces.push(erasAbbr);
56943            narrowPieces.push(erasNarrow);
56944            mixedPieces.push(erasName);
56945            mixedPieces.push(erasAbbr);
56946            mixedPieces.push(erasNarrow);
56947        }
56948
56949        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
56950        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
56951        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
56952        this._erasNarrowRegex = new RegExp(
56953            '^(' + narrowPieces.join('|') + ')',
56954            'i'
56955        );
56956    }
56957
56958    // FORMATTING
56959
56960    addFormatToken(0, ['gg', 2], 0, function () {
56961        return this.weekYear() % 100;
56962    });
56963
56964    addFormatToken(0, ['GG', 2], 0, function () {
56965        return this.isoWeekYear() % 100;
56966    });
56967
56968    function addWeekYearFormatToken(token, getter) {
56969        addFormatToken(0, [token, token.length], 0, getter);
56970    }
56971
56972    addWeekYearFormatToken('gggg', 'weekYear');
56973    addWeekYearFormatToken('ggggg', 'weekYear');
56974    addWeekYearFormatToken('GGGG', 'isoWeekYear');
56975    addWeekYearFormatToken('GGGGG', 'isoWeekYear');
56976
56977    // ALIASES
56978
56979    // PARSING
56980
56981    addRegexToken('G', matchSigned);
56982    addRegexToken('g', matchSigned);
56983    addRegexToken('GG', match1to2, match2);
56984    addRegexToken('gg', match1to2, match2);
56985    addRegexToken('GGGG', match1to4, match4);
56986    addRegexToken('gggg', match1to4, match4);
56987    addRegexToken('GGGGG', match1to6, match6);
56988    addRegexToken('ggggg', match1to6, match6);
56989
56990    addWeekParseToken(
56991        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],
56992        function (input, week, config, token) {
56993            week[token.substr(0, 2)] = toInt(input);
56994        }
56995    );
56996
56997    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
56998        week[token] = hooks.parseTwoDigitYear(input);
56999    });
57000
57001    // MOMENTS
57002
57003    function getSetWeekYear(input) {
57004        return getSetWeekYearHelper.call(
57005            this,
57006            input,
57007            this.week(),
57008            this.weekday() + this.localeData()._week.dow,
57009            this.localeData()._week.dow,
57010            this.localeData()._week.doy
57011        );
57012    }
57013
57014    function getSetISOWeekYear(input) {
57015        return getSetWeekYearHelper.call(
57016            this,
57017            input,
57018            this.isoWeek(),
57019            this.isoWeekday(),
57020            1,
57021            4
57022        );
57023    }
57024
57025    function getISOWeeksInYear() {
57026        return weeksInYear(this.year(), 1, 4);
57027    }
57028
57029    function getISOWeeksInISOWeekYear() {
57030        return weeksInYear(this.isoWeekYear(), 1, 4);
57031    }
57032
57033    function getWeeksInYear() {
57034        var weekInfo = this.localeData()._week;
57035        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
57036    }
57037
57038    function getWeeksInWeekYear() {
57039        var weekInfo = this.localeData()._week;
57040        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
57041    }
57042
57043    function getSetWeekYearHelper(input, week, weekday, dow, doy) {
57044        var weeksTarget;
57045        if (input == null) {
57046            return weekOfYear(this, dow, doy).year;
57047        } else {
57048            weeksTarget = weeksInYear(input, dow, doy);
57049            if (week > weeksTarget) {
57050                week = weeksTarget;
57051            }
57052            return setWeekAll.call(this, input, week, weekday, dow, doy);
57053        }
57054    }
57055
57056    function setWeekAll(weekYear, week, weekday, dow, doy) {
57057        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
57058            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
57059
57060        this.year(date.getUTCFullYear());
57061        this.month(date.getUTCMonth());
57062        this.date(date.getUTCDate());
57063        return this;
57064    }
57065
57066    // FORMATTING
57067
57068    addFormatToken('Q', 0, 'Qo', 'quarter');
57069
57070    // PARSING
57071
57072    addRegexToken('Q', match1);
57073    addParseToken('Q', function (input, array) {
57074        array[MONTH] = (toInt(input) - 1) * 3;
57075    });
57076
57077    // MOMENTS
57078
57079    function getSetQuarter(input) {
57080        return input == null
57081            ? Math.ceil((this.month() + 1) / 3)
57082            : this.month((input - 1) * 3 + (this.month() % 3));
57083    }
57084
57085    // FORMATTING
57086
57087    addFormatToken('D', ['DD', 2], 'Do', 'date');
57088
57089    // PARSING
57090
57091    addRegexToken('D', match1to2, match1to2NoLeadingZero);
57092    addRegexToken('DD', match1to2, match2);
57093    addRegexToken('Do', function (isStrict, locale) {
57094        // TODO: Remove "ordinalParse" fallback in next major release.
57095        return isStrict
57096            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
57097            : locale._dayOfMonthOrdinalParseLenient;
57098    });
57099
57100    addParseToken(['D', 'DD'], DATE);
57101    addParseToken('Do', function (input, array) {
57102        array[DATE] = toInt(input.match(match1to2)[0]);
57103    });
57104
57105    // MOMENTS
57106
57107    var getSetDayOfMonth = makeGetSet('Date', true);
57108
57109    // FORMATTING
57110
57111    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
57112
57113    // PARSING
57114
57115    addRegexToken('DDD', match1to3);
57116    addRegexToken('DDDD', match3);
57117    addParseToken(['DDD', 'DDDD'], function (input, array, config) {
57118        config._dayOfYear = toInt(input);
57119    });
57120
57121    // HELPERS
57122
57123    // MOMENTS
57124
57125    function getSetDayOfYear(input) {
57126        var dayOfYear =
57127            Math.round(
57128                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
57129            ) + 1;
57130        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
57131    }
57132
57133    // FORMATTING
57134
57135    addFormatToken('m', ['mm', 2], 0, 'minute');
57136
57137    // PARSING
57138
57139    addRegexToken('m', match1to2, match1to2HasZero);
57140    addRegexToken('mm', match1to2, match2);
57141    addParseToken(['m', 'mm'], MINUTE);
57142
57143    // MOMENTS
57144
57145    var getSetMinute = makeGetSet('Minutes', false);
57146
57147    // FORMATTING
57148
57149    addFormatToken('s', ['ss', 2], 0, 'second');
57150
57151    // PARSING
57152
57153    addRegexToken('s', match1to2, match1to2HasZero);
57154    addRegexToken('ss', match1to2, match2);
57155    addParseToken(['s', 'ss'], SECOND);
57156
57157    // MOMENTS
57158
57159    var getSetSecond = makeGetSet('Seconds', false);
57160
57161    // FORMATTING
57162
57163    addFormatToken('S', 0, 0, function () {
57164        return ~~(this.millisecond() / 100);
57165    });
57166
57167    addFormatToken(0, ['SS', 2], 0, function () {
57168        return ~~(this.millisecond() / 10);
57169    });
57170
57171    addFormatToken(0, ['SSS', 3], 0, 'millisecond');
57172    addFormatToken(0, ['SSSS', 4], 0, function () {
57173        return this.millisecond() * 10;
57174    });
57175    addFormatToken(0, ['SSSSS', 5], 0, function () {
57176        return this.millisecond() * 100;
57177    });
57178    addFormatToken(0, ['SSSSSS', 6], 0, function () {
57179        return this.millisecond() * 1000;
57180    });
57181    addFormatToken(0, ['SSSSSSS', 7], 0, function () {
57182        return this.millisecond() * 10000;
57183    });
57184    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
57185        return this.millisecond() * 100000;
57186    });
57187    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
57188        return this.millisecond() * 1000000;
57189    });
57190
57191    // PARSING
57192
57193    addRegexToken('S', match1to3, match1);
57194    addRegexToken('SS', match1to3, match2);
57195    addRegexToken('SSS', match1to3, match3);
57196
57197    var token, getSetMillisecond;
57198    for (token = 'SSSS'; token.length <= 9; token += 'S') {
57199        addRegexToken(token, matchUnsigned);
57200    }
57201
57202    function parseMs(input, array) {
57203        array[MILLISECOND] = toInt(('0.' + input) * 1000);
57204    }
57205
57206    for (token = 'S'; token.length <= 9; token += 'S') {
57207        addParseToken(token, parseMs);
57208    }
57209
57210    getSetMillisecond = makeGetSet('Milliseconds', false);
57211
57212    // FORMATTING
57213
57214    addFormatToken('z', 0, 0, 'zoneAbbr');
57215    addFormatToken('zz', 0, 0, 'zoneName');
57216
57217    // MOMENTS
57218
57219    function getZoneAbbr() {
57220        return this._isUTC ? 'UTC' : '';
57221    }
57222
57223    function getZoneName() {
57224        return this._isUTC ? 'Coordinated Universal Time' : '';
57225    }
57226
57227    var proto = Moment.prototype;
57228
57229    proto.add = add;
57230    proto.calendar = calendar$1;
57231    proto.clone = clone;
57232    proto.diff = diff;
57233    proto.endOf = endOf;
57234    proto.format = format;
57235    proto.from = from;
57236    proto.fromNow = fromNow;
57237    proto.to = to;
57238    proto.toNow = toNow;
57239    proto.get = stringGet;
57240    proto.invalidAt = invalidAt;
57241    proto.isAfter = isAfter;
57242    proto.isBefore = isBefore;
57243    proto.isBetween = isBetween;
57244    proto.isSame = isSame;
57245    proto.isSameOrAfter = isSameOrAfter;
57246    proto.isSameOrBefore = isSameOrBefore;
57247    proto.isValid = isValid$2;
57248    proto.lang = lang;
57249    proto.locale = locale;
57250    proto.localeData = localeData;
57251    proto.max = prototypeMax;
57252    proto.min = prototypeMin;
57253    proto.parsingFlags = parsingFlags;
57254    proto.set = stringSet;
57255    proto.startOf = startOf;
57256    proto.subtract = subtract;
57257    proto.toArray = toArray;
57258    proto.toObject = toObject;
57259    proto.toDate = toDate;
57260    proto.toISOString = toISOString;
57261    proto.inspect = inspect;
57262    if (typeof Symbol !== 'undefined' && Symbol.for != null) {
57263        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
57264            return 'Moment<' + this.format() + '>';
57265        };
57266    }
57267    proto.toJSON = toJSON;
57268    proto.toString = toString;
57269    proto.unix = unix;
57270    proto.valueOf = valueOf;
57271    proto.creationData = creationData;
57272    proto.eraName = getEraName;
57273    proto.eraNarrow = getEraNarrow;
57274    proto.eraAbbr = getEraAbbr;
57275    proto.eraYear = getEraYear;
57276    proto.year = getSetYear;
57277    proto.isLeapYear = getIsLeapYear;
57278    proto.weekYear = getSetWeekYear;
57279    proto.isoWeekYear = getSetISOWeekYear;
57280    proto.quarter = proto.quarters = getSetQuarter;
57281    proto.month = getSetMonth;
57282    proto.daysInMonth = getDaysInMonth;
57283    proto.week = proto.weeks = getSetWeek;
57284    proto.isoWeek = proto.isoWeeks = getSetISOWeek;
57285    proto.weeksInYear = getWeeksInYear;
57286    proto.weeksInWeekYear = getWeeksInWeekYear;
57287    proto.isoWeeksInYear = getISOWeeksInYear;
57288    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
57289    proto.date = getSetDayOfMonth;
57290    proto.day = proto.days = getSetDayOfWeek;
57291    proto.weekday = getSetLocaleDayOfWeek;
57292    proto.isoWeekday = getSetISODayOfWeek;
57293    proto.dayOfYear = getSetDayOfYear;
57294    proto.hour = proto.hours = getSetHour;
57295    proto.minute = proto.minutes = getSetMinute;
57296    proto.second = proto.seconds = getSetSecond;
57297    proto.millisecond = proto.milliseconds = getSetMillisecond;
57298    proto.utcOffset = getSetOffset;
57299    proto.utc = setOffsetToUTC;
57300    proto.local = setOffsetToLocal;
57301    proto.parseZone = setOffsetToParsedOffset;
57302    proto.hasAlignedHourOffset = hasAlignedHourOffset;
57303    proto.isDST = isDaylightSavingTime;
57304    proto.isLocal = isLocal;
57305    proto.isUtcOffset = isUtcOffset;
57306    proto.isUtc = isUtc;
57307    proto.isUTC = isUtc;
57308    proto.zoneAbbr = getZoneAbbr;
57309    proto.zoneName = getZoneName;
57310    proto.dates = deprecate(
57311        'dates accessor is deprecated. Use date instead.',
57312        getSetDayOfMonth
57313    );
57314    proto.months = deprecate(
57315        'months accessor is deprecated. Use month instead',
57316        getSetMonth
57317    );
57318    proto.years = deprecate(
57319        'years accessor is deprecated. Use year instead',
57320        getSetYear
57321    );
57322    proto.zone = deprecate(
57323        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
57324        getSetZone
57325    );
57326    proto.isDSTShifted = deprecate(
57327        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
57328        isDaylightSavingTimeShifted
57329    );
57330
57331    function createUnix(input) {
57332        return createLocal(input * 1000);
57333    }
57334
57335    function createInZone() {
57336        return createLocal.apply(null, arguments).parseZone();
57337    }
57338
57339    function preParsePostFormat(string) {
57340        return string;
57341    }
57342
57343    var proto$1 = Locale.prototype;
57344
57345    proto$1.calendar = calendar;
57346    proto$1.longDateFormat = longDateFormat;
57347    proto$1.invalidDate = invalidDate;
57348    proto$1.ordinal = ordinal;
57349    proto$1.preparse = preParsePostFormat;
57350    proto$1.postformat = preParsePostFormat;
57351    proto$1.relativeTime = relativeTime;
57352    proto$1.pastFuture = pastFuture;
57353    proto$1.set = set;
57354    proto$1.eras = localeEras;
57355    proto$1.erasParse = localeErasParse;
57356    proto$1.erasConvertYear = localeErasConvertYear;
57357    proto$1.erasAbbrRegex = erasAbbrRegex;
57358    proto$1.erasNameRegex = erasNameRegex;
57359    proto$1.erasNarrowRegex = erasNarrowRegex;
57360
57361    proto$1.months = localeMonths;
57362    proto$1.monthsShort = localeMonthsShort;
57363    proto$1.monthsParse = localeMonthsParse;
57364    proto$1.monthsRegex = monthsRegex;
57365    proto$1.monthsShortRegex = monthsShortRegex;
57366    proto$1.week = localeWeek;
57367    proto$1.firstDayOfYear = localeFirstDayOfYear;
57368    proto$1.firstDayOfWeek = localeFirstDayOfWeek;
57369
57370    proto$1.weekdays = localeWeekdays;
57371    proto$1.weekdaysMin = localeWeekdaysMin;
57372    proto$1.weekdaysShort = localeWeekdaysShort;
57373    proto$1.weekdaysParse = localeWeekdaysParse;
57374
57375    proto$1.weekdaysRegex = weekdaysRegex;
57376    proto$1.weekdaysShortRegex = weekdaysShortRegex;
57377    proto$1.weekdaysMinRegex = weekdaysMinRegex;
57378
57379    proto$1.isPM = localeIsPM;
57380    proto$1.meridiem = localeMeridiem;
57381
57382    function get$1(format, index, field, setter) {
57383        var locale = getLocale(),
57384            utc = createUTC().set(setter, index);
57385        return locale[field](utc, format);
57386    }
57387
57388    function listMonthsImpl(format, index, field) {
57389        if (isNumber(format)) {
57390            index = format;
57391            format = undefined;
57392        }
57393
57394        format = format || '';
57395
57396        if (index != null) {
57397            return get$1(format, index, field, 'month');
57398        }
57399
57400        var i,
57401            out = [];
57402        for (i = 0; i < 12; i++) {
57403            out[i] = get$1(format, i, field, 'month');
57404        }
57405        return out;
57406    }
57407
57408    // ()
57409    // (5)
57410    // (fmt, 5)
57411    // (fmt)
57412    // (true)
57413    // (true, 5)
57414    // (true, fmt, 5)
57415    // (true, fmt)
57416    function listWeekdaysImpl(localeSorted, format, index, field) {
57417        if (typeof localeSorted === 'boolean') {
57418            if (isNumber(format)) {
57419                index = format;
57420                format = undefined;
57421            }
57422
57423            format = format || '';
57424        } else {
57425            format = localeSorted;
57426            index = format;
57427            localeSorted = false;
57428
57429            if (isNumber(format)) {
57430                index = format;
57431                format = undefined;
57432            }
57433
57434            format = format || '';
57435        }
57436
57437        var locale = getLocale(),
57438            shift = localeSorted ? locale._week.dow : 0,
57439            i,
57440            out = [];
57441
57442        if (index != null) {
57443            return get$1(format, (index + shift) % 7, field, 'day');
57444        }
57445
57446        for (i = 0; i < 7; i++) {
57447            out[i] = get$1(format, (i + shift) % 7, field, 'day');
57448        }
57449        return out;
57450    }
57451
57452    function listMonths(format, index) {
57453        return listMonthsImpl(format, index, 'months');
57454    }
57455
57456    function listMonthsShort(format, index) {
57457        return listMonthsImpl(format, index, 'monthsShort');
57458    }
57459
57460    function listWeekdays(localeSorted, format, index) {
57461        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
57462    }
57463
57464    function listWeekdaysShort(localeSorted, format, index) {
57465        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
57466    }
57467
57468    function listWeekdaysMin(localeSorted, format, index) {
57469        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
57470    }
57471
57472    getSetGlobalLocale('en', {
57473        eras: [
57474            {
57475                since: '0001-01-01',
57476                until: +Infinity,
57477                offset: 1,
57478                name: 'Anno Domini',
57479                narrow: 'AD',
57480                abbr: 'AD',
57481            },
57482            {
57483                since: '0000-12-31',
57484                until: -Infinity,
57485                offset: 1,
57486                name: 'Before Christ',
57487                narrow: 'BC',
57488                abbr: 'BC',
57489            },
57490        ],
57491        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
57492        ordinal: function (number) {
57493            var b = number % 10,
57494                output =
57495                    toInt((number % 100) / 10) === 1
57496                        ? 'th'
57497                        : b === 1
57498                          ? 'st'
57499                          : b === 2
57500                            ? 'nd'
57501                            : b === 3
57502                              ? 'rd'
57503                              : 'th';
57504            return number + output;
57505        },
57506    });
57507
57508    // Side effect imports
57509
57510    hooks.lang = deprecate(
57511        'moment.lang is deprecated. Use moment.locale instead.',
57512        getSetGlobalLocale
57513    );
57514    hooks.langData = deprecate(
57515        'moment.langData is deprecated. Use moment.localeData instead.',
57516        getLocale
57517    );
57518
57519    var mathAbs = Math.abs;
57520
57521    function abs() {
57522        var data = this._data;
57523
57524        this._milliseconds = mathAbs(this._milliseconds);
57525        this._days = mathAbs(this._days);
57526        this._months = mathAbs(this._months);
57527
57528        data.milliseconds = mathAbs(data.milliseconds);
57529        data.seconds = mathAbs(data.seconds);
57530        data.minutes = mathAbs(data.minutes);
57531        data.hours = mathAbs(data.hours);
57532        data.months = mathAbs(data.months);
57533        data.years = mathAbs(data.years);
57534
57535        return this;
57536    }
57537
57538    function addSubtract$1(duration, input, value, direction) {
57539        var other = createDuration(input, value);
57540
57541        duration._milliseconds += direction * other._milliseconds;
57542        duration._days += direction * other._days;
57543        duration._months += direction * other._months;
57544
57545        return duration._bubble();
57546    }
57547
57548    // supports only 2.0-style add(1, 's') or add(duration)
57549    function add$1(input, value) {
57550        return addSubtract$1(this, input, value, 1);
57551    }
57552
57553    // supports only 2.0-style subtract(1, 's') or subtract(duration)
57554    function subtract$1(input, value) {
57555        return addSubtract$1(this, input, value, -1);
57556    }
57557
57558    function absCeil(number) {
57559        if (number < 0) {
57560            return Math.floor(number);
57561        } else {
57562            return Math.ceil(number);
57563        }
57564    }
57565
57566    function bubble() {
57567        var milliseconds = this._milliseconds,
57568            days = this._days,
57569            months = this._months,
57570            data = this._data,
57571            seconds,
57572            minutes,
57573            hours,
57574            years,
57575            monthsFromDays;
57576
57577        // if we have a mix of positive and negative values, bubble down first
57578        // check: https://github.com/moment/moment/issues/2166
57579        if (
57580            !(
57581                (milliseconds >= 0 && days >= 0 && months >= 0) ||
57582                (milliseconds <= 0 && days <= 0 && months <= 0)
57583            )
57584        ) {
57585            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
57586            days = 0;
57587            months = 0;
57588        }
57589
57590        // The following code bubbles up values, see the tests for
57591        // examples of what that means.
57592        data.milliseconds = milliseconds % 1000;
57593
57594        seconds = absFloor(milliseconds / 1000);
57595        data.seconds = seconds % 60;
57596
57597        minutes = absFloor(seconds / 60);
57598        data.minutes = minutes % 60;
57599
57600        hours = absFloor(minutes / 60);
57601        data.hours = hours % 24;
57602
57603        days += absFloor(hours / 24);
57604
57605        // convert days to months
57606        monthsFromDays = absFloor(daysToMonths(days));
57607        months += monthsFromDays;
57608        days -= absCeil(monthsToDays(monthsFromDays));
57609
57610        // 12 months -> 1 year
57611        years = absFloor(months / 12);
57612        months %= 12;
57613
57614        data.days = days;
57615        data.months = months;
57616        data.years = years;
57617
57618        return this;
57619    }
57620
57621    function daysToMonths(days) {
57622        // 400 years have 146097 days (taking into account leap year rules)
57623        // 400 years have 12 months === 4800
57624        return (days * 4800) / 146097;
57625    }
57626
57627    function monthsToDays(months) {
57628        // the reverse of daysToMonths
57629        return (months * 146097) / 4800;
57630    }
57631
57632    function as(units) {
57633        if (!this.isValid()) {
57634            return NaN;
57635        }
57636        var days,
57637            months,
57638            milliseconds = this._milliseconds;
57639
57640        units = normalizeUnits(units);
57641
57642        if (units === 'month' || units === 'quarter' || units === 'year') {
57643            days = this._days + milliseconds / 864e5;
57644            months = this._months + daysToMonths(days);
57645            switch (units) {
57646                case 'month':
57647                    return months;
57648                case 'quarter':
57649                    return months / 3;
57650                case 'year':
57651                    return months / 12;
57652            }
57653        } else {
57654            // handle milliseconds separately because of floating point math errors (issue #1867)
57655            days = this._days + Math.round(monthsToDays(this._months));
57656            switch (units) {
57657                case 'week':
57658                    return days / 7 + milliseconds / 6048e5;
57659                case 'day':
57660                    return days + milliseconds / 864e5;
57661                case 'hour':
57662                    return days * 24 + milliseconds / 36e5;
57663                case 'minute':
57664                    return days * 1440 + milliseconds / 6e4;
57665                case 'second':
57666                    return days * 86400 + milliseconds / 1000;
57667                // Math.floor prevents floating point math errors here
57668                case 'millisecond':
57669                    return Math.floor(days * 864e5) + milliseconds;
57670                default:
57671                    throw new Error('Unknown unit ' + units);
57672            }
57673        }
57674    }
57675
57676    function makeAs(alias) {
57677        return function () {
57678            return this.as(alias);
57679        };
57680    }
57681
57682    var asMilliseconds = makeAs('ms'),
57683        asSeconds = makeAs('s'),
57684        asMinutes = makeAs('m'),
57685        asHours = makeAs('h'),
57686        asDays = makeAs('d'),
57687        asWeeks = makeAs('w'),
57688        asMonths = makeAs('M'),
57689        asQuarters = makeAs('Q'),
57690        asYears = makeAs('y'),
57691        valueOf$1 = asMilliseconds;
57692
57693    function clone$1() {
57694        return createDuration(this);
57695    }
57696
57697    function get$2(units) {
57698        units = normalizeUnits(units);
57699        return this.isValid() ? this[units + 's']() : NaN;
57700    }
57701
57702    function makeGetter(name) {
57703        return function () {
57704            return this.isValid() ? this._data[name] : NaN;
57705        };
57706    }
57707
57708    var milliseconds = makeGetter('milliseconds'),
57709        seconds = makeGetter('seconds'),
57710        minutes = makeGetter('minutes'),
57711        hours = makeGetter('hours'),
57712        days = makeGetter('days'),
57713        months = makeGetter('months'),
57714        years = makeGetter('years');
57715
57716    function weeks() {
57717        return absFloor(this.days() / 7);
57718    }
57719
57720    var round = Math.round,
57721        thresholds = {
57722            ss: 44, // a few seconds to seconds
57723            s: 45, // seconds to minute
57724            m: 45, // minutes to hour
57725            h: 22, // hours to day
57726            d: 26, // days to month/week
57727            w: null, // weeks to month
57728            M: 11, // months to year
57729        };
57730
57731    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
57732    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
57733        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
57734    }
57735
57736    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
57737        var duration = createDuration(posNegDuration).abs(),
57738            seconds = round(duration.as('s')),
57739            minutes = round(duration.as('m')),
57740            hours = round(duration.as('h')),
57741            days = round(duration.as('d')),
57742            months = round(duration.as('M')),
57743            weeks = round(duration.as('w')),
57744            years = round(duration.as('y')),
57745            a =
57746                (seconds <= thresholds.ss && ['s', seconds]) ||
57747                (seconds < thresholds.s && ['ss', seconds]) ||
57748                (minutes <= 1 && ['m']) ||
57749                (minutes < thresholds.m && ['mm', minutes]) ||
57750                (hours <= 1 && ['h']) ||
57751                (hours < thresholds.h && ['hh', hours]) ||
57752                (days <= 1 && ['d']) ||
57753                (days < thresholds.d && ['dd', days]);
57754
57755        if (thresholds.w != null) {
57756            a =
57757                a ||
57758                (weeks <= 1 && ['w']) ||
57759                (weeks < thresholds.w && ['ww', weeks]);
57760        }
57761        a = a ||
57762            (months <= 1 && ['M']) ||
57763            (months < thresholds.M && ['MM', months]) ||
57764            (years <= 1 && ['y']) || ['yy', years];
57765
57766        a[2] = withoutSuffix;
57767        a[3] = +posNegDuration > 0;
57768        a[4] = locale;
57769        return substituteTimeAgo.apply(null, a);
57770    }
57771
57772    // This function allows you to set the rounding function for relative time strings
57773    function getSetRelativeTimeRounding(roundingFunction) {
57774        if (roundingFunction === undefined) {
57775            return round;
57776        }
57777        if (typeof roundingFunction === 'function') {
57778            round = roundingFunction;
57779            return true;
57780        }
57781        return false;
57782    }
57783
57784    // This function allows you to set a threshold for relative time strings
57785    function getSetRelativeTimeThreshold(threshold, limit) {
57786        if (thresholds[threshold] === undefined) {
57787            return false;
57788        }
57789        if (limit === undefined) {
57790            return thresholds[threshold];
57791        }
57792        thresholds[threshold] = limit;
57793        if (threshold === 's') {
57794            thresholds.ss = limit - 1;
57795        }
57796        return true;
57797    }
57798
57799    function humanize(argWithSuffix, argThresholds) {
57800        if (!this.isValid()) {
57801            return this.localeData().invalidDate();
57802        }
57803
57804        var withSuffix = false,
57805            th = thresholds,
57806            locale,
57807            output;
57808
57809        if (typeof argWithSuffix === 'object') {
57810            argThresholds = argWithSuffix;
57811            argWithSuffix = false;
57812        }
57813        if (typeof argWithSuffix === 'boolean') {
57814            withSuffix = argWithSuffix;
57815        }
57816        if (typeof argThresholds === 'object') {
57817            th = Object.assign({}, thresholds, argThresholds);
57818            if (argThresholds.s != null && argThresholds.ss == null) {
57819                th.ss = argThresholds.s - 1;
57820            }
57821        }
57822
57823        locale = this.localeData();
57824        output = relativeTime$1(this, !withSuffix, th, locale);
57825
57826        if (withSuffix) {
57827            output = locale.pastFuture(+this, output);
57828        }
57829
57830        return locale.postformat(output);
57831    }
57832
57833    var abs$1 = Math.abs;
57834
57835    function sign(x) {
57836        return (x > 0) - (x < 0) || +x;
57837    }
57838
57839    function toISOString$1() {
57840        // for ISO strings we do not use the normal bubbling rules:
57841        //  * milliseconds bubble up until they become hours
57842        //  * days do not bubble at all
57843        //  * months bubble up until they become years
57844        // This is because there is no context-free conversion between hours and days
57845        // (think of clock changes)
57846        // and also not between days and months (28-31 days per month)
57847        if (!this.isValid()) {
57848            return this.localeData().invalidDate();
57849        }
57850
57851        var seconds = abs$1(this._milliseconds) / 1000,
57852            days = abs$1(this._days),
57853            months = abs$1(this._months),
57854            minutes,
57855            hours,
57856            years,
57857            s,
57858            total = this.asSeconds(),
57859            totalSign,
57860            ymSign,
57861            daysSign,
57862            hmsSign;
57863
57864        if (!total) {
57865            // this is the same as C#'s (Noda) and python (isodate)...
57866            // but not other JS (goog.date)
57867            return 'P0D';
57868        }
57869
57870        // 3600 seconds -> 60 minutes -> 1 hour
57871        minutes = absFloor(seconds / 60);
57872        hours = absFloor(minutes / 60);
57873        seconds %= 60;
57874        minutes %= 60;
57875
57876        // 12 months -> 1 year
57877        years = absFloor(months / 12);
57878        months %= 12;
57879
57880        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
57881        s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
57882
57883        totalSign = total < 0 ? '-' : '';
57884        ymSign = sign(this._months) !== sign(total) ? '-' : '';
57885        daysSign = sign(this._days) !== sign(total) ? '-' : '';
57886        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
57887
57888        return (
57889            totalSign +
57890            'P' +
57891            (years ? ymSign + years + 'Y' : '') +
57892            (months ? ymSign + months + 'M' : '') +
57893            (days ? daysSign + days + 'D' : '') +
57894            (hours || minutes || seconds ? 'T' : '') +
57895            (hours ? hmsSign + hours + 'H' : '') +
57896            (minutes ? hmsSign + minutes + 'M' : '') +
57897            (seconds ? hmsSign + s + 'S' : '')
57898        );
57899    }
57900
57901    var proto$2 = Duration.prototype;
57902
57903    proto$2.isValid = isValid$1;
57904    proto$2.abs = abs;
57905    proto$2.add = add$1;
57906    proto$2.subtract = subtract$1;
57907    proto$2.as = as;
57908    proto$2.asMilliseconds = asMilliseconds;
57909    proto$2.asSeconds = asSeconds;
57910    proto$2.asMinutes = asMinutes;
57911    proto$2.asHours = asHours;
57912    proto$2.asDays = asDays;
57913    proto$2.asWeeks = asWeeks;
57914    proto$2.asMonths = asMonths;
57915    proto$2.asQuarters = asQuarters;
57916    proto$2.asYears = asYears;
57917    proto$2.valueOf = valueOf$1;
57918    proto$2._bubble = bubble;
57919    proto$2.clone = clone$1;
57920    proto$2.get = get$2;
57921    proto$2.milliseconds = milliseconds;
57922    proto$2.seconds = seconds;
57923    proto$2.minutes = minutes;
57924    proto$2.hours = hours;
57925    proto$2.days = days;
57926    proto$2.weeks = weeks;
57927    proto$2.months = months;
57928    proto$2.years = years;
57929    proto$2.humanize = humanize;
57930    proto$2.toISOString = toISOString$1;
57931    proto$2.toString = toISOString$1;
57932    proto$2.toJSON = toISOString$1;
57933    proto$2.locale = locale;
57934    proto$2.localeData = localeData;
57935
57936    proto$2.toIsoString = deprecate(
57937        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
57938        toISOString$1
57939    );
57940    proto$2.lang = lang;
57941
57942    // FORMATTING
57943
57944    addFormatToken('X', 0, 0, 'unix');
57945    addFormatToken('x', 0, 0, 'valueOf');
57946
57947    // PARSING
57948
57949    addRegexToken('x', matchSigned);
57950    addRegexToken('X', matchTimestamp);
57951    addParseToken('X', function (input, array, config) {
57952        config._d = new Date(parseFloat(input) * 1000);
57953    });
57954    addParseToken('x', function (input, array, config) {
57955        config._d = new Date(toInt(input));
57956    });
57957
57958    //! moment.js
57959
57960    hooks.version = '2.30.1';
57961
57962    setHookCallback(createLocal);
57963
57964    hooks.fn = proto;
57965    hooks.min = min;
57966    hooks.max = max;
57967    hooks.now = now;
57968    hooks.utc = createUTC;
57969    hooks.unix = createUnix;
57970    hooks.months = listMonths;
57971    hooks.isDate = isDate;
57972    hooks.locale = getSetGlobalLocale;
57973    hooks.invalid = createInvalid;
57974    hooks.duration = createDuration;
57975    hooks.isMoment = isMoment;
57976    hooks.weekdays = listWeekdays;
57977    hooks.parseZone = createInZone;
57978    hooks.localeData = getLocale;
57979    hooks.isDuration = isDuration;
57980    hooks.monthsShort = listMonthsShort;
57981    hooks.weekdaysMin = listWeekdaysMin;
57982    hooks.defineLocale = defineLocale;
57983    hooks.updateLocale = updateLocale;
57984    hooks.locales = listLocales;
57985    hooks.weekdaysShort = listWeekdaysShort;
57986    hooks.normalizeUnits = normalizeUnits;
57987    hooks.relativeTimeRounding = getSetRelativeTimeRounding;
57988    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
57989    hooks.calendarFormat = getCalendarFormat;
57990    hooks.prototype = proto;
57991
57992    // currently HTML5 input type only supports 24-hour formats
57993    hooks.HTML5_FMT = {
57994        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />
57995        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />
57996        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />
57997        DATE: 'YYYY-MM-DD', // <input type="date" />
57998        TIME: 'HH:mm', // <input type="time" />
57999        TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />
58000        TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />
58001        WEEK: 'GGGG-[W]WW', // <input type="week" />
58002        MONTH: 'YYYY-MM', // <input type="month" />
58003    };
58004
58005    return hooks;
58006
58007})));
58008
58009/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module)))
58010
58011/***/ }),
58012
vendor: 89,123 bytes, lines 58013-60642
58013/***/ "./node_modules/popper.js/dist/esm/popper.js":
58014/*!***************************************************!*\
58015  !*** ./node_modules/popper.js/dist/esm/popper.js ***!
58016  \***************************************************/
58017/*! exports provided: default */
58018/***/ (function(module, __webpack_exports__, __webpack_require__) {
58019
58020"use strict";
58021__webpack_require__.r(__webpack_exports__);
58022/* WEBPACK VAR INJECTION */(function(global) {/**!
58023 * @fileOverview Kickass library to create and place poppers near their reference elements.
58024 * @version 1.16.1
58025 * @license
58026 * Copyright (c) 2016 Federico Zivolo and contributors
58027 *
58028 * Permission is hereby granted, free of charge, to any person obtaining a copy
58029 * of this software and associated documentation files (the "Software"), to deal
58030 * in the Software without restriction, including without limitation the rights
58031 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
58032 * copies of the Software, and to permit persons to whom the Software is
58033 * furnished to do so, subject to the following conditions:
58034 *
58035 * The above copyright notice and this permission notice shall be included in all
58036 * copies or substantial portions of the Software.
58037 *
58038 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
58039 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
58040 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
58041 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
58042 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
58043 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
58044 * SOFTWARE.
58045 */
58046var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';
58047
58048var timeoutDuration = function () {
58049  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
58050  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
58051    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
58052      return 1;
58053    }
58054  }
58055  return 0;
58056}();
58057
58058function microtaskDebounce(fn) {
58059  var called = false;
58060  return function () {
58061    if (called) {
58062      return;
58063    }
58064    called = true;
58065    window.Promise.resolve().then(function () {
58066      called = false;
58067      fn();
58068    });
58069  };
58070}
58071
58072function taskDebounce(fn) {
58073  var scheduled = false;
58074  return function () {
58075    if (!scheduled) {
58076      scheduled = true;
58077      setTimeout(function () {
58078        scheduled = false;
58079        fn();
58080      }, timeoutDuration);
58081    }
58082  };
58083}
58084
58085var supportsMicroTasks = isBrowser && window.Promise;
58086
58087/**
58088* Create a debounced version of a method, that's asynchronously deferred
58089* but called in the minimum time possible.
58090*
58091* @method
58092* @memberof Popper.Utils
58093* @argument {Function} fn
58094* @returns {Function}
58095*/
58096var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
58097
58098/**
58099 * Check if the given variable is a function
58100 * @method
58101 * @memberof Popper.Utils
58102 * @argument {Any} functionToCheck - variable to check
58103 * @returns {Boolean} answer to: is a function?
58104 */
58105function isFunction(functionToCheck) {
58106  var getType = {};
58107  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
58108}
58109
58110/**
58111 * Get CSS computed property of the given element
58112 * @method
58113 * @memberof Popper.Utils
58114 * @argument {Eement} element
58115 * @argument {String} property
58116 */
58117function getStyleComputedProperty(element, property) {
58118  if (element.nodeType !== 1) {
58119    return [];
58120  }
58121  // NOTE: 1 DOM access here
58122  var window = element.ownerDocument.defaultView;
58123  var css = window.getComputedStyle(element, null);
58124  return property ? css[property] : css;
58125}
58126
58127/**
58128 * Returns the parentNode or the host of the element
58129 * @method
58130 * @memberof Popper.Utils
58131 * @argument {Element} element
58132 * @returns {Element} parent
58133 */
58134function getParentNode(element) {
58135  if (element.nodeName === 'HTML') {
58136    return element;
58137  }
58138  return element.parentNode || element.host;
58139}
58140
58141/**
58142 * Returns the scrolling parent of the given element
58143 * @method
58144 * @memberof Popper.Utils
58145 * @argument {Element} element
58146 * @returns {Element} scroll parent
58147 */
58148function getScrollParent(element) {
58149  // Return body, `getScroll` will take care to get the correct `scrollTop` from it
58150  if (!element) {
58151    return document.body;
58152  }
58153
58154  switch (element.nodeName) {
58155    case 'HTML':
58156    case 'BODY':
58157      return element.ownerDocument.body;
58158    case '#document':
58159      return element.body;
58160  }
58161
58162  // Firefox want us to check `-x` and `-y` variations as well
58163
58164  var _getStyleComputedProp = getStyleComputedProperty(element),
58165      overflow = _getStyleComputedProp.overflow,
58166      overflowX = _getStyleComputedProp.overflowX,
58167      overflowY = _getStyleComputedProp.overflowY;
58168
58169  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
58170    return element;
58171  }
58172
58173  return getScrollParent(getParentNode(element));
58174}
58175
58176/**
58177 * Returns the reference node of the reference object, or the reference object itself.
58178 * @method
58179 * @memberof Popper.Utils
58180 * @param {Element|Object} reference - the reference element (the popper will be relative to this)
58181 * @returns {Element} parent
58182 */
58183function getReferenceNode(reference) {
58184  return reference && reference.referenceNode ? reference.referenceNode : reference;
58185}
58186
58187var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
58188var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
58189
58190/**
58191 * Determines if the browser is Internet Explorer
58192 * @method
58193 * @memberof Popper.Utils
58194 * @param {Number} version to check
58195 * @returns {Boolean} isIE
58196 */
58197function isIE(version) {
58198  if (version === 11) {
58199    return isIE11;
58200  }
58201  if (version === 10) {
58202    return isIE10;
58203  }
58204  return isIE11 || isIE10;
58205}
58206
58207/**
58208 * Returns the offset parent of the given element
58209 * @method
58210 * @memberof Popper.Utils
58211 * @argument {Element} element
58212 * @returns {Element} offset parent
58213 */
58214function getOffsetParent(element) {
58215  if (!element) {
58216    return document.documentElement;
58217  }
58218
58219  var noOffsetParent = isIE(10) ? document.body : null;
58220
58221  // NOTE: 1 DOM access here
58222  var offsetParent = element.offsetParent || null;
58223  // Skip hidden elements which don't have an offsetParent
58224  while (offsetParent === noOffsetParent && element.nextElementSibling) {
58225    offsetParent = (element = element.nextElementSibling).offsetParent;
58226  }
58227
58228  var nodeName = offsetParent && offsetParent.nodeName;
58229
58230  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
58231    return element ? element.ownerDocument.documentElement : document.documentElement;
58232  }
58233
58234  // .offsetParent will return the closest TH, TD or TABLE in case
58235  // no offsetParent is present, I hate this job...
58236  if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {
58237    return getOffsetParent(offsetParent);
58238  }
58239
58240  return offsetParent;
58241}
58242
58243function isOffsetContainer(element) {
58244  var nodeName = element.nodeName;
58245
58246  if (nodeName === 'BODY') {
58247    return false;
58248  }
58249  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;
58250}
58251
58252/**
58253 * Finds the root node (document, shadowDOM root) of the given element
58254 * @method
58255 * @memberof Popper.Utils
58256 * @argument {Element} node
58257 * @returns {Element} root node
58258 */
58259function getRoot(node) {
58260  if (node.parentNode !== null) {
58261    return getRoot(node.parentNode);
58262  }
58263
58264  return node;
58265}
58266
58267/**
58268 * Finds the offset parent common to the two provided nodes
58269 * @method
58270 * @memberof Popper.Utils
58271 * @argument {Element} element1
58272 * @argument {Element} element2
58273 * @returns {Element} common offset parent
58274 */
58275function findCommonOffsetParent(element1, element2) {
58276  // This check is needed to avoid errors in case one of the elements isn't defined for any reason
58277  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
58278    return document.documentElement;
58279  }
58280
58281  // Here we make sure to give as "start" the element that comes first in the DOM
58282  var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;
58283  var start = order ? element1 : element2;
58284  var end = order ? element2 : element1;
58285
58286  // Get common ancestor container
58287  var range = document.createRange();
58288  range.setStart(start, 0);
58289  range.setEnd(end, 0);
58290  var commonAncestorContainer = range.commonAncestorContainer;
58291
58292  // Both nodes are inside #document
58293
58294  if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {
58295    if (isOffsetContainer(commonAncestorContainer)) {
58296      return commonAncestorContainer;
58297    }
58298
58299    return getOffsetParent(commonAncestorContainer);
58300  }
58301
58302  // one of the nodes is inside shadowDOM, find which one
58303  var element1root = getRoot(element1);
58304  if (element1root.host) {
58305    return findCommonOffsetParent(element1root.host, element2);
58306  } else {
58307    return findCommonOffsetParent(element1, getRoot(element2).host);
58308  }
58309}
58310
58311/**
58312 * Gets the scroll value of the given element in the given side (top and left)
58313 * @method
58314 * @memberof Popper.Utils
58315 * @argument {Element} element
58316 * @argument {String} side `top` or `left`
58317 * @returns {number} amount of scrolled pixels
58318 */
58319function getScroll(element) {
58320  var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';
58321
58322  var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';
58323  var nodeName = element.nodeName;
58324
58325  if (nodeName === 'BODY' || nodeName === 'HTML') {
58326    var html = element.ownerDocument.documentElement;
58327    var scrollingElement = element.ownerDocument.scrollingElement || html;
58328    return scrollingElement[upperSide];
58329  }
58330
58331  return element[upperSide];
58332}
58333
58334/*
58335 * Sum or subtract the element scroll values (left and top) from a given rect object
58336 * @method
58337 * @memberof Popper.Utils
58338 * @param {Object} rect - Rect object you want to change
58339 * @param {HTMLElement} element - The element from the function reads the scroll values
58340 * @param {Boolean} subtract - set to true if you want to subtract the scroll values
58341 * @return {Object} rect - The modifier rect object
58342 */
58343function includeScroll(rect, element) {
58344  var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
58345
58346  var scrollTop = getScroll(element, 'top');
58347  var scrollLeft = getScroll(element, 'left');
58348  var modifier = subtract ? -1 : 1;
58349  rect.top += scrollTop * modifier;
58350  rect.bottom += scrollTop * modifier;
58351  rect.left += scrollLeft * modifier;
58352  rect.right += scrollLeft * modifier;
58353  return rect;
58354}
58355
58356/*
58357 * Helper to detect borders of a given element
58358 * @method
58359 * @memberof Popper.Utils
58360 * @param {CSSStyleDeclaration} styles
58361 * Result of `getStyleComputedProperty` on the given element
58362 * @param {String} axis - `x` or `y`
58363 * @return {number} borders - The borders size of the given axis
58364 */
58365
58366function getBordersSize(styles, axis) {
58367  var sideA = axis === 'x' ? 'Left' : 'Top';
58368  var sideB = sideA === 'Left' ? 'Right' : 'Bottom';
58369
58370  return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);
58371}
58372
58373function getSize(axis, body, html, computedStyle) {
58374  return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);
58375}
58376
58377function getWindowSizes(document) {
58378  var body = document.body;
58379  var html = document.documentElement;
58380  var computedStyle = isIE(10) && getComputedStyle(html);
58381
58382  return {
58383    height: getSize('Height', body, html, computedStyle),
58384    width: getSize('Width', body, html, computedStyle)
58385  };
58386}
58387
58388var classCallCheck = function (instance, Constructor) {
58389  if (!(instance instanceof Constructor)) {
58390    throw new TypeError("Cannot call a class as a function");
58391  }
58392};
58393
58394var createClass = function () {
58395  function defineProperties(target, props) {
58396    for (var i = 0; i < props.length; i++) {
58397      var descriptor = props[i];
58398      descriptor.enumerable = descriptor.enumerable || false;
58399      descriptor.configurable = true;
58400      if ("value" in descriptor) descriptor.writable = true;
58401      Object.defineProperty(target, descriptor.key, descriptor);
58402    }
58403  }
58404
58405  return function (Constructor, protoProps, staticProps) {
58406    if (protoProps) defineProperties(Constructor.prototype, protoProps);
58407    if (staticProps) defineProperties(Constructor, staticProps);
58408    return Constructor;
58409  };
58410}();
58411
58412
58413
58414
58415
58416var defineProperty = function (obj, key, value) {
58417  if (key in obj) {
58418    Object.defineProperty(obj, key, {
58419      value: value,
58420      enumerable: true,
58421      configurable: true,
58422      writable: true
58423    });
58424  } else {
58425    obj[key] = value;
58426  }
58427
58428  return obj;
58429};
58430
58431var _extends = Object.assign || function (target) {
58432  for (var i = 1; i < arguments.length; i++) {
58433    var source = arguments[i];
58434
58435    for (var key in source) {
58436      if (Object.prototype.hasOwnProperty.call(source, key)) {
58437        target[key] = source[key];
58438      }
58439    }
58440  }
58441
58442  return target;
58443};
58444
58445/**
58446 * Given element offsets, generate an output similar to getBoundingClientRect
58447 * @method
58448 * @memberof Popper.Utils
58449 * @argument {Object} offsets
58450 * @returns {Object} ClientRect like output
58451 */
58452function getClientRect(offsets) {
58453  return _extends({}, offsets, {
58454    right: offsets.left + offsets.width,
58455    bottom: offsets.top + offsets.height
58456  });
58457}
58458
58459/**
58460 * Get bounding client rect of given element
58461 * @method
58462 * @memberof Popper.Utils
58463 * @param {HTMLElement} element
58464 * @return {Object} client rect
58465 */
58466function getBoundingClientRect(element) {
58467  var rect = {};
58468
58469  // IE10 10 FIX: Please, don't ask, the element isn't
58470  // considered in DOM in some circumstances...
58471  // This isn't reproducible in IE10 compatibility mode of IE11
58472  try {
58473    if (isIE(10)) {
58474      rect = element.getBoundingClientRect();
58475      var scrollTop = getScroll(element, 'top');
58476      var scrollLeft = getScroll(element, 'left');
58477      rect.top += scrollTop;
58478      rect.left += scrollLeft;
58479      rect.bottom += scrollTop;
58480      rect.right += scrollLeft;
58481    } else {
58482      rect = element.getBoundingClientRect();
58483    }
58484  } catch (e) {}
58485
58486  var result = {
58487    left: rect.left,
58488    top: rect.top,
58489    width: rect.right - rect.left,
58490    height: rect.bottom - rect.top
58491  };
58492
58493  // subtract scrollbar size from sizes
58494  var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};
58495  var width = sizes.width || element.clientWidth || result.width;
58496  var height = sizes.height || element.clientHeight || result.height;
58497
58498  var horizScrollbar = element.offsetWidth - width;
58499  var vertScrollbar = element.offsetHeight - height;
58500
58501  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`
58502  // we make this check conditional for performance reasons
58503  if (horizScrollbar || vertScrollbar) {
58504    var styles = getStyleComputedProperty(element);
58505    horizScrollbar -= getBordersSize(styles, 'x');
58506    vertScrollbar -= getBordersSize(styles, 'y');
58507
58508    result.width -= horizScrollbar;
58509    result.height -= vertScrollbar;
58510  }
58511
58512  return getClientRect(result);
58513}
58514
58515function getOffsetRectRelativeToArbitraryNode(children, parent) {
58516  var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
58517
58518  var isIE10 = isIE(10);
58519  var isHTML = parent.nodeName === 'HTML';
58520  var childrenRect = getBoundingClientRect(children);
58521  var parentRect = getBoundingClientRect(parent);
58522  var scrollParent = getScrollParent(children);
58523
58524  var styles = getStyleComputedProperty(parent);
58525  var borderTopWidth = parseFloat(styles.borderTopWidth);
58526  var borderLeftWidth = parseFloat(styles.borderLeftWidth);
58527
58528  // In cases where the parent is fixed, we must ignore negative scroll in offset calc
58529  if (fixedPosition && isHTML) {
58530    parentRect.top = Math.max(parentRect.top, 0);
58531    parentRect.left = Math.max(parentRect.left, 0);
58532  }
58533  var offsets = getClientRect({
58534    top: childrenRect.top - parentRect.top - borderTopWidth,
58535    left: childrenRect.left - parentRect.left - borderLeftWidth,
58536    width: childrenRect.width,
58537    height: childrenRect.height
58538  });
58539  offsets.marginTop = 0;
58540  offsets.marginLeft = 0;
58541
58542  // Subtract margins of documentElement in case it's being used as parent
58543  // we do this only on HTML because it's the only element that behaves
58544  // differently when margins are applied to it. The margins are included in
58545  // the box of the documentElement, in the other cases not.
58546  if (!isIE10 && isHTML) {
58547    var marginTop = parseFloat(styles.marginTop);
58548    var marginLeft = parseFloat(styles.marginLeft);
58549
58550    offsets.top -= borderTopWidth - marginTop;
58551    offsets.bottom -= borderTopWidth - marginTop;
58552    offsets.left -= borderLeftWidth - marginLeft;
58553    offsets.right -= borderLeftWidth - marginLeft;
58554
58555    // Attach marginTop and marginLeft because in some circumstances we may need them
58556    offsets.marginTop = marginTop;
58557    offsets.marginLeft = marginLeft;
58558  }
58559
58560  if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
58561    offsets = includeScroll(offsets, parent);
58562  }
58563
58564  return offsets;
58565}
58566
58567function getViewportOffsetRectRelativeToArtbitraryNode(element) {
58568  var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
58569
58570  var html = element.ownerDocument.documentElement;
58571  var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
58572  var width = Math.max(html.clientWidth, window.innerWidth || 0);
58573  var height = Math.max(html.clientHeight, window.innerHeight || 0);
58574
58575  var scrollTop = !excludeScroll ? getScroll(html) : 0;
58576  var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
58577
58578  var offset = {
58579    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
58580    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,
58581    width: width,
58582    height: height
58583  };
58584
58585  return getClientRect(offset);
58586}
58587
58588/**
58589 * Check if the given element is fixed or is inside a fixed parent
58590 * @method
58591 * @memberof Popper.Utils
58592 * @argument {Element} element
58593 * @argument {Element} customContainer
58594 * @returns {Boolean} answer to "isFixed?"
58595 */
58596function isFixed(element) {
58597  var nodeName = element.nodeName;
58598  if (nodeName === 'BODY' || nodeName === 'HTML') {
58599    return false;
58600  }
58601  if (getStyleComputedProperty(element, 'position') === 'fixed') {
58602    return true;
58603  }
58604  var parentNode = getParentNode(element);
58605  if (!parentNode) {
58606    return false;
58607  }
58608  return isFixed(parentNode);
58609}
58610
58611/**
58612 * Finds the first parent of an element that has a transformed property defined
58613 * @method
58614 * @memberof Popper.Utils
58615 * @argument {Element} element
58616 * @returns {Element} first transformed parent or documentElement
58617 */
58618
58619function getFixedPositionOffsetParent(element) {
58620  // This check is needed to avoid errors in case one of the elements isn't defined for any reason
58621  if (!element || !element.parentElement || isIE()) {
58622    return document.documentElement;
58623  }
58624  var el = element.parentElement;
58625  while (el && getStyleComputedProperty(el, 'transform') === 'none') {
58626    el = el.parentElement;
58627  }
58628  return el || document.documentElement;
58629}
58630
58631/**
58632 * Computed the boundaries limits and return them
58633 * @method
58634 * @memberof Popper.Utils
58635 * @param {HTMLElement} popper
58636 * @param {HTMLElement} reference
58637 * @param {number} padding
58638 * @param {HTMLElement} boundariesElement - Element used to define the boundaries
58639 * @param {Boolean} fixedPosition - Is in fixed position mode
58640 * @returns {Object} Coordinates of the boundaries
58641 */
58642function getBoundaries(popper, reference, padding, boundariesElement) {
58643  var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
58644
58645  // NOTE: 1 DOM access here
58646
58647  var boundaries = { top: 0, left: 0 };
58648  var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));
58649
58650  // Handle viewport case
58651  if (boundariesElement === 'viewport') {
58652    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
58653  } else {
58654    // Handle other cases based on DOM element used as boundaries
58655    var boundariesNode = void 0;
58656    if (boundariesElement === 'scrollParent') {
58657      boundariesNode = getScrollParent(getParentNode(reference));
58658      if (boundariesNode.nodeName === 'BODY') {
58659        boundariesNode = popper.ownerDocument.documentElement;
58660      }
58661    } else if (boundariesElement === 'window') {
58662      boundariesNode = popper.ownerDocument.documentElement;
58663    } else {
58664      boundariesNode = boundariesElement;
58665    }
58666
58667    var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
58668
58669    // In case of HTML, we need a different computation
58670    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
58671      var _getWindowSizes = getWindowSizes(popper.ownerDocument),
58672          height = _getWindowSizes.height,
58673          width = _getWindowSizes.width;
58674
58675      boundaries.top += offsets.top - offsets.marginTop;
58676      boundaries.bottom = height + offsets.top;
58677      boundaries.left += offsets.left - offsets.marginLeft;
58678      boundaries.right = width + offsets.left;
58679    } else {
58680      // for all the other DOM elements, this one is good
58681      boundaries = offsets;
58682    }
58683  }
58684
58685  // Add paddings
58686  padding = padding || 0;
58687  var isPaddingNumber = typeof padding === 'number';
58688  boundaries.left += isPaddingNumber ? padding : padding.left || 0;
58689  boundaries.top += isPaddingNumber ? padding : padding.top || 0;
58690  boundaries.right -= isPaddingNumber ? padding : padding.right || 0;
58691  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;
58692
58693  return boundaries;
58694}
58695
58696function getArea(_ref) {
58697  var width = _ref.width,
58698      height = _ref.height;
58699
58700  return width * height;
58701}
58702
58703/**
58704 * Utility used to transform the `auto` placement to the placement with more
58705 * available space.
58706 * @method
58707 * @memberof Popper.Utils
58708 * @argument {Object} data - The data object generated by update method
58709 * @argument {Object} options - Modifiers configuration and options
58710 * @returns {Object} The data object, properly modified
58711 */
58712function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {
58713  var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
58714
58715  if (placement.indexOf('auto') === -1) {
58716    return placement;
58717  }
58718
58719  var boundaries = getBoundaries(popper, reference, padding, boundariesElement);
58720
58721  var rects = {
58722    top: {
58723      width: boundaries.width,
58724      height: refRect.top - boundaries.top
58725    },
58726    right: {
58727      width: boundaries.right - refRect.right,
58728      height: boundaries.height
58729    },
58730    bottom: {
58731      width: boundaries.width,
58732      height: boundaries.bottom - refRect.bottom
58733    },
58734    left: {
58735      width: refRect.left - boundaries.left,
58736      height: boundaries.height
58737    }
58738  };
58739
58740  var sortedAreas = Object.keys(rects).map(function (key) {
58741    return _extends({
58742      key: key
58743    }, rects[key], {
58744      area: getArea(rects[key])
58745    });
58746  }).sort(function (a, b) {
58747    return b.area - a.area;
58748  });
58749
58750  var filteredAreas = sortedAreas.filter(function (_ref2) {
58751    var width = _ref2.width,
58752        height = _ref2.height;
58753    return width >= popper.clientWidth && height >= popper.clientHeight;
58754  });
58755
58756  var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;
58757
58758  var variation = placement.split('-')[1];
58759
58760  return computedPlacement + (variation ? '-' + variation : '');
58761}
58762
58763/**
58764 * Get offsets to the reference element
58765 * @method
58766 * @memberof Popper.Utils
58767 * @param {Object} state
58768 * @param {Element} popper - the popper element
58769 * @param {Element} reference - the reference element (the popper will be relative to this)
58770 * @param {Element} fixedPosition - is in fixed position mode
58771 * @returns {Object} An object containing the offsets which will be applied to the popper
58772 */
58773function getReferenceOffsets(state, popper, reference) {
58774  var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
58775
58776  var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));
58777  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
58778}
58779
58780/**
58781 * Get the outer sizes of the given element (offset size + margins)
58782 * @method
58783 * @memberof Popper.Utils
58784 * @argument {Element} element
58785 * @returns {Object} object containing width and height properties
58786 */
58787function getOuterSizes(element) {
58788  var window = element.ownerDocument.defaultView;
58789  var styles = window.getComputedStyle(element);
58790  var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);
58791  var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);
58792  var result = {
58793    width: element.offsetWidth + y,
58794    height: element.offsetHeight + x
58795  };
58796  return result;
58797}
58798
58799/**
58800 * Get the opposite placement of the given one
58801 * @method
58802 * @memberof Popper.Utils
58803 * @argument {String} placement
58804 * @returns {String} flipped placement
58805 */
58806function getOppositePlacement(placement) {
58807  var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };
58808  return placement.replace(/left|right|bottom|top/g, function (matched) {
58809    return hash[matched];
58810  });
58811}
58812
58813/**
58814 * Get offsets to the popper
58815 * @method
58816 * @memberof Popper.Utils
58817 * @param {Object} position - CSS position the Popper will get applied
58818 * @param {HTMLElement} popper - the popper element
58819 * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)
58820 * @param {String} placement - one of the valid placement options
58821 * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper
58822 */
58823function getPopperOffsets(popper, referenceOffsets, placement) {
58824  placement = placement.split('-')[0];
58825
58826  // Get popper node sizes
58827  var popperRect = getOuterSizes(popper);
58828
58829  // Add position, width and height to our offsets object
58830  var popperOffsets = {
58831    width: popperRect.width,
58832    height: popperRect.height
58833  };
58834
58835  // depending by the popper placement we have to compute its offsets slightly differently
58836  var isHoriz = ['right', 'left'].indexOf(placement) !== -1;
58837  var mainSide = isHoriz ? 'top' : 'left';
58838  var secondarySide = isHoriz ? 'left' : 'top';
58839  var measurement = isHoriz ? 'height' : 'width';
58840  var secondaryMeasurement = !isHoriz ? 'height' : 'width';
58841
58842  popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;
58843  if (placement === secondarySide) {
58844    popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];
58845  } else {
58846    popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];
58847  }
58848
58849  return popperOffsets;
58850}
58851
58852/**
58853 * Mimics the `find` method of Array
58854 * @method
58855 * @memberof Popper.Utils
58856 * @argument {Array} arr
58857 * @argument prop
58858 * @argument value
58859 * @returns index or -1
58860 */
58861function find(arr, check) {
58862  // use native find if supported
58863  if (Array.prototype.find) {
58864    return arr.find(check);
58865  }
58866
58867  // use `filter` to obtain the same behavior of `find`
58868  return arr.filter(check)[0];
58869}
58870
58871/**
58872 * Return the index of the matching object
58873 * @method
58874 * @memberof Popper.Utils
58875 * @argument {Array} arr
58876 * @argument prop
58877 * @argument value
58878 * @returns index or -1
58879 */
58880function findIndex(arr, prop, value) {
58881  // use native findIndex if supported
58882  if (Array.prototype.findIndex) {
58883    return arr.findIndex(function (cur) {
58884      return cur[prop] === value;
58885    });
58886  }
58887
58888  // use `find` + `indexOf` if `findIndex` isn't supported
58889  var match = find(arr, function (obj) {
58890    return obj[prop] === value;
58891  });
58892  return arr.indexOf(match);
58893}
58894
58895/**
58896 * Loop trough the list of modifiers and run them in order,
58897 * each of them will then edit the data object.
58898 * @method
58899 * @memberof Popper.Utils
58900 * @param {dataObject} data
58901 * @param {Array} modifiers
58902 * @param {String} ends - Optional modifier name used as stopper
58903 * @returns {dataObject}
58904 */
58905function runModifiers(modifiers, data, ends) {
58906  var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
58907
58908  modifiersToRun.forEach(function (modifier) {
58909    if (modifier['function']) {
58910      // eslint-disable-line dot-notation
58911      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
58912    }
58913    var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
58914    if (modifier.enabled && isFunction(fn)) {
58915      // Add properties to offsets to make them a complete clientRect object
58916      // we do this before each modifier to make sure the previous one doesn't
58917      // mess with these values
58918      data.offsets.popper = getClientRect(data.offsets.popper);
58919      data.offsets.reference = getClientRect(data.offsets.reference);
58920
58921      data = fn(data, modifier);
58922    }
58923  });
58924
58925  return data;
58926}
58927
58928/**
58929 * Updates the position of the popper, computing the new offsets and applying
58930 * the new style.<br />
58931 * Prefer `scheduleUpdate` over `update` because of performance reasons.
58932 * @method
58933 * @memberof Popper
58934 */
58935function update() {
58936  // if popper is destroyed, don't perform any further update
58937  if (this.state.isDestroyed) {
58938    return;
58939  }
58940
58941  var data = {
58942    instance: this,
58943    styles: {},
58944    arrowStyles: {},
58945    attributes: {},
58946    flipped: false,
58947    offsets: {}
58948  };
58949
58950  // compute reference element offsets
58951  data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
58952
58953  // compute auto placement, store placement inside the data object,
58954  // modifiers will be able to edit `placement` if needed
58955  // and refer to originalPlacement to know the original value
58956  data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);
58957
58958  // store the computed placement inside `originalPlacement`
58959  data.originalPlacement = data.placement;
58960
58961  data.positionFixed = this.options.positionFixed;
58962
58963  // compute the popper offsets
58964  data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
58965
58966  data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
58967
58968  // run the modifiers
58969  data = runModifiers(this.modifiers, data);
58970
58971  // the first `update` will call `onCreate` callback
58972  // the other ones will call `onUpdate` callback
58973  if (!this.state.isCreated) {
58974    this.state.isCreated = true;
58975    this.options.onCreate(data);
58976  } else {
58977    this.options.onUpdate(data);
58978  }
58979}
58980
58981/**
58982 * Helper used to know if the given modifier is enabled.
58983 * @method
58984 * @memberof Popper.Utils
58985 * @returns {Boolean}
58986 */
58987function isModifierEnabled(modifiers, modifierName) {
58988  return modifiers.some(function (_ref) {
58989    var name = _ref.name,
58990        enabled = _ref.enabled;
58991    return enabled && name === modifierName;
58992  });
58993}
58994
58995/**
58996 * Get the prefixed supported property name
58997 * @method
58998 * @memberof Popper.Utils
58999 * @argument {String} property (camelCase)
59000 * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)
59001 */
59002function getSupportedPropertyName(property) {
59003  var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
59004  var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
59005
59006  for (var i = 0; i < prefixes.length; i++) {
59007    var prefix = prefixes[i];
59008    var toCheck = prefix ? '' + prefix + upperProp : property;
59009    if (typeof document.body.style[toCheck] !== 'undefined') {
59010      return toCheck;
59011    }
59012  }
59013  return null;
59014}
59015
59016/**
59017 * Destroys the popper.
59018 * @method
59019 * @memberof Popper
59020 */
59021function destroy() {
59022  this.state.isDestroyed = true;
59023
59024  // touch DOM only if `applyStyle` modifier is enabled
59025  if (isModifierEnabled(this.modifiers, 'applyStyle')) {
59026    this.popper.removeAttribute('x-placement');
59027    this.popper.style.position = '';
59028    this.popper.style.top = '';
59029    this.popper.style.left = '';
59030    this.popper.style.right = '';
59031    this.popper.style.bottom = '';
59032    this.popper.style.willChange = '';
59033    this.popper.style[getSupportedPropertyName('transform')] = '';
59034  }
59035
59036  this.disableEventListeners();
59037
59038  // remove the popper if user explicitly asked for the deletion on destroy
59039  // do not use `remove` because IE11 doesn't support it
59040  if (this.options.removeOnDestroy) {
59041    this.popper.parentNode.removeChild(this.popper);
59042  }
59043  return this;
59044}
59045
59046/**
59047 * Get the window associated with the element
59048 * @argument {Element} element
59049 * @returns {Window}
59050 */
59051function getWindow(element) {
59052  var ownerDocument = element.ownerDocument;
59053  return ownerDocument ? ownerDocument.defaultView : window;
59054}
59055
59056function attachToScrollParents(scrollParent, event, callback, scrollParents) {
59057  var isBody = scrollParent.nodeName === 'BODY';
59058  var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
59059  target.addEventListener(event, callback, { passive: true });
59060
59061  if (!isBody) {
59062    attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);
59063  }
59064  scrollParents.push(target);
59065}
59066
59067/**
59068 * Setup needed event listeners used to update the popper position
59069 * @method
59070 * @memberof Popper.Utils
59071 * @private
59072 */
59073function setupEventListeners(reference, options, state, updateBound) {
59074  // Resize event listener on window
59075  state.updateBound = updateBound;
59076  getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
59077
59078  // Scroll event listener on scroll parents
59079  var scrollElement = getScrollParent(reference);
59080  attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);
59081  state.scrollElement = scrollElement;
59082  state.eventsEnabled = true;
59083
59084  return state;
59085}
59086
59087/**
59088 * It will add resize/scroll events and start recalculating
59089 * position of the popper element when they are triggered.
59090 * @method
59091 * @memberof Popper
59092 */
59093function enableEventListeners() {
59094  if (!this.state.eventsEnabled) {
59095    this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);
59096  }
59097}
59098
59099/**
59100 * Remove event listeners used to update the popper position
59101 * @method
59102 * @memberof Popper.Utils
59103 * @private
59104 */
59105function removeEventListeners(reference, state) {
59106  // Remove resize event listener on window
59107  getWindow(reference).removeEventListener('resize', state.updateBound);
59108
59109  // Remove scroll event listener on scroll parents
59110  state.scrollParents.forEach(function (target) {
59111    target.removeEventListener('scroll', state.updateBound);
59112  });
59113
59114  // Reset state
59115  state.updateBound = null;
59116  state.scrollParents = [];
59117  state.scrollElement = null;
59118  state.eventsEnabled = false;
59119  return state;
59120}
59121
59122/**
59123 * It will remove resize/scroll events and won't recalculate popper position
59124 * when they are triggered. It also won't trigger `onUpdate` callback anymore,
59125 * unless you call `update` method manually.
59126 * @method
59127 * @memberof Popper
59128 */
59129function disableEventListeners() {
59130  if (this.state.eventsEnabled) {
59131    cancelAnimationFrame(this.scheduleUpdate);
59132    this.state = removeEventListeners(this.reference, this.state);
59133  }
59134}
59135
59136/**
59137 * Tells if a given input is a number
59138 * @method
59139 * @memberof Popper.Utils
59140 * @param {*} input to check
59141 * @return {Boolean}
59142 */
59143function isNumeric(n) {
59144  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);
59145}
59146
59147/**
59148 * Set the style to the given popper
59149 * @method
59150 * @memberof Popper.Utils
59151 * @argument {Element} element - Element to apply the style to
59152 * @argument {Object} styles
59153 * Object with a list of properties and values which will be applied to the element
59154 */
59155function setStyles(element, styles) {
59156  Object.keys(styles).forEach(function (prop) {
59157    var unit = '';
59158    // add unit if the value is numeric and is one of the following
59159    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {
59160      unit = 'px';
59161    }
59162    element.style[prop] = styles[prop] + unit;
59163  });
59164}
59165
59166/**
59167 * Set the attributes to the given popper
59168 * @method
59169 * @memberof Popper.Utils
59170 * @argument {Element} element - Element to apply the attributes to
59171 * @argument {Object} styles
59172 * Object with a list of properties and values which will be applied to the element
59173 */
59174function setAttributes(element, attributes) {
59175  Object.keys(attributes).forEach(function (prop) {
59176    var value = attributes[prop];
59177    if (value !== false) {
59178      element.setAttribute(prop, attributes[prop]);
59179    } else {
59180      element.removeAttribute(prop);
59181    }
59182  });
59183}
59184
59185/**
59186 * @function
59187 * @memberof Modifiers
59188 * @argument {Object} data - The data object generated by `update` method
59189 * @argument {Object} data.styles - List of style properties - values to apply to popper element
59190 * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element
59191 * @argument {Object} options - Modifiers configuration and options
59192 * @returns {Object} The same data object
59193 */
59194function applyStyle(data) {
59195  // any property present in `data.styles` will be applied to the popper,
59196  // in this way we can make the 3rd party modifiers add custom styles to it
59197  // Be aware, modifiers could override the properties defined in the previous
59198  // lines of this modifier!
59199  setStyles(data.instance.popper, data.styles);
59200
59201  // any property present in `data.attributes` will be applied to the popper,
59202  // they will be set as HTML attributes of the element
59203  setAttributes(data.instance.popper, data.attributes);
59204
59205  // if arrowElement is defined and arrowStyles has some properties
59206  if (data.arrowElement && Object.keys(data.arrowStyles).length) {
59207    setStyles(data.arrowElement, data.arrowStyles);
59208  }
59209
59210  return data;
59211}
59212
59213/**
59214 * Set the x-placement attribute before everything else because it could be used
59215 * to add margins to the popper margins needs to be calculated to get the
59216 * correct popper offsets.
59217 * @method
59218 * @memberof Popper.modifiers
59219 * @param {HTMLElement} reference - The reference element used to position the popper
59220 * @param {HTMLElement} popper - The HTML element used as popper
59221 * @param {Object} options - Popper.js options
59222 */
59223function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
59224  // compute reference element offsets
59225  var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
59226
59227  // compute auto placement, store placement inside the data object,
59228  // modifiers will be able to edit `placement` if needed
59229  // and refer to originalPlacement to know the original value
59230  var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);
59231
59232  popper.setAttribute('x-placement', placement);
59233
59234  // Apply `position` to popper before anything else because
59235  // without the position applied we can't guarantee correct computations
59236  setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
59237
59238  return options;
59239}
59240
59241/**
59242 * @function
59243 * @memberof Popper.Utils
59244 * @argument {Object} data - The data object generated by `update` method
59245 * @argument {Boolean} shouldRound - If the offsets should be rounded at all
59246 * @returns {Object} The popper's position offsets rounded
59247 *
59248 * The tale of pixel-perfect positioning. It's still not 100% perfect, but as
59249 * good as it can be within reason.
59250 * Discussion here: https://github.com/FezVrasta/popper.js/pull/715
59251 *
59252 * Low DPI screens cause a popper to be blurry if not using full pixels (Safari
59253 * as well on High DPI screens).
59254 *
59255 * Firefox prefers no rounding for positioning and does not have blurriness on
59256 * high DPI screens.
59257 *
59258 * Only horizontal placement and left/right values need to be considered.
59259 */
59260function getRoundedOffsets(data, shouldRound) {
59261  var _data$offsets = data.offsets,
59262      popper = _data$offsets.popper,
59263      reference = _data$offsets.reference;
59264  var round = Math.round,
59265      floor = Math.floor;
59266
59267  var noRound = function noRound(v) {
59268    return v;
59269  };
59270
59271  var referenceWidth = round(reference.width);
59272  var popperWidth = round(popper.width);
59273
59274  var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
59275  var isVariation = data.placement.indexOf('-') !== -1;
59276  var sameWidthParity = referenceWidth % 2 === popperWidth % 2;
59277  var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;
59278
59279  var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;
59280  var verticalToInteger = !shouldRound ? noRound : round;
59281
59282  return {
59283    left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),
59284    top: verticalToInteger(popper.top),
59285    bottom: verticalToInteger(popper.bottom),
59286    right: horizontalToInteger(popper.right)
59287  };
59288}
59289
59290var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);
59291
59292/**
59293 * @function
59294 * @memberof Modifiers
59295 * @argument {Object} data - The data object generated by `update` method
59296 * @argument {Object} options - Modifiers configuration and options
59297 * @returns {Object} The data object, properly modified
59298 */
59299function computeStyle(data, options) {
59300  var x = options.x,
59301      y = options.y;
59302  var popper = data.offsets.popper;
59303
59304  // Remove this legacy support in Popper.js v2
59305
59306  var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {
59307    return modifier.name === 'applyStyle';
59308  }).gpuAcceleration;
59309  if (legacyGpuAccelerationOption !== undefined) {
59310    console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');
59311  }
59312  var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;
59313
59314  var offsetParent = getOffsetParent(data.instance.popper);
59315  var offsetParentRect = getBoundingClientRect(offsetParent);
59316
59317  // Styles
59318  var styles = {
59319    position: popper.position
59320  };
59321
59322  var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);
59323
59324  var sideA = x === 'bottom' ? 'top' : 'bottom';
59325  var sideB = y === 'right' ? 'left' : 'right';
59326
59327  // if gpuAcceleration is set to `true` and transform is supported,
59328  //  we use `translate3d` to apply the position to the popper we
59329  // automatically use the supported prefixed version if needed
59330  var prefixedProperty = getSupportedPropertyName('transform');
59331
59332  // now, let's make a step back and look at this code closely (wtf?)
59333  // If the content of the popper grows once it's been positioned, it
59334  // may happen that the popper gets misplaced because of the new content
59335  // overflowing its reference element
59336  // To avoid this problem, we provide two options (x and y), which allow
59337  // the consumer to define the offset origin.
59338  // If we position a popper on top of a reference element, we can set
59339  // `x` to `top` to make the popper grow towards its top instead of
59340  // its bottom.
59341  var left = void 0,
59342      top = void 0;
59343  if (sideA === 'bottom') {
59344    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)
59345    // and not the bottom of the html element
59346    if (offsetParent.nodeName === 'HTML') {
59347      top = -offsetParent.clientHeight + offsets.bottom;
59348    } else {
59349      top = -offsetParentRect.height + offsets.bottom;
59350    }
59351  } else {
59352    top = offsets.top;
59353  }
59354  if (sideB === 'right') {
59355    if (offsetParent.nodeName === 'HTML') {
59356      left = -offsetParent.clientWidth + offsets.right;
59357    } else {
59358      left = -offsetParentRect.width + offsets.right;
59359    }
59360  } else {
59361    left = offsets.left;
59362  }
59363  if (gpuAcceleration && prefixedProperty) {
59364    styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';
59365    styles[sideA] = 0;
59366    styles[sideB] = 0;
59367    styles.willChange = 'transform';
59368  } else {
59369    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties
59370    var invertTop = sideA === 'bottom' ? -1 : 1;
59371    var invertLeft = sideB === 'right' ? -1 : 1;
59372    styles[sideA] = top * invertTop;
59373    styles[sideB] = left * invertLeft;
59374    styles.willChange = sideA + ', ' + sideB;
59375  }
59376
59377  // Attributes
59378  var attributes = {
59379    'x-placement': data.placement
59380  };
59381
59382  // Update `data` attributes, styles and arrowStyles
59383  data.attributes = _extends({}, attributes, data.attributes);
59384  data.styles = _extends({}, styles, data.styles);
59385  data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);
59386
59387  return data;
59388}
59389
59390/**
59391 * Helper used to know if the given modifier depends from another one.<br />
59392 * It checks if the needed modifier is listed and enabled.
59393 * @method
59394 * @memberof Popper.Utils
59395 * @param {Array} modifiers - list of modifiers
59396 * @param {String} requestingName - name of requesting modifier
59397 * @param {String} requestedName - name of requested modifier
59398 * @returns {Boolean}
59399 */
59400function isModifierRequired(modifiers, requestingName, requestedName) {
59401  var requesting = find(modifiers, function (_ref) {
59402    var name = _ref.name;
59403    return name === requestingName;
59404  });
59405
59406  var isRequired = !!requesting && modifiers.some(function (modifier) {
59407    return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;
59408  });
59409
59410  if (!isRequired) {
59411    var _requesting = '`' + requestingName + '`';
59412    var requested = '`' + requestedName + '`';
59413    console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');
59414  }
59415  return isRequired;
59416}
59417
59418/**
59419 * @function
59420 * @memberof Modifiers
59421 * @argument {Object} data - The data object generated by update method
59422 * @argument {Object} options - Modifiers configuration and options
59423 * @returns {Object} The data object, properly modified
59424 */
59425function arrow(data, options) {
59426  var _data$offsets$arrow;
59427
59428  // arrow depends on keepTogether in order to work
59429  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {
59430    return data;
59431  }
59432
59433  var arrowElement = options.element;
59434
59435  // if arrowElement is a string, suppose it's a CSS selector
59436  if (typeof arrowElement === 'string') {
59437    arrowElement = data.instance.popper.querySelector(arrowElement);
59438
59439    // if arrowElement is not found, don't run the modifier
59440    if (!arrowElement) {
59441      return data;
59442    }
59443  } else {
59444    // if the arrowElement isn't a query selector we must check that the
59445    // provided DOM node is child of its popper node
59446    if (!data.instance.popper.contains(arrowElement)) {
59447      console.warn('WARNING: `arrow.element` must be child of its popper element!');
59448      return data;
59449    }
59450  }
59451
59452  var placement = data.placement.split('-')[0];
59453  var _data$offsets = data.offsets,
59454      popper = _data$offsets.popper,
59455      reference = _data$offsets.reference;
59456
59457  var isVertical = ['left', 'right'].indexOf(placement) !== -1;
59458
59459  var len = isVertical ? 'height' : 'width';
59460  var sideCapitalized = isVertical ? 'Top' : 'Left';
59461  var side = sideCapitalized.toLowerCase();
59462  var altSide = isVertical ? 'left' : 'top';
59463  var opSide = isVertical ? 'bottom' : 'right';
59464  var arrowElementSize = getOuterSizes(arrowElement)[len];
59465
59466  //
59467  // extends keepTogether behavior making sure the popper and its
59468  // reference have enough pixels in conjunction
59469  //
59470
59471  // top/left side
59472  if (reference[opSide] - arrowElementSize < popper[side]) {
59473    data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);
59474  }
59475  // bottom/right side
59476  if (reference[side] + arrowElementSize > popper[opSide]) {
59477    data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];
59478  }
59479  data.offsets.popper = getClientRect(data.offsets.popper);
59480
59481  // compute center of the popper
59482  var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;
59483
59484  // Compute the sideValue using the updated popper offsets
59485  // take popper margin in account because we don't have this info available
59486  var css = getStyleComputedProperty(data.instance.popper);
59487  var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);
59488  var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);
59489  var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;
59490
59491  // prevent arrowElement from being placed not contiguously to its popper
59492  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);
59493
59494  data.arrowElement = arrowElement;
59495  data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);
59496
59497  return data;
59498}
59499
59500/**
59501 * Get the opposite placement variation of the given one
59502 * @method
59503 * @memberof Popper.Utils
59504 * @argument {String} placement variation
59505 * @returns {String} flipped placement variation
59506 */
59507function getOppositeVariation(variation) {
59508  if (variation === 'end') {
59509    return 'start';
59510  } else if (variation === 'start') {
59511    return 'end';
59512  }
59513  return variation;
59514}
59515
59516/**
59517 * List of accepted placements to use as values of the `placement` option.<br />
59518 * Valid placements are:
59519 * - `auto`
59520 * - `top`
59521 * - `right`
59522 * - `bottom`
59523 * - `left`
59524 *
59525 * Each placement can have a variation from this list:
59526 * - `-start`
59527 * - `-end`
59528 *
59529 * Variations are interpreted easily if you think of them as the left to right
59530 * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`
59531 * is right.<br />
59532 * Vertically (`left` and `right`), `start` is top and `end` is bottom.
59533 *
59534 * Some valid examples are:
59535 * - `top-end` (on top of reference, right aligned)
59536 * - `right-start` (on right of reference, top aligned)
59537 * - `bottom` (on bottom, centered)
59538 * - `auto-end` (on the side with more space available, alignment depends by placement)
59539 *
59540 * @static
59541 * @type {Array}
59542 * @enum {String}
59543 * @readonly
59544 * @method placements
59545 * @memberof Popper
59546 */
59547var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];
59548
59549// Get rid of `auto` `auto-start` and `auto-end`
59550var validPlacements = placements.slice(3);
59551
59552/**
59553 * Given an initial placement, returns all the subsequent placements
59554 * clockwise (or counter-clockwise).
59555 *
59556 * @method
59557 * @memberof Popper.Utils
59558 * @argument {String} placement - A valid placement (it accepts variations)
59559 * @argument {Boolean} counter - Set to true to walk the placements counterclockwise
59560 * @returns {Array} placements including their variations
59561 */
59562function clockwise(placement) {
59563  var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
59564
59565  var index = validPlacements.indexOf(placement);
59566  var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));
59567  return counter ? arr.reverse() : arr;
59568}
59569
59570var BEHAVIORS = {
59571  FLIP: 'flip',
59572  CLOCKWISE: 'clockwise',
59573  COUNTERCLOCKWISE: 'counterclockwise'
59574};
59575
59576/**
59577 * @function
59578 * @memberof Modifiers
59579 * @argument {Object} data - The data object generated by update method
59580 * @argument {Object} options - Modifiers configuration and options
59581 * @returns {Object} The data object, properly modified
59582 */
59583function flip(data, options) {
59584  // if `inner` modifier is enabled, we can't use the `flip` modifier
59585  if (isModifierEnabled(data.instance.modifiers, 'inner')) {
59586    return data;
59587  }
59588
59589  if (data.flipped && data.placement === data.originalPlacement) {
59590    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides
59591    return data;
59592  }
59593
59594  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
59595
59596  var placement = data.placement.split('-')[0];
59597  var placementOpposite = getOppositePlacement(placement);
59598  var variation = data.placement.split('-')[1] || '';
59599
59600  var flipOrder = [];
59601
59602  switch (options.behavior) {
59603    case BEHAVIORS.FLIP:
59604      flipOrder = [placement, placementOpposite];
59605      break;
59606    case BEHAVIORS.CLOCKWISE:
59607      flipOrder = clockwise(placement);
59608      break;
59609    case BEHAVIORS.COUNTERCLOCKWISE:
59610      flipOrder = clockwise(placement, true);
59611      break;
59612    default:
59613      flipOrder = options.behavior;
59614  }
59615
59616  flipOrder.forEach(function (step, index) {
59617    if (placement !== step || flipOrder.length === index + 1) {
59618      return data;
59619    }
59620
59621    placement = data.placement.split('-')[0];
59622    placementOpposite = getOppositePlacement(placement);
59623
59624    var popperOffsets = data.offsets.popper;
59625    var refOffsets = data.offsets.reference;
59626
59627    // using floor because the reference offsets may contain decimals we are not going to consider here
59628    var floor = Math.floor;
59629    var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);
59630
59631    var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);
59632    var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);
59633    var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);
59634    var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);
59635
59636    var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;
59637
59638    // flip the variation if required
59639    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
59640
59641    // flips variation if reference element overflows boundaries
59642    var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);
59643
59644    // flips variation if popper content overflows boundaries
59645    var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);
59646
59647    var flippedVariation = flippedVariationByRef || flippedVariationByContent;
59648
59649    if (overlapsRef || overflowsBoundaries || flippedVariation) {
59650      // this boolean to detect any flip loop
59651      data.flipped = true;
59652
59653      if (overlapsRef || overflowsBoundaries) {
59654        placement = flipOrder[index + 1];
59655      }
59656
59657      if (flippedVariation) {
59658        variation = getOppositeVariation(variation);
59659      }
59660
59661      data.placement = placement + (variation ? '-' + variation : '');
59662
59663      // this object contains `position`, we want to preserve it along with
59664      // any additional property we may add in the future
59665      data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));
59666
59667      data = runModifiers(data.instance.modifiers, data, 'flip');
59668    }
59669  });
59670  return data;
59671}
59672
59673/**
59674 * @function
59675 * @memberof Modifiers
59676 * @argument {Object} data - The data object generated by update method
59677 * @argument {Object} options - Modifiers configuration and options
59678 * @returns {Object} The data object, properly modified
59679 */
59680function keepTogether(data) {
59681  var _data$offsets = data.offsets,
59682      popper = _data$offsets.popper,
59683      reference = _data$offsets.reference;
59684
59685  var placement = data.placement.split('-')[0];
59686  var floor = Math.floor;
59687  var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
59688  var side = isVertical ? 'right' : 'bottom';
59689  var opSide = isVertical ? 'left' : 'top';
59690  var measurement = isVertical ? 'width' : 'height';
59691
59692  if (popper[side] < floor(reference[opSide])) {
59693    data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];
59694  }
59695  if (popper[opSide] > floor(reference[side])) {
59696    data.offsets.popper[opSide] = floor(reference[side]);
59697  }
59698
59699  return data;
59700}
59701
59702/**
59703 * Converts a string containing value + unit into a px value number
59704 * @function
59705 * @memberof {modifiers~offset}
59706 * @private
59707 * @argument {String} str - Value + unit string
59708 * @argument {String} measurement - `height` or `width`
59709 * @argument {Object} popperOffsets
59710 * @argument {Object} referenceOffsets
59711 * @returns {Number|String}
59712 * Value in pixels, or original string if no values were extracted
59713 */
59714function toValue(str, measurement, popperOffsets, referenceOffsets) {
59715  // separate value from unit
59716  var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/);
59717  var value = +split[1];
59718  var unit = split[2];
59719
59720  // If it's not a number it's an operator, I guess
59721  if (!value) {
59722    return str;
59723  }
59724
59725  if (unit.indexOf('%') === 0) {
59726    var element = void 0;
59727    switch (unit) {
59728      case '%p':
59729        element = popperOffsets;
59730        break;
59731      case '%':
59732      case '%r':
59733      default:
59734        element = referenceOffsets;
59735    }
59736
59737    var rect = getClientRect(element);
59738    return rect[measurement] / 100 * value;
59739  } else if (unit === 'vh' || unit === 'vw') {
59740    // if is a vh or vw, we calculate the size based on the viewport
59741    var size = void 0;
59742    if (unit === 'vh') {
59743      size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
59744    } else {
59745      size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
59746    }
59747    return size / 100 * value;
59748  } else {
59749    // if is an explicit pixel unit, we get rid of the unit and keep the value
59750    // if is an implicit unit, it's px, and we return just the value
59751    return value;
59752  }
59753}
59754
59755/**
59756 * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.
59757 * @function
59758 * @memberof {modifiers~offset}
59759 * @private
59760 * @argument {String} offset
59761 * @argument {Object} popperOffsets
59762 * @argument {Object} referenceOffsets
59763 * @argument {String} basePlacement
59764 * @returns {Array} a two cells array with x and y offsets in numbers
59765 */
59766function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {
59767  var offsets = [0, 0];
59768
59769  // Use height if placement is left or right and index is 0 otherwise use width
59770  // in this way the first offset will use an axis and the second one
59771  // will use the other one
59772  var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;
59773
59774  // Split the offset string to obtain a list of values and operands
59775  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)
59776  var fragments = offset.split(/(\+|\-)/).map(function (frag) {
59777    return frag.trim();
59778  });
59779
59780  // Detect if the offset string contains a pair of values or a single one
59781  // they could be separated by comma or space
59782  var divider = fragments.indexOf(find(fragments, function (frag) {
59783    return frag.search(/,|\s/) !== -1;
59784  }));
59785
59786  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {
59787    console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');
59788  }
59789
59790  // If divider is found, we divide the list of values and operands to divide
59791  // them by ofset X and Y.
59792  var splitRegex = /\s*,\s*|\s+/;
59793  var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];
59794
59795  // Convert the values with units to absolute pixels to allow our computations
59796  ops = ops.map(function (op, index) {
59797    // Most of the units rely on the orientation of the popper
59798    var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';
59799    var mergeWithPrevious = false;
59800    return op
59801    // This aggregates any `+` or `-` sign that aren't considered operators
59802    // e.g.: 10 + +5 => [10, +, +5]
59803    .reduce(function (a, b) {
59804      if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {
59805        a[a.length - 1] = b;
59806        mergeWithPrevious = true;
59807        return a;
59808      } else if (mergeWithPrevious) {
59809        a[a.length - 1] += b;
59810        mergeWithPrevious = false;
59811        return a;
59812      } else {
59813        return a.concat(b);
59814      }
59815    }, [])
59816    // Here we convert the string values into number values (in px)
59817    .map(function (str) {
59818      return toValue(str, measurement, popperOffsets, referenceOffsets);
59819    });
59820  });
59821
59822  // Loop trough the offsets arrays and execute the operations
59823  ops.forEach(function (op, index) {
59824    op.forEach(function (frag, index2) {
59825      if (isNumeric(frag)) {
59826        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);
59827      }
59828    });
59829  });
59830  return offsets;
59831}
59832
59833/**
59834 * @function
59835 * @memberof Modifiers
59836 * @argument {Object} data - The data object generated by update method
59837 * @argument {Object} options - Modifiers configuration and options
59838 * @argument {Number|String} options.offset=0
59839 * The offset value as described in the modifier description
59840 * @returns {Object} The data object, properly modified
59841 */
59842function offset(data, _ref) {
59843  var offset = _ref.offset;
59844  var placement = data.placement,
59845      _data$offsets = data.offsets,
59846      popper = _data$offsets.popper,
59847      reference = _data$offsets.reference;
59848
59849  var basePlacement = placement.split('-')[0];
59850
59851  var offsets = void 0;
59852  if (isNumeric(+offset)) {
59853    offsets = [+offset, 0];
59854  } else {
59855    offsets = parseOffset(offset, popper, reference, basePlacement);
59856  }
59857
59858  if (basePlacement === 'left') {
59859    popper.top += offsets[0];
59860    popper.left -= offsets[1];
59861  } else if (basePlacement === 'right') {
59862    popper.top += offsets[0];
59863    popper.left += offsets[1];
59864  } else if (basePlacement === 'top') {
59865    popper.left += offsets[0];
59866    popper.top -= offsets[1];
59867  } else if (basePlacement === 'bottom') {
59868    popper.left += offsets[0];
59869    popper.top += offsets[1];
59870  }
59871
59872  data.popper = popper;
59873  return data;
59874}
59875
59876/**
59877 * @function
59878 * @memberof Modifiers
59879 * @argument {Object} data - The data object generated by `update` method
59880 * @argument {Object} options - Modifiers configuration and options
59881 * @returns {Object} The data object, properly modified
59882 */
59883function preventOverflow(data, options) {
59884  var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);
59885
59886  // If offsetParent is the reference element, we really want to
59887  // go one step up and use the next offsetParent as reference to
59888  // avoid to make this modifier completely useless and look like broken
59889  if (data.instance.reference === boundariesElement) {
59890    boundariesElement = getOffsetParent(boundariesElement);
59891  }
59892
59893  // NOTE: DOM access here
59894  // resets the popper's position so that the document size can be calculated excluding
59895  // the size of the popper element itself
59896  var transformProp = getSupportedPropertyName('transform');
59897  var popperStyles = data.instance.popper.style; // assignment to help minification
59898  var top = popperStyles.top,
59899      left = popperStyles.left,
59900      transform = popperStyles[transformProp];
59901
59902  popperStyles.top = '';
59903  popperStyles.left = '';
59904  popperStyles[transformProp] = '';
59905
59906  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
59907
59908  // NOTE: DOM access here
59909  // restores the original style properties after the offsets have been computed
59910  popperStyles.top = top;
59911  popperStyles.left = left;
59912  popperStyles[transformProp] = transform;
59913
59914  options.boundaries = boundaries;
59915
59916  var order = options.priority;
59917  var popper = data.offsets.popper;
59918
59919  var check = {
59920    primary: function primary(placement) {
59921      var value = popper[placement];
59922      if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {
59923        value = Math.max(popper[placement], boundaries[placement]);
59924      }
59925      return defineProperty({}, placement, value);
59926    },
59927    secondary: function secondary(placement) {
59928      var mainSide = placement === 'right' ? 'left' : 'top';
59929      var value = popper[mainSide];
59930      if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {
59931        value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));
59932      }
59933      return defineProperty({}, mainSide, value);
59934    }
59935  };
59936
59937  order.forEach(function (placement) {
59938    var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';
59939    popper = _extends({}, popper, check[side](placement));
59940  });
59941
59942  data.offsets.popper = popper;
59943
59944  return data;
59945}
59946
59947/**
59948 * @function
59949 * @memberof Modifiers
59950 * @argument {Object} data - The data object generated by `update` method
59951 * @argument {Object} options - Modifiers configuration and options
59952 * @returns {Object} The data object, properly modified
59953 */
59954function shift(data) {
59955  var placement = data.placement;
59956  var basePlacement = placement.split('-')[0];
59957  var shiftvariation = placement.split('-')[1];
59958
59959  // if shift shiftvariation is specified, run the modifier
59960  if (shiftvariation) {
59961    var _data$offsets = data.offsets,
59962        reference = _data$offsets.reference,
59963        popper = _data$offsets.popper;
59964
59965    var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;
59966    var side = isVertical ? 'left' : 'top';
59967    var measurement = isVertical ? 'width' : 'height';
59968
59969    var shiftOffsets = {
59970      start: defineProperty({}, side, reference[side]),
59971      end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])
59972    };
59973
59974    data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);
59975  }
59976
59977  return data;
59978}
59979
59980/**
59981 * @function
59982 * @memberof Modifiers
59983 * @argument {Object} data - The data object generated by update method
59984 * @argument {Object} options - Modifiers configuration and options
59985 * @returns {Object} The data object, properly modified
59986 */
59987function hide(data) {
59988  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {
59989    return data;
59990  }
59991
59992  var refRect = data.offsets.reference;
59993  var bound = find(data.instance.modifiers, function (modifier) {
59994    return modifier.name === 'preventOverflow';
59995  }).boundaries;
59996
59997  if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {
59998    // Avoid unnecessary DOM access if visibility hasn't changed
59999    if (data.hide === true) {
60000      return data;
60001    }
60002
60003    data.hide = true;
60004    data.attributes['x-out-of-boundaries'] = '';
60005  } else {
60006    // Avoid unnecessary DOM access if visibility hasn't changed
60007    if (data.hide === false) {
60008      return data;
60009    }
60010
60011    data.hide = false;
60012    data.attributes['x-out-of-boundaries'] = false;
60013  }
60014
60015  return data;
60016}
60017
60018/**
60019 * @function
60020 * @memberof Modifiers
60021 * @argument {Object} data - The data object generated by `update` method
60022 * @argument {Object} options - Modifiers configuration and options
60023 * @returns {Object} The data object, properly modified
60024 */
60025function inner(data) {
60026  var placement = data.placement;
60027  var basePlacement = placement.split('-')[0];
60028  var _data$offsets = data.offsets,
60029      popper = _data$offsets.popper,
60030      reference = _data$offsets.reference;
60031
60032  var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;
60033
60034  var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;
60035
60036  popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);
60037
60038  data.placement = getOppositePlacement(placement);
60039  data.offsets.popper = getClientRect(popper);
60040
60041  return data;
60042}
60043
60044/**
60045 * Modifier function, each modifier can have a function of this type assigned
60046 * to its `fn` property.<br />
60047 * These functions will be called on each update, this means that you must
60048 * make sure they are performant enough to avoid performance bottlenecks.
60049 *
60050 * @function ModifierFn
60051 * @argument {dataObject} data - The data object generated by `update` method
60052 * @argument {Object} options - Modifiers configuration and options
60053 * @returns {dataObject} The data object, properly modified
60054 */
60055
60056/**
60057 * Modifiers are plugins used to alter the behavior of your poppers.<br />
60058 * Popper.js uses a set of 9 modifiers to provide all the basic functionalities
60059 * needed by the library.
60060 *
60061 * Usually you don't want to override the `order`, `fn` and `onLoad` props.
60062 * All the other properties are configurations that could be tweaked.
60063 * @namespace modifiers
60064 */
60065var modifiers = {
60066  /**
60067   * Modifier used to shift the popper on the start or end of its reference
60068   * element.<br />
60069   * It will read the variation of the `placement` property.<br />
60070   * It can be one either `-end` or `-start`.
60071   * @memberof modifiers
60072   * @inner
60073   */
60074  shift: {
60075    /** @prop {number} order=100 - Index used to define the order of execution */
60076    order: 100,
60077    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
60078    enabled: true,
60079    /** @prop {ModifierFn} */
60080    fn: shift
60081  },
60082
60083  /**
60084   * The `offset` modifier can shift your popper on both its axis.
60085   *
60086   * It accepts the following units:
60087   * - `px` or unit-less, interpreted as pixels
60088   * - `%` or `%r`, percentage relative to the length of the reference element
60089   * - `%p`, percentage relative to the length of the popper element
60090   * - `vw`, CSS viewport width unit
60091   * - `vh`, CSS viewport height unit
60092   *
60093   * For length is intended the main axis relative to the placement of the popper.<br />
60094   * This means that if the placement is `top` or `bottom`, the length will be the
60095   * `width`. In case of `left` or `right`, it will be the `height`.
60096   *
60097   * You can provide a single value (as `Number` or `String`), or a pair of values
60098   * as `String` divided by a comma or one (or more) white spaces.<br />
60099   * The latter is a deprecated method because it leads to confusion and will be
60100   * removed in v2.<br />
60101   * Additionally, it accepts additions and subtractions between different units.
60102   * Note that multiplications and divisions aren't supported.
60103   *
60104   * Valid examples are:
60105   * ```
60106   * 10
60107   * '10%'
60108   * '10, 10'
60109   * '10%, 10'
60110   * '10 + 10%'
60111   * '10 - 5vh + 3%'
60112   * '-10px + 5vh, 5px - 6%'
60113   * ```
60114   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap
60115   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.
60116   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).
60117   *
60118   * @memberof modifiers
60119   * @inner
60120   */
60121  offset: {
60122    /** @prop {number} order=200 - Index used to define the order of execution */
60123    order: 200,
60124    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
60125    enabled: true,
60126    /** @prop {ModifierFn} */
60127    fn: offset,
60128    /** @prop {Number|String} offset=0
60129     * The offset value as described in the modifier description
60130     */
60131    offset: 0
60132  },
60133
60134  /**
60135   * Modifier used to prevent the popper from being positioned outside the boundary.
60136   *
60137   * A scenario exists where the reference itself is not within the boundaries.<br />
60138   * We can say it has "escaped the boundaries" — or just "escaped".<br />
60139   * In this case we need to decide whether the popper should either:
60140   *
60141   * - detach from the reference and remain "trapped" in the boundaries, or
60142   * - if it should ignore the boundary and "escape with its reference"
60143   *
60144   * When `escapeWithReference` is set to`true` and reference is completely
60145   * outside its boundaries, the popper will overflow (or completely leave)
60146   * the boundaries in order to remain attached to the edge of the reference.
60147   *
60148   * @memberof modifiers
60149   * @inner
60150   */
60151  preventOverflow: {
60152    /** @prop {number} order=300 - Index used to define the order of execution */
60153    order: 300,
60154    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
60155    enabled: true,
60156    /** @prop {ModifierFn} */
60157    fn: preventOverflow,
60158    /**
60159     * @prop {Array} [priority=['left','right','top','bottom']]
60160     * Popper will try to prevent overflow following these priorities by default,
60161     * then, it could overflow on the left and on top of the `boundariesElement`
60162     */
60163    priority: ['left', 'right', 'top', 'bottom'],
60164    /**
60165     * @prop {number} padding=5
60166     * Amount of pixel used to define a minimum distance between the boundaries
60167     * and the popper. This makes sure the popper always has a little padding
60168     * between the edges of its container
60169     */
60170    padding: 5,
60171    /**
60172     * @prop {String|HTMLElement} boundariesElement='scrollParent'
60173     * Boundaries used by the modifier. Can be `scrollParent`, `window`,
60174     * `viewport` or any DOM element.
60175     */
60176    boundariesElement: 'scrollParent'
60177  },
60178
60179  /**
60180   * Modifier used to make sure the reference and its popper stay near each other
60181   * without leaving any gap between the two. Especially useful when the arrow is
60182   * enabled and you want to ensure that it points to its reference element.
60183   * It cares only about the first axis. You can still have poppers with margin
60184   * between the popper and its reference element.
60185   * @memberof modifiers
60186   * @inner
60187   */
60188  keepTogether: {
60189    /** @prop {number} order=400 - Index used to define the order of execution */
60190    order: 400,
60191    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
60192    enabled: true,
60193    /** @prop {ModifierFn} */
60194    fn: keepTogether
60195  },
60196
60197  /**
60198   * This modifier is used to move the `arrowElement` of the popper to make
60199   * sure it is positioned between the reference element and its popper element.
60200   * It will read the outer size of the `arrowElement` node to detect how many
60201   * pixels of conjunction are needed.
60202   *
60203   * It has no effect if no `arrowElement` is provided.
60204   * @memberof modifiers
60205   * @inner
60206   */
60207  arrow: {
60208    /** @prop {number} order=500 - Index used to define the order of execution */
60209    order: 500,
60210    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
60211    enabled: true,
60212    /** @prop {ModifierFn} */
60213    fn: arrow,
60214    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */
60215    element: '[x-arrow]'
60216  },
60217
60218  /**
60219   * Modifier used to flip the popper's placement when it starts to overlap its
60220   * reference element.
60221   *
60222   * Requires the `preventOverflow` modifier before it in order to work.
60223   *
60224   * **NOTE:** this modifier will interrupt the current update cycle and will
60225   * restart it if it detects the need to flip the placement.
60226   * @memberof modifiers
60227   * @inner
60228   */
60229  flip: {
60230    /** @prop {number} order=600 - Index used to define the order of execution */
60231    order: 600,
60232    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
60233    enabled: true,
60234    /** @prop {ModifierFn} */
60235    fn: flip,
60236    /**
60237     * @prop {String|Array} behavior='flip'
60238     * The behavior used to change the popper's placement. It can be one of
60239     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid
60240     * placements (with optional variations)
60241     */
60242    behavior: 'flip',
60243    /**
60244     * @prop {number} padding=5
60245     * The popper will flip if it hits the edges of the `boundariesElement`
60246     */
60247    padding: 5,
60248    /**
60249     * @prop {String|HTMLElement} boundariesElement='viewport'
60250     * The element which will define the boundaries of the popper position.
60251     * The popper will never be placed outside of the defined boundaries
60252     * (except if `keepTogether` is enabled)
60253     */
60254    boundariesElement: 'viewport',
60255    /**
60256     * @prop {Boolean} flipVariations=false
60257     * The popper will switch placement variation between `-start` and `-end` when
60258     * the reference element overlaps its boundaries.
60259     *
60260     * The original placement should have a set variation.
60261     */
60262    flipVariations: false,
60263    /**
60264     * @prop {Boolean} flipVariationsByContent=false
60265     * The popper will switch placement variation between `-start` and `-end` when
60266     * the popper element overlaps its reference boundaries.
60267     *
60268     * The original placement should have a set variation.
60269     */
60270    flipVariationsByContent: false
60271  },
60272
60273  /**
60274   * Modifier used to make the popper flow toward the inner of the reference element.
60275   * By default, when this modifier is disabled, the popper will be placed outside
60276   * the reference element.
60277   * @memberof modifiers
60278   * @inner
60279   */
60280  inner: {
60281    /** @prop {number} order=700 - Index used to define the order of execution */
60282    order: 700,
60283    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */
60284    enabled: false,
60285    /** @prop {ModifierFn} */
60286    fn: inner
60287  },
60288
60289  /**
60290   * Modifier used to hide the popper when its reference element is outside of the
60291   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can
60292   * be used to hide with a CSS selector the popper when its reference is
60293   * out of boundaries.
60294   *
60295   * Requires the `preventOverflow` modifier before it in order to work.
60296   * @memberof modifiers
60297   * @inner
60298   */
60299  hide: {
60300    /** @prop {number} order=800 - Index used to define the order of execution */
60301    order: 800,
60302    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
60303    enabled: true,
60304    /** @prop {ModifierFn} */
60305    fn: hide
60306  },
60307
60308  /**
60309   * Computes the style that will be applied to the popper element to gets
60310   * properly positioned.
60311   *
60312   * Note that this modifier will not touch the DOM, it just prepares the styles
60313   * so that `applyStyle` modifier can apply it. This separation is useful
60314   * in case you need to replace `applyStyle` with a custom implementation.
60315   *
60316   * This modifier has `850` as `order` value to maintain backward compatibility
60317   * with previous versions of Popper.js. Expect the modifiers ordering method
60318   * to change in future major versions of the library.
60319   *
60320   * @memberof modifiers
60321   * @inner
60322   */
60323  computeStyle: {
60324    /** @prop {number} order=850 - Index used to define the order of execution */
60325    order: 850,
60326    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
60327    enabled: true,
60328    /** @prop {ModifierFn} */
60329    fn: computeStyle,
60330    /**
60331     * @prop {Boolean} gpuAcceleration=true
60332     * If true, it uses the CSS 3D transformation to position the popper.
60333     * Otherwise, it will use the `top` and `left` properties
60334     */
60335    gpuAcceleration: true,
60336    /**
60337     * @prop {string} [x='bottom']
60338     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.
60339     * Change this if your popper should grow in a direction different from `bottom`
60340     */
60341    x: 'bottom',
60342    /**
60343     * @prop {string} [x='left']
60344     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.
60345     * Change this if your popper should grow in a direction different from `right`
60346     */
60347    y: 'right'
60348  },
60349
60350  /**
60351   * Applies the computed styles to the popper element.
60352   *
60353   * All the DOM manipulations are limited to this modifier. This is useful in case
60354   * you want to integrate Popper.js inside a framework or view library and you
60355   * want to delegate all the DOM manipulations to it.
60356   *
60357   * Note that if you disable this modifier, you must make sure the popper element
60358   * has its position set to `absolute` before Popper.js can do its work!
60359   *
60360   * Just disable this modifier and define your own to achieve the desired effect.
60361   *
60362   * @memberof modifiers
60363   * @inner
60364   */
60365  applyStyle: {
60366    /** @prop {number} order=900 - Index used to define the order of execution */
60367    order: 900,
60368    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
60369    enabled: true,
60370    /** @prop {ModifierFn} */
60371    fn: applyStyle,
60372    /** @prop {Function} */
60373    onLoad: applyStyleOnLoad,
60374    /**
60375     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier
60376     * @prop {Boolean} gpuAcceleration=true
60377     * If true, it uses the CSS 3D transformation to position the popper.
60378     * Otherwise, it will use the `top` and `left` properties
60379     */
60380    gpuAcceleration: undefined
60381  }
60382};
60383
60384/**
60385 * The `dataObject` is an object containing all the information used by Popper.js.
60386 * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.
60387 * @name dataObject
60388 * @property {Object} data.instance The Popper.js instance
60389 * @property {String} data.placement Placement applied to popper
60390 * @property {String} data.originalPlacement Placement originally defined on init
60391 * @property {Boolean} data.flipped True if popper has been flipped by flip modifier
60392 * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper
60393 * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier
60394 * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)
60395 * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)
60396 * @property {Object} data.boundaries Offsets of the popper boundaries
60397 * @property {Object} data.offsets The measurements of popper, reference and arrow elements
60398 * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values
60399 * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values
60400 * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0
60401 */
60402
60403/**
60404 * Default options provided to Popper.js constructor.<br />
60405 * These can be overridden using the `options` argument of Popper.js.<br />
60406 * To override an option, simply pass an object with the same
60407 * structure of the `options` object, as the 3rd argument. For example:
60408 * ```
60409 * new Popper(ref, pop, {
60410 *   modifiers: {
60411 *     preventOverflow: { enabled: false }
60412 *   }
60413 * })
60414 * ```
60415 * @type {Object}
60416 * @static
60417 * @memberof Popper
60418 */
60419var Defaults = {
60420  /**
60421   * Popper's placement.
60422   * @prop {Popper.placements} placement='bottom'
60423   */
60424  placement: 'bottom',
60425
60426  /**
60427   * Set this to true if you want popper to position it self in 'fixed' mode
60428   * @prop {Boolean} positionFixed=false
60429   */
60430  positionFixed: false,
60431
60432  /**
60433   * Whether events (resize, scroll) are initially enabled.
60434   * @prop {Boolean} eventsEnabled=true
60435   */
60436  eventsEnabled: true,
60437
60438  /**
60439   * Set to true if you want to automatically remove the popper when
60440   * you call the `destroy` method.
60441   * @prop {Boolean} removeOnDestroy=false
60442   */
60443  removeOnDestroy: false,
60444
60445  /**
60446   * Callback called when the popper is created.<br />
60447   * By default, it is set to no-op.<br />
60448   * Access Popper.js instance with `data.instance`.
60449   * @prop {onCreate}
60450   */
60451  onCreate: function onCreate() {},
60452
60453  /**
60454   * Callback called when the popper is updated. This callback is not called
60455   * on the initialization/creation of the popper, but only on subsequent
60456   * updates.<br />
60457   * By default, it is set to no-op.<br />
60458   * Access Popper.js instance with `data.instance`.
60459   * @prop {onUpdate}
60460   */
60461  onUpdate: function onUpdate() {},
60462
60463  /**
60464   * List of modifiers used to modify the offsets before they are applied to the popper.
60465   * They provide most of the functionalities of Popper.js.
60466   * @prop {modifiers}
60467   */
60468  modifiers: modifiers
60469};
60470
60471/**
60472 * @callback onCreate
60473 * @param {dataObject} data
60474 */
60475
60476/**
60477 * @callback onUpdate
60478 * @param {dataObject} data
60479 */
60480
60481// Utils
60482// Methods
60483var Popper = function () {
60484  /**
60485   * Creates a new Popper.js instance.
60486   * @class Popper
60487   * @param {Element|referenceObject} reference - The reference element used to position the popper
60488   * @param {Element} popper - The HTML / XML element used as the popper
60489   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)
60490   * @return {Object} instance - The generated Popper.js instance
60491   */
60492  function Popper(reference, popper) {
60493    var _this = this;
60494
60495    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
60496    classCallCheck(this, Popper);
60497
60498    this.scheduleUpdate = function () {
60499      return requestAnimationFrame(_this.update);
60500    };
60501
60502    // make update() debounced, so that it only runs at most once-per-tick
60503    this.update = debounce(this.update.bind(this));
60504
60505    // with {} we create a new object with the options inside it
60506    this.options = _extends({}, Popper.Defaults, options);
60507
60508    // init state
60509    this.state = {
60510      isDestroyed: false,
60511      isCreated: false,
60512      scrollParents: []
60513    };
60514
60515    // get reference and popper elements (allow jQuery wrappers)
60516    this.reference = reference && reference.jquery ? reference[0] : reference;
60517    this.popper = popper && popper.jquery ? popper[0] : popper;
60518
60519    // Deep merge modifiers options
60520    this.options.modifiers = {};
60521    Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {
60522      _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});
60523    });
60524
60525    // Refactoring modifiers' list (Object => Array)
60526    this.modifiers = Object.keys(this.options.modifiers).map(function (name) {
60527      return _extends({
60528        name: name
60529      }, _this.options.modifiers[name]);
60530    })
60531    // sort the modifiers by order
60532    .sort(function (a, b) {
60533      return a.order - b.order;
60534    });
60535
60536    // modifiers have the ability to execute arbitrary code when Popper.js get inited
60537    // such code is executed in the same order of its modifier
60538    // they could add new properties to their options configuration
60539    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!
60540    this.modifiers.forEach(function (modifierOptions) {
60541      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {
60542        modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);
60543      }
60544    });
60545
60546    // fire the first update to position the popper in the right place
60547    this.update();
60548
60549    var eventsEnabled = this.options.eventsEnabled;
60550    if (eventsEnabled) {
60551      // setup event listeners, they will take care of update the position in specific situations
60552      this.enableEventListeners();
60553    }
60554
60555    this.state.eventsEnabled = eventsEnabled;
60556  }
60557
60558  // We can't use class properties because they don't get listed in the
60559  // class prototype and break stuff like Sinon stubs
60560
60561
60562  createClass(Popper, [{
60563    key: 'update',
60564    value: function update$$1() {
60565      return update.call(this);
60566    }
60567  }, {
60568    key: 'destroy',
60569    value: function destroy$$1() {
60570      return destroy.call(this);
60571    }
60572  }, {
60573    key: 'enableEventListeners',
60574    value: function enableEventListeners$$1() {
60575      return enableEventListeners.call(this);
60576    }
60577  }, {
60578    key: 'disableEventListeners',
60579    value: function disableEventListeners$$1() {
60580      return disableEventListeners.call(this);
60581    }
60582
60583    /**
60584     * Schedules an update. It will run on the next UI update available.
60585     * @method scheduleUpdate
60586     * @memberof Popper
60587     */
60588
60589
60590    /**
60591     * Collection of utilities useful when writing custom modifiers.
60592     * Starting from version 1.7, this method is available only if you
60593     * include `popper-utils.js` before `popper.js`.
60594     *
60595     * **DEPRECATION**: This way to access PopperUtils is deprecated
60596     * and will be removed in v2! Use the PopperUtils module directly instead.
60597     * Due to the high instability of the methods contained in Utils, we can't
60598     * guarantee them to follow semver. Use them at your own risk!
60599     * @static
60600     * @private
60601     * @type {Object}
60602     * @deprecated since version 1.8
60603     * @member Utils
60604     * @memberof Popper
60605     */
60606
60607  }]);
60608  return Popper;
60609}();
60610
60611/**
60612 * The `referenceObject` is an object that provides an interface compatible with Popper.js
60613 * and lets you use it as replacement of a real DOM node.<br />
60614 * You can use this method to position a popper relatively to a set of coordinates
60615 * in case you don't have a DOM node to use as reference.
60616 *
60617 * ```
60618 * new Popper(referenceObject, popperNode);
60619 * ```
60620 *
60621 * NB: This feature isn't supported in Internet Explorer 10.
60622 * @name referenceObject
60623 * @property {Function} data.getBoundingClientRect
60624 * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.
60625 * @property {number} data.clientWidth
60626 * An ES6 getter that will return the width of the virtual reference element.
60627 * @property {number} data.clientHeight
60628 * An ES6 getter that will return the height of the virtual reference element.
60629 */
60630
60631
60632Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;
60633Popper.placements = placements;
60634Popper.Defaults = Defaults;
60635
60636/* harmony default export */ __webpack_exports__["default"] = (Popper);
60637//# sourceMappingURL=popper.js.map
60638
60639/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
60640
60641/***/ }),
60642
vendor: 5,681 bytes, lines 60643-60837
60643/***/ "./node_modules/process/browser.js":
60644/*!*****************************************!*\
60645  !*** ./node_modules/process/browser.js ***!
60646  \*****************************************/
60647/*! no static exports found */
60648/***/ (function(module, exports) {
60649
60650// shim for using process in browser
60651var process = module.exports = {};
60652
60653// cached from whatever global is present so that test runners that stub it
60654// don't break things.  But we need to wrap it in a try catch in case it is
60655// wrapped in strict mode code which doesn't define any globals.  It's inside a
60656// function because try/catches deoptimize in certain engines.
60657
60658var cachedSetTimeout;
60659var cachedClearTimeout;
60660
60661function defaultSetTimout() {
60662    throw new Error('setTimeout has not been defined');
60663}
60664function defaultClearTimeout () {
60665    throw new Error('clearTimeout has not been defined');
60666}
60667(function () {
60668    try {
60669        if (typeof setTimeout === 'function') {
60670            cachedSetTimeout = setTimeout;
60671        } else {
60672            cachedSetTimeout = defaultSetTimout;
60673        }
60674    } catch (e) {
60675        cachedSetTimeout = defaultSetTimout;
60676    }
60677    try {
60678        if (typeof clearTimeout === 'function') {
60679            cachedClearTimeout = clearTimeout;
60680        } else {
60681            cachedClearTimeout = defaultClearTimeout;
60682        }
60683    } catch (e) {
60684        cachedClearTimeout = defaultClearTimeout;
60685    }
60686} ())
60687function runTimeout(fun) {
60688    if (cachedSetTimeout === setTimeout) {
60689        //normal enviroments in sane situations
60690        return setTimeout(fun, 0);
60691    }
60692    // if setTimeout wasn't available but was latter defined
60693    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
60694        cachedSetTimeout = setTimeout;
60695        return setTimeout(fun, 0);
60696    }
60697    try {
60698        // when when somebody has screwed with setTimeout but no I.E. maddness
60699        return cachedSetTimeout(fun, 0);
60700    } catch(e){
60701        try {
60702            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
60703            return cachedSetTimeout.call(null, fun, 0);
60704        } catch(e){
60705            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
60706            return cachedSetTimeout.call(this, fun, 0);
60707        }
60708    }
60709
60710
60711}
60712function runClearTimeout(marker) {
60713    if (cachedClearTimeout === clearTimeout) {
60714        //normal enviroments in sane situations
60715        return clearTimeout(marker);
60716    }
60717    // if clearTimeout wasn't available but was latter defined
60718    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
60719        cachedClearTimeout = clearTimeout;
60720        return clearTimeout(marker);
60721    }
60722    try {
60723        // when when somebody has screwed with setTimeout but no I.E. maddness
60724        return cachedClearTimeout(marker);
60725    } catch (e){
60726        try {
60727            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
60728            return cachedClearTimeout.call(null, marker);
60729        } catch (e){
60730            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
60731            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
60732            return cachedClearTimeout.call(this, marker);
60733        }
60734    }
60735
60736
60737
60738}
60739var queue = [];
60740var draining = false;
60741var currentQueue;
60742var queueIndex = -1;
60743
60744function cleanUpNextTick() {
60745    if (!draining || !currentQueue) {
60746        return;
60747    }
60748    draining = false;
60749    if (currentQueue.length) {
60750        queue = currentQueue.concat(queue);
60751    } else {
60752        queueIndex = -1;
60753    }
60754    if (queue.length) {
60755        drainQueue();
60756    }
60757}
60758
60759function drainQueue() {
60760    if (draining) {
60761        return;
60762    }
60763    var timeout = runTimeout(cleanUpNextTick);
60764    draining = true;
60765
60766    var len = queue.length;
60767    while(len) {
60768        currentQueue = queue;
60769        queue = [];
60770        while (++queueIndex < len) {
60771            if (currentQueue) {
60772                currentQueue[queueIndex].run();
60773            }
60774        }
60775        queueIndex = -1;
60776        len = queue.length;
60777    }
60778    currentQueue = null;
60779    draining = false;
60780    runClearTimeout(timeout);
60781}
60782
60783process.nextTick = function (fun) {
60784    var args = new Array(arguments.length - 1);
60785    if (arguments.length > 1) {
60786        for (var i = 1; i < arguments.length; i++) {
60787            args[i - 1] = arguments[i];
60788        }
60789    }
60790    queue.push(new Item(fun, args));
60791    if (queue.length === 1 && !draining) {
60792        runTimeout(drainQueue);
60793    }
60794};
60795
60796// v8 likes predictible objects
60797function Item(fun, array) {
60798    this.fun = fun;
60799    this.array = array;
60800}
60801Item.prototype.run = function () {
60802    this.fun.apply(null, this.array);
60803};
60804process.title = 'browser';
60805process.browser = true;
60806process.env = {};
60807process.argv = [];
60808process.version = ''; // empty string to avoid regexp issues
60809process.versions = {};
60810
60811function noop() {}
60812
60813process.on = noop;
60814process.addListener = noop;
60815process.once = noop;
60816process.off = noop;
60817process.removeListener = noop;
60818process.removeAllListeners = noop;
60819process.emit = noop;
60820process.prependListener = noop;
60821process.prependOnceListener = noop;
60822
60823process.listeners = function (name) { return [] }
60824
60825process.binding = function (name) {
60826    throw new Error('process.binding is not supported');
60827};
60828
60829process.cwd = function () { return '/' };
60830process.chdir = function (dir) {
60831    throw new Error('process.chdir is not supported');
60832};
60833process.umask = function() { return 0; };
60834
60835
60836/***/ }),
60837
vendor: 381 bytes, lines 60838-60852
60838/***/ "./node_modules/promise/index.js":
60839/*!***************************************!*\
60840  !*** ./node_modules/promise/index.js ***!
60841  \***************************************/
60842/*! no static exports found */
60843/***/ (function(module, exports, __webpack_require__) {
60844
60845"use strict";
60846
60847
60848module.exports = __webpack_require__(/*! ./lib */ "./node_modules/promise/lib/index.js")
60849
60850
60851/***/ }),
60852
vendor: 5,205 bytes, lines 60853-61077
60853/***/ "./node_modules/promise/lib/core.js":
60854/*!******************************************!*\
60855  !*** ./node_modules/promise/lib/core.js ***!
60856  \******************************************/
60857/*! no static exports found */
60858/***/ (function(module, exports, __webpack_require__) {
60859
60860"use strict";
60861
60862
60863var asap = __webpack_require__(/*! asap/raw */ "./node_modules/asap/browser-raw.js");
60864
60865function noop() {}
60866
60867// States:
60868//
60869// 0 - pending
60870// 1 - fulfilled with _value
60871// 2 - rejected with _value
60872// 3 - adopted the state of another promise, _value
60873//
60874// once the state is no longer pending (0) it is immutable
60875
60876// All `_` prefixed properties will be reduced to `_{random number}`
60877// at build time to obfuscate them and discourage their use.
60878// We don't use symbols or Object.defineProperty to fully hide them
60879// because the performance isn't good enough.
60880
60881
60882// to avoid using try/catch inside critical functions, we
60883// extract them to here.
60884var LAST_ERROR = null;
60885var IS_ERROR = {};
60886function getThen(obj) {
60887  try {
60888    return obj.then;
60889  } catch (ex) {
60890    LAST_ERROR = ex;
60891    return IS_ERROR;
60892  }
60893}
60894
60895function tryCallOne(fn, a) {
60896  try {
60897    return fn(a);
60898  } catch (ex) {
60899    LAST_ERROR = ex;
60900    return IS_ERROR;
60901  }
60902}
60903function tryCallTwo(fn, a, b) {
60904  try {
60905    fn(a, b);
60906  } catch (ex) {
60907    LAST_ERROR = ex;
60908    return IS_ERROR;
60909  }
60910}
60911
60912module.exports = Promise;
60913
60914function Promise(fn) {
60915  if (typeof this !== 'object') {
60916    throw new TypeError('Promises must be constructed via new');
60917  }
60918  if (typeof fn !== 'function') {
60919    throw new TypeError('Promise constructor\'s argument is not a function');
60920  }
60921  this._40 = 0;
60922  this._65 = 0;
60923  this._55 = null;
60924  this._72 = null;
60925  if (fn === noop) return;
60926  doResolve(fn, this);
60927}
60928Promise._37 = null;
60929Promise._87 = null;
60930Promise._61 = noop;
60931
60932Promise.prototype.then = function(onFulfilled, onRejected) {
60933  if (this.constructor !== Promise) {
60934    return safeThen(this, onFulfilled, onRejected);
60935  }
60936  var res = new Promise(noop);
60937  handle(this, new Handler(onFulfilled, onRejected, res));
60938  return res;
60939};
60940
60941function safeThen(self, onFulfilled, onRejected) {
60942  return new self.constructor(function (resolve, reject) {
60943    var res = new Promise(noop);
60944    res.then(resolve, reject);
60945    handle(self, new Handler(onFulfilled, onRejected, res));
60946  });
60947}
60948function handle(self, deferred) {
60949  while (self._65 === 3) {
60950    self = self._55;
60951  }
60952  if (Promise._37) {
60953    Promise._37(self);
60954  }
60955  if (self._65 === 0) {
60956    if (self._40 === 0) {
60957      self._40 = 1;
60958      self._72 = deferred;
60959      return;
60960    }
60961    if (self._40 === 1) {
60962      self._40 = 2;
60963      self._72 = [self._72, deferred];
60964      return;
60965    }
60966    self._72.push(deferred);
60967    return;
60968  }
60969  handleResolved(self, deferred);
60970}
60971
60972function handleResolved(self, deferred) {
60973  asap(function() {
60974    var cb = self._65 === 1 ? deferred.onFulfilled : deferred.onRejected;
60975    if (cb === null) {
60976      if (self._65 === 1) {
60977        resolve(deferred.promise, self._55);
60978      } else {
60979        reject(deferred.promise, self._55);
60980      }
60981      return;
60982    }
60983    var ret = tryCallOne(cb, self._55);
60984    if (ret === IS_ERROR) {
60985      reject(deferred.promise, LAST_ERROR);
60986    } else {
60987      resolve(deferred.promise, ret);
60988    }
60989  });
60990}
60991function resolve(self, newValue) {
60992  // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
60993  if (newValue === self) {
60994    return reject(
60995      self,
60996      new TypeError('A promise cannot be resolved with itself.')
60997    );
60998  }
60999  if (
61000    newValue &&
61001    (typeof newValue === 'object' || typeof newValue === 'function')
61002  ) {
61003    var then = getThen(newValue);
61004    if (then === IS_ERROR) {
61005      return reject(self, LAST_ERROR);
61006    }
61007    if (
61008      then === self.then &&
61009      newValue instanceof Promise
61010    ) {
61011      self._65 = 3;
61012      self._55 = newValue;
61013      finale(self);
61014      return;
61015    } else if (typeof then === 'function') {
61016      doResolve(then.bind(newValue), self);
61017      return;
61018    }
61019  }
61020  self._65 = 1;
61021  self._55 = newValue;
61022  finale(self);
61023}
61024
61025function reject(self, newValue) {
61026  self._65 = 2;
61027  self._55 = newValue;
61028  if (Promise._87) {
61029    Promise._87(self, newValue);
61030  }
61031  finale(self);
61032}
61033function finale(self) {
61034  if (self._40 === 1) {
61035    handle(self, self._72);
61036    self._72 = null;
61037  }
61038  if (self._40 === 2) {
61039    for (var i = 0; i < self._72.length; i++) {
61040      handle(self, self._72[i]);
61041    }
61042    self._72 = null;
61043  }
61044}
61045
61046function Handler(onFulfilled, onRejected, promise){
61047  this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
61048  this.onRejected = typeof onRejected === 'function' ? onRejected : null;
61049  this.promise = promise;
61050}
61051
61052/**
61053 * Take a potentially misbehaving resolver function and make sure
61054 * onFulfilled and onRejected are only called once.
61055 *
61056 * Makes no guarantees about asynchrony.
61057 */
61058function doResolve(fn, promise) {
61059  var done = false;
61060  var res = tryCallTwo(fn, function (value) {
61061    if (done) return;
61062    done = true;
61063    resolve(promise, value);
61064  }, function (reason) {
61065    if (done) return;
61066    done = true;
61067    reject(promise, reason);
61068  });
61069  if (!done && res === IS_ERROR) {
61070    done = true;
61071    reject(promise, LAST_ERROR);
61072  }
61073}
61074
61075
61076/***/ }),
61077
vendor: 657 bytes, lines 61078-61102
61078/***/ "./node_modules/promise/lib/done.js":
61079/*!******************************************!*\
61080  !*** ./node_modules/promise/lib/done.js ***!
61081  \******************************************/
61082/*! no static exports found */
61083/***/ (function(module, exports, __webpack_require__) {
61084
61085"use strict";
61086
61087
61088var Promise = __webpack_require__(/*! ./core.js */ "./node_modules/promise/lib/core.js");
61089
61090module.exports = Promise;
61091Promise.prototype.done = function (onFulfilled, onRejected) {
61092  var self = arguments.length ? this.then.apply(this, arguments) : this;
61093  self.then(null, function (err) {
61094    setTimeout(function () {
61095      throw err;
61096    }, 0);
61097  });
61098};
61099
61100
61101/***/ }),
61102
vendor: 3,057 bytes, lines 61103-61221
61103/***/ "./node_modules/promise/lib/es6-extensions.js":
61104/*!****************************************************!*\
61105  !*** ./node_modules/promise/lib/es6-extensions.js ***!
61106  \****************************************************/
61107/*! no static exports found */
61108/***/ (function(module, exports, __webpack_require__) {
61109
61110"use strict";
61111
61112
61113//This file contains the ES6 extensions to the core Promises/A+ API
61114
61115var Promise = __webpack_require__(/*! ./core.js */ "./node_modules/promise/lib/core.js");
61116
61117module.exports = Promise;
61118
61119/* Static Functions */
61120
61121var TRUE = valuePromise(true);
61122var FALSE = valuePromise(false);
61123var NULL = valuePromise(null);
61124var UNDEFINED = valuePromise(undefined);
61125var ZERO = valuePromise(0);
61126var EMPTYSTRING = valuePromise('');
61127
61128function valuePromise(value) {
61129  var p = new Promise(Promise._61);
61130  p._65 = 1;
61131  p._55 = value;
61132  return p;
61133}
61134Promise.resolve = function (value) {
61135  if (value instanceof Promise) return value;
61136
61137  if (value === null) return NULL;
61138  if (value === undefined) return UNDEFINED;
61139  if (value === true) return TRUE;
61140  if (value === false) return FALSE;
61141  if (value === 0) return ZERO;
61142  if (value === '') return EMPTYSTRING;
61143
61144  if (typeof value === 'object' || typeof value === 'function') {
61145    try {
61146      var then = value.then;
61147      if (typeof then === 'function') {
61148        return new Promise(then.bind(value));
61149      }
61150    } catch (ex) {
61151      return new Promise(function (resolve, reject) {
61152        reject(ex);
61153      });
61154    }
61155  }
61156  return valuePromise(value);
61157};
61158
61159Promise.all = function (arr) {
61160  var args = Array.prototype.slice.call(arr);
61161
61162  return new Promise(function (resolve, reject) {
61163    if (args.length === 0) return resolve([]);
61164    var remaining = args.length;
61165    function res(i, val) {
61166      if (val && (typeof val === 'object' || typeof val === 'function')) {
61167        if (val instanceof Promise && val.then === Promise.prototype.then) {
61168          while (val._65 === 3) {
61169            val = val._55;
61170          }
61171          if (val._65 === 1) return res(i, val._55);
61172          if (val._65 === 2) reject(val._55);
61173          val.then(function (val) {
61174            res(i, val);
61175          }, reject);
61176          return;
61177        } else {
61178          var then = val.then;
61179          if (typeof then === 'function') {
61180            var p = new Promise(then.bind(val));
61181            p.then(function (val) {
61182              res(i, val);
61183            }, reject);
61184            return;
61185          }
61186        }
61187      }
61188      args[i] = val;
61189      if (--remaining === 0) {
61190        resolve(args);
61191      }
61192    }
61193    for (var i = 0; i < args.length; i++) {
61194      res(i, args[i]);
61195    }
61196  });
61197};
61198
61199Promise.reject = function (value) {
61200  return new Promise(function (resolve, reject) {
61201    reject(value);
61202  });
61203};
61204
61205Promise.race = function (values) {
61206  return new Promise(function (resolve, reject) {
61207    values.forEach(function(value){
61208      Promise.resolve(value).then(resolve, reject);
61209    });
61210  });
61211};
61212
61213/* Prototype Methods */
61214
61215Promise.prototype['catch'] = function (onRejected) {
61216  return this.then(null, onRejected);
61217};
61218
61219
61220/***/ }),
61221
vendor: 703 bytes, lines 61222-61249
61222/***/ "./node_modules/promise/lib/finally.js":
61223/*!*********************************************!*\
61224  !*** ./node_modules/promise/lib/finally.js ***!
61225  \*********************************************/
61226/*! no static exports found */
61227/***/ (function(module, exports, __webpack_require__) {
61228
61229"use strict";
61230
61231
61232var Promise = __webpack_require__(/*! ./core.js */ "./node_modules/promise/lib/core.js");
61233
61234module.exports = Promise;
61235Promise.prototype['finally'] = function (f) {
61236  return this.then(function (value) {
61237    return Promise.resolve(f()).then(function () {
61238      return value;
61239    });
61240  }, function (err) {
61241    return Promise.resolve(f()).then(function () {
61242      throw err;
61243    });
61244  });
61245};
61246
61247
61248/***/ }),
61249
vendor: 843 bytes, lines 61250-61269
61250/***/ "./node_modules/promise/lib/index.js":
61251/*!*******************************************!*\
61252  !*** ./node_modules/promise/lib/index.js ***!
61253  \*******************************************/
61254/*! no static exports found */
61255/***/ (function(module, exports, __webpack_require__) {
61256
61257"use strict";
61258
61259
61260module.exports = __webpack_require__(/*! ./core.js */ "./node_modules/promise/lib/core.js");
61261__webpack_require__(/*! ./done.js */ "./node_modules/promise/lib/done.js");
61262__webpack_require__(/*! ./finally.js */ "./node_modules/promise/lib/finally.js");
61263__webpack_require__(/*! ./es6-extensions.js */ "./node_modules/promise/lib/es6-extensions.js");
61264__webpack_require__(/*! ./node-extensions.js */ "./node_modules/promise/lib/node-extensions.js");
61265__webpack_require__(/*! ./synchronous.js */ "./node_modules/promise/lib/synchronous.js");
61266
61267
61268/***/ }),
61269
vendor: 3,713 bytes, lines 61270-61411
61270/***/ "./node_modules/promise/lib/node-extensions.js":
61271/*!*****************************************************!*\
61272  !*** ./node_modules/promise/lib/node-extensions.js ***!
61273  \*****************************************************/
61274/*! no static exports found */
61275/***/ (function(module, exports, __webpack_require__) {
61276
61277"use strict";
61278
61279
61280// This file contains then/promise specific extensions that are only useful
61281// for node.js interop
61282
61283var Promise = __webpack_require__(/*! ./core.js */ "./node_modules/promise/lib/core.js");
61284var asap = __webpack_require__(/*! asap */ "./node_modules/asap/browser-asap.js");
61285
61286module.exports = Promise;
61287
61288/* Static Functions */
61289
61290Promise.denodeify = function (fn, argumentCount) {
61291  if (
61292    typeof argumentCount === 'number' && argumentCount !== Infinity
61293  ) {
61294    return denodeifyWithCount(fn, argumentCount);
61295  } else {
61296    return denodeifyWithoutCount(fn);
61297  }
61298};
61299
61300var callbackFn = (
61301  'function (err, res) {' +
61302  'if (err) { rj(err); } else { rs(res); }' +
61303  '}'
61304);
61305function denodeifyWithCount(fn, argumentCount) {
61306  var args = [];
61307  for (var i = 0; i < argumentCount; i++) {
61308    args.push('a' + i);
61309  }
61310  var body = [
61311    'return function (' + args.join(',') + ') {',
61312    'var self = this;',
61313    'return new Promise(function (rs, rj) {',
61314    'var res = fn.call(',
61315    ['self'].concat(args).concat([callbackFn]).join(','),
61316    ');',
61317    'if (res &&',
61318    '(typeof res === "object" || typeof res === "function") &&',
61319    'typeof res.then === "function"',
61320    ') {rs(res);}',
61321    '});',
61322    '};'
61323  ].join('');
61324  return Function(['Promise', 'fn'], body)(Promise, fn);
61325}
61326function denodeifyWithoutCount(fn) {
61327  var fnLength = Math.max(fn.length - 1, 3);
61328  var args = [];
61329  for (var i = 0; i < fnLength; i++) {
61330    args.push('a' + i);
61331  }
61332  var body = [
61333    'return function (' + args.join(',') + ') {',
61334    'var self = this;',
61335    'var args;',
61336    'var argLength = arguments.length;',
61337    'if (arguments.length > ' + fnLength + ') {',
61338    'args = new Array(arguments.length + 1);',
61339    'for (var i = 0; i < arguments.length; i++) {',
61340    'args[i] = arguments[i];',
61341    '}',
61342    '}',
61343    'return new Promise(function (rs, rj) {',
61344    'var cb = ' + callbackFn + ';',
61345    'var res;',
61346    'switch (argLength) {',
61347    args.concat(['extra']).map(function (_, index) {
61348      return (
61349        'case ' + (index) + ':' +
61350        'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' +
61351        'break;'
61352      );
61353    }).join(''),
61354    'default:',
61355    'args[argLength] = cb;',
61356    'res = fn.apply(self, args);',
61357    '}',
61358    
61359    'if (res &&',
61360    '(typeof res === "object" || typeof res === "function") &&',
61361    'typeof res.then === "function"',
61362    ') {rs(res);}',
61363    '});',
61364    '};'
61365  ].join('');
61366
61367  return Function(
61368    ['Promise', 'fn'],
61369    body
61370  )(Promise, fn);
61371}
61372
61373Promise.nodeify = function (fn) {
61374  return function () {
61375    var args = Array.prototype.slice.call(arguments);
61376    var callback =
61377      typeof args[args.length - 1] === 'function' ? args.pop() : null;
61378    var ctx = this;
61379    try {
61380      return fn.apply(this, arguments).nodeify(callback, ctx);
61381    } catch (ex) {
61382      if (callback === null || typeof callback == 'undefined') {
61383        return new Promise(function (resolve, reject) {
61384          reject(ex);
61385        });
61386      } else {
61387        asap(function () {
61388          callback.call(ctx, ex);
61389        })
61390      }
61391    }
61392  }
61393};
61394
61395Promise.prototype.nodeify = function (callback, ctx) {
61396  if (typeof callback != 'function') return this;
61397
61398  this.then(function (value) {
61399    asap(function () {
61400      callback.call(ctx, null, value);
61401    });
61402  }, function (err) {
61403    asap(function () {
61404      callback.call(ctx, err);
61405    });
61406  });
61407};
61408
61409
61410/***/ }),
61411
vendor: 1,770 bytes, lines 61412-61485
61412/***/ "./node_modules/promise/lib/synchronous.js":
61413/*!*************************************************!*\
61414  !*** ./node_modules/promise/lib/synchronous.js ***!
61415  \*************************************************/
61416/*! no static exports found */
61417/***/ (function(module, exports, __webpack_require__) {
61418
61419"use strict";
61420
61421
61422var Promise = __webpack_require__(/*! ./core.js */ "./node_modules/promise/lib/core.js");
61423
61424module.exports = Promise;
61425Promise.enableSynchronous = function () {
61426  Promise.prototype.isPending = function() {
61427    return this.getState() == 0;
61428  };
61429
61430  Promise.prototype.isFulfilled = function() {
61431    return this.getState() == 1;
61432  };
61433
61434  Promise.prototype.isRejected = function() {
61435    return this.getState() == 2;
61436  };
61437
61438  Promise.prototype.getValue = function () {
61439    if (this._65 === 3) {
61440      return this._55.getValue();
61441    }
61442
61443    if (!this.isFulfilled()) {
61444      throw new Error('Cannot get a value of an unfulfilled promise.');
61445    }
61446
61447    return this._55;
61448  };
61449
61450  Promise.prototype.getReason = function () {
61451    if (this._65 === 3) {
61452      return this._55.getReason();
61453    }
61454
61455    if (!this.isRejected()) {
61456      throw new Error('Cannot get a rejection reason of a non-rejected promise.');
61457    }
61458
61459    return this._55;
61460  };
61461
61462  Promise.prototype.getState = function () {
61463    if (this._65 === 3) {
61464      return this._55.getState();
61465    }
61466    if (this._65 === -1 || this._65 === -2) {
61467      return 0;
61468    }
61469
61470    return this._65;
61471  };
61472};
61473
61474Promise.disableSynchronous = function() {
61475  Promise.prototype.isPending = undefined;
61476  Promise.prototype.isFulfilled = undefined;
61477  Promise.prototype.isRejected = undefined;
61478  Promise.prototype.getValue = undefined;
61479  Promise.prototype.getReason = undefined;
61480  Promise.prototype.getState = undefined;
61481};
61482
61483
61484/***/ }),
61485
vendor: 7,087 bytes, lines 61486-61683
61486/***/ "./node_modules/setimmediate/setImmediate.js":
61487/*!***************************************************!*\
61488  !*** ./node_modules/setimmediate/setImmediate.js ***!
61489  \***************************************************/
61490/*! no static exports found */
61491/***/ (function(module, exports, __webpack_require__) {
61492
61493/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {
61494    "use strict";
61495
61496    if (global.setImmediate) {
61497        return;
61498    }
61499
61500    var nextHandle = 1; // Spec says greater than zero
61501    var tasksByHandle = {};
61502    var currentlyRunningATask = false;
61503    var doc = global.document;
61504    var registerImmediate;
61505
61506    function setImmediate(callback) {
61507      // Callback can either be a function or a string
61508      if (typeof callback !== "function") {
61509        callback = new Function("" + callback);
61510      }
61511      // Copy function arguments
61512      var args = new Array(arguments.length - 1);
61513      for (var i = 0; i < args.length; i++) {
61514          args[i] = arguments[i + 1];
61515      }
61516      // Store and register the task
61517      var task = { callback: callback, args: args };
61518      tasksByHandle[nextHandle] = task;
61519      registerImmediate(nextHandle);
61520      return nextHandle++;
61521    }
61522
61523    function clearImmediate(handle) {
61524        delete tasksByHandle[handle];
61525    }
61526
61527    function run(task) {
61528        var callback = task.callback;
61529        var args = task.args;
61530        switch (args.length) {
61531        case 0:
61532            callback();
61533            break;
61534        case 1:
61535            callback(args[0]);
61536            break;
61537        case 2:
61538            callback(args[0], args[1]);
61539            break;
61540        case 3:
61541            callback(args[0], args[1], args[2]);
61542            break;
61543        default:
61544            callback.apply(undefined, args);
61545            break;
61546        }
61547    }
61548
61549    function runIfPresent(handle) {
61550        // From the spec: "Wait until any invocations of this algorithm started before this one have completed."
61551        // So if we're currently running a task, we'll need to delay this invocation.
61552        if (currentlyRunningATask) {
61553            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
61554            // "too much recursion" error.
61555            setTimeout(runIfPresent, 0, handle);
61556        } else {
61557            var task = tasksByHandle[handle];
61558            if (task) {
61559                currentlyRunningATask = true;
61560                try {
61561                    run(task);
61562                } finally {
61563                    clearImmediate(handle);
61564                    currentlyRunningATask = false;
61565                }
61566            }
61567        }
61568    }
61569
61570    function installNextTickImplementation() {
61571        registerImmediate = function(handle) {
61572            process.nextTick(function () { runIfPresent(handle); });
61573        };
61574    }
61575
61576    function canUsePostMessage() {
61577        // The test against `importScripts` prevents this implementation from being installed inside a web worker,
61578        // where `global.postMessage` means something completely different and can't be used for this purpose.
61579        if (global.postMessage && !global.importScripts) {
61580            var postMessageIsAsynchronous = true;
61581            var oldOnMessage = global.onmessage;
61582            global.onmessage = function() {
61583                postMessageIsAsynchronous = false;
61584            };
61585            global.postMessage("", "*");
61586            global.onmessage = oldOnMessage;
61587            return postMessageIsAsynchronous;
61588        }
61589    }
61590
61591    function installPostMessageImplementation() {
61592        // Installs an event handler on `global` for the `message` event: see
61593        // * https://developer.mozilla.org/en/DOM/window.postMessage
61594        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
61595
61596        var messagePrefix = "setImmediate$" + Math.random() + "$";
61597        var onGlobalMessage = function(event) {
61598            if (event.source === global &&
61599                typeof event.data === "string" &&
61600                event.data.indexOf(messagePrefix) === 0) {
61601                runIfPresent(+event.data.slice(messagePrefix.length));
61602            }
61603        };
61604
61605        if (global.addEventListener) {
61606            global.addEventListener("message", onGlobalMessage, false);
61607        } else {
61608            global.attachEvent("onmessage", onGlobalMessage);
61609        }
61610
61611        registerImmediate = function(handle) {
61612            global.postMessage(messagePrefix + handle, "*");
61613        };
61614    }
61615
61616    function installMessageChannelImplementation() {
61617        var channel = new MessageChannel();
61618        channel.port1.onmessage = function(event) {
61619            var handle = event.data;
61620            runIfPresent(handle);
61621        };
61622
61623        registerImmediate = function(handle) {
61624            channel.port2.postMessage(handle);
61625        };
61626    }
61627
61628    function installReadyStateChangeImplementation() {
61629        var html = doc.documentElement;
61630        registerImmediate = function(handle) {
61631            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
61632            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
61633            var script = doc.createElement("script");
61634            script.onreadystatechange = function () {
61635                runIfPresent(handle);
61636                script.onreadystatechange = null;
61637                html.removeChild(script);
61638                script = null;
61639            };
61640            html.appendChild(script);
61641        };
61642    }
61643
61644    function installSetTimeoutImplementation() {
61645        registerImmediate = function(handle) {
61646            setTimeout(runIfPresent, 0, handle);
61647        };
61648    }
61649
61650    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
61651    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);
61652    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;
61653
61654    // Don't get fooled by e.g. browserify environments.
61655    if ({}.toString.call(global.process) === "[object process]") {
61656        // For Node.js before 0.9
61657        installNextTickImplementation();
61658
61659    } else if (canUsePostMessage()) {
61660        // For non-IE10 modern browsers
61661        installPostMessageImplementation();
61662
61663    } else if (global.MessageChannel) {
61664        // For web workers, where supported
61665        installMessageChannelImplementation();
61666
61667    } else if (doc && "onreadystatechange" in doc.createElement("script")) {
61668        // For IE 6–8
61669        installReadyStateChangeImplementation();
61670
61671    } else {
61672        // For older browsers
61673        installSetTimeoutImplementation();
61674    }
61675
61676    attachTo.setImmediate = setImmediate;
61677    attachTo.clearImmediate = clearImmediate;
61678}(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self));
61679
61680/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js")))
61681
61682/***/ }),
61683
vendor: 2,587 bytes, lines 61684-61758
61684/***/ "./node_modules/timers-browserify/main.js":
61685/*!************************************************!*\
61686  !*** ./node_modules/timers-browserify/main.js ***!
61687  \************************************************/
61688/*! no static exports found */
61689/***/ (function(module, exports, __webpack_require__) {
61690
61691/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== "undefined" && global) ||
61692            (typeof self !== "undefined" && self) ||
61693            window;
61694var apply = Function.prototype.apply;
61695
61696// DOM APIs, for completeness
61697
61698exports.setTimeout = function() {
61699  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);
61700};
61701exports.setInterval = function() {
61702  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);
61703};
61704exports.clearTimeout =
61705exports.clearInterval = function(timeout) {
61706  if (timeout) {
61707    timeout.close();
61708  }
61709};
61710
61711function Timeout(id, clearFn) {
61712  this._id = id;
61713  this._clearFn = clearFn;
61714}
61715Timeout.prototype.unref = Timeout.prototype.ref = function() {};
61716Timeout.prototype.close = function() {
61717  this._clearFn.call(scope, this._id);
61718};
61719
61720// Does not start the time, just sets up the members needed.
61721exports.enroll = function(item, msecs) {
61722  clearTimeout(item._idleTimeoutId);
61723  item._idleTimeout = msecs;
61724};
61725
61726exports.unenroll = function(item) {
61727  clearTimeout(item._idleTimeoutId);
61728  item._idleTimeout = -1;
61729};
61730
61731exports._unrefActive = exports.active = function(item) {
61732  clearTimeout(item._idleTimeoutId);
61733
61734  var msecs = item._idleTimeout;
61735  if (msecs >= 0) {
61736    item._idleTimeoutId = setTimeout(function onTimeout() {
61737      if (item._onTimeout)
61738        item._onTimeout();
61739    }, msecs);
61740  }
61741};
61742
61743// setimmediate attaches itself to the global object
61744__webpack_require__(/*! setimmediate */ "./node_modules/setimmediate/setImmediate.js");
61745// On some exotic environments, it's not clear which object `setimmediate` was
61746// able to install onto.  Search each possibility in the same order as the
61747// `setimmediate` library.
61748exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) ||
61749                       (typeof global !== "undefined" && global.setImmediate) ||
61750                       (this && this.setImmediate);
61751exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) ||
61752                         (typeof global !== "undefined" && global.clearImmediate) ||
61753                         (this && this.clearImmediate);
61754
61755/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
61756
61757/***/ }),
61758
vendor: 4,987 bytes, lines 61759-61955
61759/***/ "./node_modules/urijs/src/IPv6.js":
61760/*!****************************************!*\
61761  !*** ./node_modules/urijs/src/IPv6.js ***!
61762  \****************************************/
61763/*! no static exports found */
61764/***/ (function(module, exports, __webpack_require__) {
61765
61766var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
61767 * URI.js - Mutating URLs
61768 * IPv6 Support
61769 *
61770 * Version: 1.19.11
61771 *
61772 * Author: Rodney Rehm
61773 * Web: http://medialize.github.io/URI.js/
61774 *
61775 * Licensed under
61776 *   MIT License http://www.opensource.org/licenses/mit-license
61777 *
61778 */
61779
61780(function (root, factory) {
61781  'use strict';
61782  // https://github.com/umdjs/umd/blob/master/returnExports.js
61783  if ( true && module.exports) {
61784    // Node
61785    module.exports = factory();
61786  } else if (true) {
61787    // AMD. Register as an anonymous module.
61788    !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
61789				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
61790				(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :
61791				__WEBPACK_AMD_DEFINE_FACTORY__),
61792				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
61793  } else {}
61794}(this, function (root) {
61795  'use strict';
61796
61797  /*
61798  var _in = "fe80:0000:0000:0000:0204:61ff:fe9d:f156";
61799  var _out = IPv6.best(_in);
61800  var _expected = "fe80::204:61ff:fe9d:f156";
61801
61802  console.log(_in, _out, _expected, _out === _expected);
61803  */
61804
61805  // save current IPv6 variable, if any
61806  var _IPv6 = root && root.IPv6;
61807
61808  function bestPresentation(address) {
61809    // based on:
61810    // Javascript to test an IPv6 address for proper format, and to
61811    // present the "best text representation" according to IETF Draft RFC at
61812    // http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04
61813    // 8 Feb 2010 Rich Brown, Dartware, LLC
61814    // Please feel free to use this code as long as you provide a link to
61815    // http://www.intermapper.com
61816    // http://intermapper.com/support/tools/IPV6-Validator.aspx
61817    // http://download.dartware.com/thirdparty/ipv6validator.js
61818
61819    var _address = address.toLowerCase();
61820    var segments = _address.split(':');
61821    var length = segments.length;
61822    var total = 8;
61823
61824    // trim colons (:: or ::a:b:c… or …a:b:c::)
61825    if (segments[0] === '' && segments[1] === '' && segments[2] === '') {
61826      // must have been ::
61827      // remove first two items
61828      segments.shift();
61829      segments.shift();
61830    } else if (segments[0] === '' && segments[1] === '') {
61831      // must have been ::xxxx
61832      // remove the first item
61833      segments.shift();
61834    } else if (segments[length - 1] === '' && segments[length - 2] === '') {
61835      // must have been xxxx::
61836      segments.pop();
61837    }
61838
61839    length = segments.length;
61840
61841    // adjust total segments for IPv4 trailer
61842    if (segments[length - 1].indexOf('.') !== -1) {
61843      // found a "." which means IPv4
61844      total = 7;
61845    }
61846
61847    // fill empty segments them with "0000"
61848    var pos;
61849    for (pos = 0; pos < length; pos++) {
61850      if (segments[pos] === '') {
61851        break;
61852      }
61853    }
61854
61855    if (pos < total) {
61856      segments.splice(pos, 1, '0000');
61857      while (segments.length < total) {
61858        segments.splice(pos, 0, '0000');
61859      }
61860    }
61861
61862    // strip leading zeros
61863    var _segments;
61864    for (var i = 0; i < total; i++) {
61865      _segments = segments[i].split('');
61866      for (var j = 0; j < 3 ; j++) {
61867        if (_segments[0] === '0' && _segments.length > 1) {
61868          _segments.splice(0,1);
61869        } else {
61870          break;
61871        }
61872      }
61873
61874      segments[i] = _segments.join('');
61875    }
61876
61877    // find longest sequence of zeroes and coalesce them into one segment
61878    var best = -1;
61879    var _best = 0;
61880    var _current = 0;
61881    var current = -1;
61882    var inzeroes = false;
61883    // i; already declared
61884
61885    for (i = 0; i < total; i++) {
61886      if (inzeroes) {
61887        if (segments[i] === '0') {
61888          _current += 1;
61889        } else {
61890          inzeroes = false;
61891          if (_current > _best) {
61892            best = current;
61893            _best = _current;
61894          }
61895        }
61896      } else {
61897        if (segments[i] === '0') {
61898          inzeroes = true;
61899          current = i;
61900          _current = 1;
61901        }
61902      }
61903    }
61904
61905    if (_current > _best) {
61906      best = current;
61907      _best = _current;
61908    }
61909
61910    if (_best > 1) {
61911      segments.splice(best, _best, '');
61912    }
61913
61914    length = segments.length;
61915
61916    // assemble remaining segments
61917    var result = '';
61918    if (segments[0] === '')  {
61919      result = ':';
61920    }
61921
61922    for (i = 0; i < length; i++) {
61923      result += segments[i];
61924      if (i === length - 1) {
61925        break;
61926      }
61927
61928      result += ':';
61929    }
61930
61931    if (segments[length - 1] === '') {
61932      result += ':';
61933    }
61934
61935    return result;
61936  }
61937
61938  function noConflict() {
61939    /*jshint validthis: true */
61940    if (root.IPv6 === this) {
61941      root.IPv6 = _IPv6;
61942    }
61943
61944    return this;
61945  }
61946
61947  return {
61948    best: bestPresentation,
61949    noConflict: noConflict
61950  };
61951}));
61952
61953
61954/***/ }),
61955
vendor: 12,695 bytes, lines 61956-62212
61956/***/ "./node_modules/urijs/src/SecondLevelDomains.js":
61957/*!******************************************************!*\
61958  !*** ./node_modules/urijs/src/SecondLevelDomains.js ***!
61959  \******************************************************/
61960/*! no static exports found */
61961/***/ (function(module, exports, __webpack_require__) {
61962
61963var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
61964 * URI.js - Mutating URLs
61965 * Second Level Domain (SLD) Support
61966 *
61967 * Version: 1.19.11
61968 *
61969 * Author: Rodney Rehm
61970 * Web: http://medialize.github.io/URI.js/
61971 *
61972 * Licensed under
61973 *   MIT License http://www.opensource.org/licenses/mit-license
61974 *
61975 */
61976
61977(function (root, factory) {
61978  'use strict';
61979  // https://github.com/umdjs/umd/blob/master/returnExports.js
61980  if ( true && module.exports) {
61981    // Node
61982    module.exports = factory();
61983  } else if (true) {
61984    // AMD. Register as an anonymous module.
61985    !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
61986				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
61987				(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :
61988				__WEBPACK_AMD_DEFINE_FACTORY__),
61989				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
61990  } else {}
61991}(this, function (root) {
61992  'use strict';
61993
61994  // save current SecondLevelDomains variable, if any
61995  var _SecondLevelDomains = root && root.SecondLevelDomains;
61996
61997  var SLD = {
61998    // list of known Second Level Domains
61999    // converted list of SLDs from https://github.com/gavingmiller/second-level-domains
62000    // ----
62001    // publicsuffix.org is more current and actually used by a couple of browsers internally.
62002    // downside is it also contains domains like "dyndns.org" - which is fine for the security
62003    // issues browser have to deal with (SOP for cookies, etc) - but is way overboard for URI.js
62004    // ----
62005    list: {
62006      'ac':' com gov mil net org ',
62007      'ae':' ac co gov mil name net org pro sch ',
62008      'af':' com edu gov net org ',
62009      'al':' com edu gov mil net org ',
62010      'ao':' co ed gv it og pb ',
62011      'ar':' com edu gob gov int mil net org tur ',
62012      'at':' ac co gv or ',
62013      'au':' asn com csiro edu gov id net org ',
62014      'ba':' co com edu gov mil net org rs unbi unmo unsa untz unze ',
62015      'bb':' biz co com edu gov info net org store tv ',
62016      'bh':' biz cc com edu gov info net org ',
62017      'bn':' com edu gov net org ',
62018      'bo':' com edu gob gov int mil net org tv ',
62019      'br':' adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ',
62020      'bs':' com edu gov net org ',
62021      'bz':' du et om ov rg ',
62022      'ca':' ab bc mb nb nf nl ns nt nu on pe qc sk yk ',
62023      'ck':' biz co edu gen gov info net org ',
62024      'cn':' ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ',
62025      'co':' com edu gov mil net nom org ',
62026      'cr':' ac c co ed fi go or sa ',
62027      'cy':' ac biz com ekloges gov ltd name net org parliament press pro tm ',
62028      'do':' art com edu gob gov mil net org sld web ',
62029      'dz':' art asso com edu gov net org pol ',
62030      'ec':' com edu fin gov info med mil net org pro ',
62031      'eg':' com edu eun gov mil name net org sci ',
62032      'er':' com edu gov ind mil net org rochest w ',
62033      'es':' com edu gob nom org ',
62034      'et':' biz com edu gov info name net org ',
62035      'fj':' ac biz com info mil name net org pro ',
62036      'fk':' ac co gov net nom org ',
62037      'fr':' asso com f gouv nom prd presse tm ',
62038      'gg':' co net org ',
62039      'gh':' com edu gov mil org ',
62040      'gn':' ac com gov net org ',
62041      'gr':' com edu gov mil net org ',
62042      'gt':' com edu gob ind mil net org ',
62043      'gu':' com edu gov net org ',
62044      'hk':' com edu gov idv net org ',
62045      'hu':' 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ',
62046      'id':' ac co go mil net or sch web ',
62047      'il':' ac co gov idf k12 muni net org ',
62048      'in':' ac co edu ernet firm gen gov i ind mil net nic org res ',
62049      'iq':' com edu gov i mil net org ',
62050      'ir':' ac co dnssec gov i id net org sch ',
62051      'it':' edu gov ',
62052      'je':' co net org ',
62053      'jo':' com edu gov mil name net org sch ',
62054      'jp':' ac ad co ed go gr lg ne or ',
62055      'ke':' ac co go info me mobi ne or sc ',
62056      'kh':' com edu gov mil net org per ',
62057      'ki':' biz com de edu gov info mob net org tel ',
62058      'km':' asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ',
62059      'kn':' edu gov net org ',
62060      'kr':' ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ',
62061      'kw':' com edu gov net org ',
62062      'ky':' com edu gov net org ',
62063      'kz':' com edu gov mil net org ',
62064      'lb':' com edu gov net org ',
62065      'lk':' assn com edu gov grp hotel int ltd net ngo org sch soc web ',
62066      'lr':' com edu gov net org ',
62067      'lv':' asn com conf edu gov id mil net org ',
62068      'ly':' com edu gov id med net org plc sch ',
62069      'ma':' ac co gov m net org press ',
62070      'mc':' asso tm ',
62071      'me':' ac co edu gov its net org priv ',
62072      'mg':' com edu gov mil nom org prd tm ',
62073      'mk':' com edu gov inf name net org pro ',
62074      'ml':' com edu gov net org presse ',
62075      'mn':' edu gov org ',
62076      'mo':' com edu gov net org ',
62077      'mt':' com edu gov net org ',
62078      'mv':' aero biz com coop edu gov info int mil museum name net org pro ',
62079      'mw':' ac co com coop edu gov int museum net org ',
62080      'mx':' com edu gob net org ',
62081      'my':' com edu gov mil name net org sch ',
62082      'nf':' arts com firm info net other per rec store web ',
62083      'ng':' biz com edu gov mil mobi name net org sch ',
62084      'ni':' ac co com edu gob mil net nom org ',
62085      'np':' com edu gov mil net org ',
62086      'nr':' biz com edu gov info net org ',
62087      'om':' ac biz co com edu gov med mil museum net org pro sch ',
62088      'pe':' com edu gob mil net nom org sld ',
62089      'ph':' com edu gov i mil net ngo org ',
62090      'pk':' biz com edu fam gob gok gon gop gos gov net org web ',
62091      'pl':' art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ',
62092      'pr':' ac biz com edu est gov info isla name net org pro prof ',
62093      'ps':' com edu gov net org plo sec ',
62094      'pw':' belau co ed go ne or ',
62095      'ro':' arts com firm info nom nt org rec store tm www ',
62096      'rs':' ac co edu gov in org ',
62097      'sb':' com edu gov net org ',
62098      'sc':' com edu gov net org ',
62099      'sh':' co com edu gov net nom org ',
62100      'sl':' com edu gov net org ',
62101      'st':' co com consulado edu embaixada gov mil net org principe saotome store ',
62102      'sv':' com edu gob org red ',
62103      'sz':' ac co org ',
62104      'tr':' av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ',
62105      'tt':' aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ',
62106      'tw':' club com ebiz edu game gov idv mil net org ',
62107      'mu':' ac co com gov net or org ',
62108      'mz':' ac co edu gov org ',
62109      'na':' co com ',
62110      'nz':' ac co cri geek gen govt health iwi maori mil net org parliament school ',
62111      'pa':' abo ac com edu gob ing med net nom org sld ',
62112      'pt':' com edu gov int net nome org publ ',
62113      'py':' com edu gov mil net org ',
62114      'qa':' com edu gov mil net org ',
62115      're':' asso com nom ',
62116      'ru':' ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ',
62117      'rw':' ac co com edu gouv gov int mil net ',
62118      'sa':' com edu gov med net org pub sch ',
62119      'sd':' com edu gov info med net org tv ',
62120      'se':' a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ',
62121      'sg':' com edu gov idn net org per ',
62122      'sn':' art com edu gouv org perso univ ',
62123      'sy':' com edu gov mil net news org ',
62124      'th':' ac co go in mi net or ',
62125      'tj':' ac biz co com edu go gov info int mil name net nic org test web ',
62126      'tn':' agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ',
62127      'tz':' ac co go ne or ',
62128      'ua':' biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ',
62129      'ug':' ac co go ne or org sc ',
62130      'uk':' ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ',
62131      'us':' dni fed isa kids nsn ',
62132      'uy':' com edu gub mil net org ',
62133      've':' co com edu gob info mil net org web ',
62134      'vi':' co com k12 net org ',
62135      'vn':' ac biz com edu gov health info int name net org pro ',
62136      'ye':' co com gov ltd me net org plc ',
62137      'yu':' ac co edu gov org ',
62138      'za':' ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ',
62139      'zm':' ac co com edu gov net org sch ',
62140      // https://en.wikipedia.org/wiki/CentralNic#Second-level_domains
62141      'com': 'ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ',
62142      'net': 'gb jp se uk ',
62143      'org': 'ae',
62144      'de': 'com '
62145    },
62146    // gorhill 2013-10-25: Using indexOf() instead Regexp(). Significant boost
62147    // in both performance and memory footprint. No initialization required.
62148    // http://jsperf.com/uri-js-sld-regex-vs-binary-search/4
62149    // Following methods use lastIndexOf() rather than array.split() in order
62150    // to avoid any memory allocations.
62151    has: function(domain) {
62152      var tldOffset = domain.lastIndexOf('.');
62153      if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {
62154        return false;
62155      }
62156      var sldOffset = domain.lastIndexOf('.', tldOffset-1);
62157      if (sldOffset <= 0 || sldOffset >= (tldOffset-1)) {
62158        return false;
62159      }
62160      var sldList = SLD.list[domain.slice(tldOffset+1)];
62161      if (!sldList) {
62162        return false;
62163      }
62164      return sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') >= 0;
62165    },
62166    is: function(domain) {
62167      var tldOffset = domain.lastIndexOf('.');
62168      if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {
62169        return false;
62170      }
62171      var sldOffset = domain.lastIndexOf('.', tldOffset-1);
62172      if (sldOffset >= 0) {
62173        return false;
62174      }
62175      var sldList = SLD.list[domain.slice(tldOffset+1)];
62176      if (!sldList) {
62177        return false;
62178      }
62179      return sldList.indexOf(' ' + domain.slice(0, tldOffset) + ' ') >= 0;
62180    },
62181    get: function(domain) {
62182      var tldOffset = domain.lastIndexOf('.');
62183      if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {
62184        return null;
62185      }
62186      var sldOffset = domain.lastIndexOf('.', tldOffset-1);
62187      if (sldOffset <= 0 || sldOffset >= (tldOffset-1)) {
62188        return null;
62189      }
62190      var sldList = SLD.list[domain.slice(tldOffset+1)];
62191      if (!sldList) {
62192        return null;
62193      }
62194      if (sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') < 0) {
62195        return null;
62196      }
62197      return domain.slice(sldOffset+1);
62198    },
62199    noConflict: function(){
62200      if (root.SecondLevelDomains === this) {
62201        root.SecondLevelDomains = _SecondLevelDomains;
62202      }
62203      return this;
62204    }
62205  };
62206
62207  return SLD;
62208}));
62209
62210
62211/***/ }),
62212
vendor: 68,287 bytes, lines 62213-64587
62213/***/ "./node_modules/urijs/src/URI.js":
62214/*!***************************************!*\
62215  !*** ./node_modules/urijs/src/URI.js ***!
62216  \***************************************/
62217/*! no static exports found */
62218/***/ (function(module, exports, __webpack_require__) {
62219
62220var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
62221 * URI.js - Mutating URLs
62222 *
62223 * Version: 1.19.11
62224 *
62225 * Author: Rodney Rehm
62226 * Web: http://medialize.github.io/URI.js/
62227 *
62228 * Licensed under
62229 *   MIT License http://www.opensource.org/licenses/mit-license
62230 *
62231 */
62232(function (root, factory) {
62233  'use strict';
62234  // https://github.com/umdjs/umd/blob/master/returnExports.js
62235  if ( true && module.exports) {
62236    // Node
62237    module.exports = factory(__webpack_require__(/*! ./punycode */ "./node_modules/urijs/src/punycode.js"), __webpack_require__(/*! ./IPv6 */ "./node_modules/urijs/src/IPv6.js"), __webpack_require__(/*! ./SecondLevelDomains */ "./node_modules/urijs/src/SecondLevelDomains.js"));
62238  } else if (true) {
62239    // AMD. Register as an anonymous module.
62240    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ./punycode */ "./node_modules/urijs/src/punycode.js"), __webpack_require__(/*! ./IPv6 */ "./node_modules/urijs/src/IPv6.js"), __webpack_require__(/*! ./SecondLevelDomains */ "./node_modules/urijs/src/SecondLevelDomains.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
62241				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
62242				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
62243				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
62244  } else {}
62245}(this, function (punycode, IPv6, SLD, root) {
62246  'use strict';
62247  /*global location, escape, unescape */
62248  // FIXME: v2.0.0 renamce non-camelCase properties to uppercase
62249  /*jshint camelcase: false */
62250
62251  // save current URI variable, if any
62252  var _URI = root && root.URI;
62253
62254  function URI(url, base) {
62255    var _urlSupplied = arguments.length >= 1;
62256    var _baseSupplied = arguments.length >= 2;
62257
62258    // Allow instantiation without the 'new' keyword
62259    if (!(this instanceof URI)) {
62260      if (_urlSupplied) {
62261        if (_baseSupplied) {
62262          return new URI(url, base);
62263        }
62264
62265        return new URI(url);
62266      }
62267
62268      return new URI();
62269    }
62270
62271    if (url === undefined) {
62272      if (_urlSupplied) {
62273        throw new TypeError('undefined is not a valid argument for URI');
62274      }
62275
62276      if (typeof location !== 'undefined') {
62277        url = location.href + '';
62278      } else {
62279        url = '';
62280      }
62281    }
62282
62283    if (url === null) {
62284      if (_urlSupplied) {
62285        throw new TypeError('null is not a valid argument for URI');
62286      }
62287    }
62288
62289    this.href(url);
62290
62291    // resolve to base according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#constructor
62292    if (base !== undefined) {
62293      return this.absoluteTo(base);
62294    }
62295
62296    return this;
62297  }
62298
62299  function isInteger(value) {
62300    return /^[0-9]+$/.test(value);
62301  }
62302
62303  URI.version = '1.19.11';
62304
62305  var p = URI.prototype;
62306  var hasOwn = Object.prototype.hasOwnProperty;
62307
62308  function escapeRegEx(string) {
62309    // https://github.com/medialize/URI.js/commit/85ac21783c11f8ccab06106dba9735a31a86924d#commitcomment-821963
62310    return string.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
62311  }
62312
62313  function getType(value) {
62314    // IE8 doesn't return [Object Undefined] but [Object Object] for undefined value
62315    if (value === undefined) {
62316      return 'Undefined';
62317    }
62318
62319    return String(Object.prototype.toString.call(value)).slice(8, -1);
62320  }
62321
62322  function isArray(obj) {
62323    return getType(obj) === 'Array';
62324  }
62325
62326  function filterArrayValues(data, value) {
62327    var lookup = {};
62328    var i, length;
62329
62330    if (getType(value) === 'RegExp') {
62331      lookup = null;
62332    } else if (isArray(value)) {
62333      for (i = 0, length = value.length; i < length; i++) {
62334        lookup[value[i]] = true;
62335      }
62336    } else {
62337      lookup[value] = true;
62338    }
62339
62340    for (i = 0, length = data.length; i < length; i++) {
62341      /*jshint laxbreak: true */
62342      var _match = lookup && lookup[data[i]] !== undefined
62343        || !lookup && value.test(data[i]);
62344      /*jshint laxbreak: false */
62345      if (_match) {
62346        data.splice(i, 1);
62347        length--;
62348        i--;
62349      }
62350    }
62351
62352    return data;
62353  }
62354
62355  function arrayContains(list, value) {
62356    var i, length;
62357
62358    // value may be string, number, array, regexp
62359    if (isArray(value)) {
62360      // Note: this can be optimized to O(n) (instead of current O(m * n))
62361      for (i = 0, length = value.length; i < length; i++) {
62362        if (!arrayContains(list, value[i])) {
62363          return false;
62364        }
62365      }
62366
62367      return true;
62368    }
62369
62370    var _type = getType(value);
62371    for (i = 0, length = list.length; i < length; i++) {
62372      if (_type === 'RegExp') {
62373        if (typeof list[i] === 'string' && list[i].match(value)) {
62374          return true;
62375        }
62376      } else if (list[i] === value) {
62377        return true;
62378      }
62379    }
62380
62381    return false;
62382  }
62383
62384  function arraysEqual(one, two) {
62385    if (!isArray(one) || !isArray(two)) {
62386      return false;
62387    }
62388
62389    // arrays can't be equal if they have different amount of content
62390    if (one.length !== two.length) {
62391      return false;
62392    }
62393
62394    one.sort();
62395    two.sort();
62396
62397    for (var i = 0, l = one.length; i < l; i++) {
62398      if (one[i] !== two[i]) {
62399        return false;
62400      }
62401    }
62402
62403    return true;
62404  }
62405
62406  function trimSlashes(text) {
62407    var trim_expression = /^\/+|\/+$/g;
62408    return text.replace(trim_expression, '');
62409  }
62410
62411  URI._parts = function() {
62412    return {
62413      protocol: null,
62414      username: null,
62415      password: null,
62416      hostname: null,
62417      urn: null,
62418      port: null,
62419      path: null,
62420      query: null,
62421      fragment: null,
62422      // state
62423      preventInvalidHostname: URI.preventInvalidHostname,
62424      duplicateQueryParameters: URI.duplicateQueryParameters,
62425      escapeQuerySpace: URI.escapeQuerySpace
62426    };
62427  };
62428  // state: throw on invalid hostname
62429  // see https://github.com/medialize/URI.js/pull/345
62430  // and https://github.com/medialize/URI.js/issues/354
62431  URI.preventInvalidHostname = false;
62432  // state: allow duplicate query parameters (a=1&a=1)
62433  URI.duplicateQueryParameters = false;
62434  // state: replaces + with %20 (space in query strings)
62435  URI.escapeQuerySpace = true;
62436  // static properties
62437  URI.protocol_expression = /^[a-z][a-z0-9.+-]*$/i;
62438  URI.idn_expression = /[^a-z0-9\._-]/i;
62439  URI.punycode_expression = /(xn--)/i;
62440  // well, 333.444.555.666 matches, but it sure ain't no IPv4 - do we care?
62441  URI.ip4_expression = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
62442  // credits to Rich Brown
62443  // source: http://forums.intermapper.com/viewtopic.php?p=1096#1096
62444  // specification: http://www.ietf.org/rfc/rfc4291.txt
62445  URI.ip6_expression = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/;
62446  // expression used is "gruber revised" (@gruber v2) determined to be the
62447  // best solution in a regex-golf we did a couple of ages ago at
62448  // * http://mathiasbynens.be/demo/url-regex
62449  // * http://rodneyrehm.de/t/url-regex.html
62450  URI.find_uri_expression = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/ig;
62451  URI.findUri = {
62452    // valid "scheme://" or "www."
62453    start: /\b(?:([a-z][a-z0-9.+-]*:\/\/)|www\.)/gi,
62454    // everything up to the next whitespace
62455    end: /[\s\r\n]|$/,
62456    // trim trailing punctuation captured by end RegExp
62457    trim: /[`!()\[\]{};:'".,<>?«»“”„‘’]+$/,
62458    // balanced parens inclusion (), [], {}, <>
62459    parens: /(\([^\)]*\)|\[[^\]]*\]|\{[^}]*\}|<[^>]*>)/g,
62460  };
62461  URI.leading_whitespace_expression = /^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/
62462  // https://infra.spec.whatwg.org/#ascii-tab-or-newline
62463  URI.ascii_tab_whitespace = /[\u0009\u000A\u000D]+/g
62464  // http://www.iana.org/assignments/uri-schemes.html
62465  // http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports
62466  URI.defaultPorts = {
62467    http: '80',
62468    https: '443',
62469    ftp: '21',
62470    gopher: '70',
62471    ws: '80',
62472    wss: '443'
62473  };
62474  // list of protocols which always require a hostname
62475  URI.hostProtocols = [
62476    'http',
62477    'https'
62478  ];
62479
62480  // allowed hostname characters according to RFC 3986
62481  // ALPHA DIGIT "-" "." "_" "~" "!" "$" "&" "'" "(" ")" "*" "+" "," ";" "=" %encoded
62482  // I've never seen a (non-IDN) hostname other than: ALPHA DIGIT . - _
62483  URI.invalid_hostname_characters = /[^a-zA-Z0-9\.\-:_]/;
62484  // map DOM Elements to their URI attribute
62485  URI.domAttributes = {
62486    'a': 'href',
62487    'blockquote': 'cite',
62488    'link': 'href',
62489    'base': 'href',
62490    'script': 'src',
62491    'form': 'action',
62492    'img': 'src',
62493    'area': 'href',
62494    'iframe': 'src',
62495    'embed': 'src',
62496    'source': 'src',
62497    'track': 'src',
62498    'input': 'src', // but only if type="image"
62499    'audio': 'src',
62500    'video': 'src'
62501  };
62502  URI.getDomAttribute = function(node) {
62503    if (!node || !node.nodeName) {
62504      return undefined;
62505    }
62506
62507    var nodeName = node.nodeName.toLowerCase();
62508    // <input> should only expose src for type="image"
62509    if (nodeName === 'input' && node.type !== 'image') {
62510      return undefined;
62511    }
62512
62513    return URI.domAttributes[nodeName];
62514  };
62515
62516  function escapeForDumbFirefox36(value) {
62517    // https://github.com/medialize/URI.js/issues/91
62518    return escape(value);
62519  }
62520
62521  // encoding / decoding according to RFC3986
62522  function strictEncodeURIComponent(string) {
62523    // see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent
62524    return encodeURIComponent(string)
62525      .replace(/[!'()*]/g, escapeForDumbFirefox36)
62526      .replace(/\*/g, '%2A');
62527  }
62528  URI.encode = strictEncodeURIComponent;
62529  URI.decode = decodeURIComponent;
62530  URI.iso8859 = function() {
62531    URI.encode = escape;
62532    URI.decode = unescape;
62533  };
62534  URI.unicode = function() {
62535    URI.encode = strictEncodeURIComponent;
62536    URI.decode = decodeURIComponent;
62537  };
62538  URI.characters = {
62539    pathname: {
62540      encode: {
62541        // RFC3986 2.1: For consistency, URI producers and normalizers should
62542        // use uppercase hexadecimal digits for all percent-encodings.
62543        expression: /%(24|26|2B|2C|3B|3D|3A|40)/ig,
62544        map: {
62545          // -._~!'()*
62546          '%24': '$',
62547          '%26': '&',
62548          '%2B': '+',
62549          '%2C': ',',
62550          '%3B': ';',
62551          '%3D': '=',
62552          '%3A': ':',
62553          '%40': '@'
62554        }
62555      },
62556      decode: {
62557        expression: /[\/\?#]/g,
62558        map: {
62559          '/': '%2F',
62560          '?': '%3F',
62561          '#': '%23'
62562        }
62563      }
62564    },
62565    reserved: {
62566      encode: {
62567        // RFC3986 2.1: For consistency, URI producers and normalizers should
62568        // use uppercase hexadecimal digits for all percent-encodings.
62569        expression: /%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,
62570        map: {
62571          // gen-delims
62572          '%3A': ':',
62573          '%2F': '/',
62574          '%3F': '?',
62575          '%23': '#',
62576          '%5B': '[',
62577          '%5D': ']',
62578          '%40': '@',
62579          // sub-delims
62580          '%21': '!',
62581          '%24': '$',
62582          '%26': '&',
62583          '%27': '\'',
62584          '%28': '(',
62585          '%29': ')',
62586          '%2A': '*',
62587          '%2B': '+',
62588          '%2C': ',',
62589          '%3B': ';',
62590          '%3D': '='
62591        }
62592      }
62593    },
62594    urnpath: {
62595      // The characters under `encode` are the characters called out by RFC 2141 as being acceptable
62596      // for usage in a URN. RFC2141 also calls out "-", ".", and "_" as acceptable characters, but
62597      // these aren't encoded by encodeURIComponent, so we don't have to call them out here. Also
62598      // note that the colon character is not featured in the encoding map; this is because URI.js
62599      // gives the colons in URNs semantic meaning as the delimiters of path segements, and so it
62600      // should not appear unencoded in a segment itself.
62601      // See also the note above about RFC3986 and capitalalized hex digits.
62602      encode: {
62603        expression: /%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig,
62604        map: {
62605          '%21': '!',
62606          '%24': '$',
62607          '%27': '\'',
62608          '%28': '(',
62609          '%29': ')',
62610          '%2A': '*',
62611          '%2B': '+',
62612          '%2C': ',',
62613          '%3B': ';',
62614          '%3D': '=',
62615          '%40': '@'
62616        }
62617      },
62618      // These characters are the characters called out by RFC2141 as "reserved" characters that
62619      // should never appear in a URN, plus the colon character (see note above).
62620      decode: {
62621        expression: /[\/\?#:]/g,
62622        map: {
62623          '/': '%2F',
62624          '?': '%3F',
62625          '#': '%23',
62626          ':': '%3A'
62627        }
62628      }
62629    }
62630  };
62631  URI.encodeQuery = function(string, escapeQuerySpace) {
62632    var escaped = URI.encode(string + '');
62633    if (escapeQuerySpace === undefined) {
62634      escapeQuerySpace = URI.escapeQuerySpace;
62635    }
62636
62637    return escapeQuerySpace ? escaped.replace(/%20/g, '+') : escaped;
62638  };
62639  URI.decodeQuery = function(string, escapeQuerySpace) {
62640    string += '';
62641    if (escapeQuerySpace === undefined) {
62642      escapeQuerySpace = URI.escapeQuerySpace;
62643    }
62644
62645    try {
62646      return URI.decode(escapeQuerySpace ? string.replace(/\+/g, '%20') : string);
62647    } catch(e) {
62648      // we're not going to mess with weird encodings,
62649      // give up and return the undecoded original string
62650      // see https://github.com/medialize/URI.js/issues/87
62651      // see https://github.com/medialize/URI.js/issues/92
62652      return string;
62653    }
62654  };
62655  // generate encode/decode path functions
62656  var _parts = {'encode':'encode', 'decode':'decode'};
62657  var _part;
62658  var generateAccessor = function(_group, _part) {
62659    return function(string) {
62660      try {
62661        return URI[_part](string + '').replace(URI.characters[_group][_part].expression, function(c) {
62662          return URI.characters[_group][_part].map[c];
62663        });
62664      } catch (e) {
62665        // we're not going to mess with weird encodings,
62666        // give up and return the undecoded original string
62667        // see https://github.com/medialize/URI.js/issues/87
62668        // see https://github.com/medialize/URI.js/issues/92
62669        return string;
62670      }
62671    };
62672  };
62673
62674  for (_part in _parts) {
62675    URI[_part + 'PathSegment'] = generateAccessor('pathname', _parts[_part]);
62676    URI[_part + 'UrnPathSegment'] = generateAccessor('urnpath', _parts[_part]);
62677  }
62678
62679  var generateSegmentedPathFunction = function(_sep, _codingFuncName, _innerCodingFuncName) {
62680    return function(string) {
62681      // Why pass in names of functions, rather than the function objects themselves? The
62682      // definitions of some functions (but in particular, URI.decode) will occasionally change due
62683      // to URI.js having ISO8859 and Unicode modes. Passing in the name and getting it will ensure
62684      // that the functions we use here are "fresh".
62685      var actualCodingFunc;
62686      if (!_innerCodingFuncName) {
62687        actualCodingFunc = URI[_codingFuncName];
62688      } else {
62689        actualCodingFunc = function(string) {
62690          return URI[_codingFuncName](URI[_innerCodingFuncName](string));
62691        };
62692      }
62693
62694      var segments = (string + '').split(_sep);
62695
62696      for (var i = 0, length = segments.length; i < length; i++) {
62697        segments[i] = actualCodingFunc(segments[i]);
62698      }
62699
62700      return segments.join(_sep);
62701    };
62702  };
62703
62704  // This takes place outside the above loop because we don't want, e.g., encodeUrnPath functions.
62705  URI.decodePath = generateSegmentedPathFunction('/', 'decodePathSegment');
62706  URI.decodeUrnPath = generateSegmentedPathFunction(':', 'decodeUrnPathSegment');
62707  URI.recodePath = generateSegmentedPathFunction('/', 'encodePathSegment', 'decode');
62708  URI.recodeUrnPath = generateSegmentedPathFunction(':', 'encodeUrnPathSegment', 'decode');
62709
62710  URI.encodeReserved = generateAccessor('reserved', 'encode');
62711
62712  URI.parse = function(string, parts) {
62713    var pos;
62714    if (!parts) {
62715      parts = {
62716        preventInvalidHostname: URI.preventInvalidHostname
62717      };
62718    }
62719
62720    string = string.replace(URI.leading_whitespace_expression, '')
62721    // https://infra.spec.whatwg.org/#ascii-tab-or-newline
62722    string = string.replace(URI.ascii_tab_whitespace, '')
62723
62724    // [protocol"://"[username[":"password]"@"]hostname[":"port]"/"?][path]["?"querystring]["#"fragment]
62725
62726    // extract fragment
62727    pos = string.indexOf('#');
62728    if (pos > -1) {
62729      // escaping?
62730      parts.fragment = string.substring(pos + 1) || null;
62731      string = string.substring(0, pos);
62732    }
62733
62734    // extract query
62735    pos = string.indexOf('?');
62736    if (pos > -1) {
62737      // escaping?
62738      parts.query = string.substring(pos + 1) || null;
62739      string = string.substring(0, pos);
62740    }
62741
62742    // slashes and backslashes have lost all meaning for the web protocols (https, http, wss, ws)
62743    string = string.replace(/^(https?|ftp|wss?)?:+[/\\]*/i, '$1://');
62744    // slashes and backslashes have lost all meaning for scheme relative URLs
62745    string = string.replace(/^[/\\]{2,}/i, '//');
62746
62747    // extract protocol
62748    if (string.substring(0, 2) === '//') {
62749      // relative-scheme
62750      parts.protocol = null;
62751      string = string.substring(2);
62752      // extract "user:pass@host:port"
62753      string = URI.parseAuthority(string, parts);
62754    } else {
62755      pos = string.indexOf(':');
62756      if (pos > -1) {
62757        parts.protocol = string.substring(0, pos) || null;
62758        if (parts.protocol && !parts.protocol.match(URI.protocol_expression)) {
62759          // : may be within the path
62760          parts.protocol = undefined;
62761        } else if (string.substring(pos + 1, pos + 3).replace(/\\/g, '/') === '//') {
62762          string = string.substring(pos + 3);
62763
62764          // extract "user:pass@host:port"
62765          string = URI.parseAuthority(string, parts);
62766        } else {
62767          string = string.substring(pos + 1);
62768          parts.urn = true;
62769        }
62770      }
62771    }
62772
62773    // what's left must be the path
62774    parts.path = string;
62775
62776    // and we're done
62777    return parts;
62778  };
62779  URI.parseHost = function(string, parts) {
62780    if (!string) {
62781      string = '';
62782    }
62783
62784    // Copy chrome, IE, opera backslash-handling behavior.
62785    // Back slashes before the query string get converted to forward slashes
62786    // See: https://github.com/joyent/node/blob/386fd24f49b0e9d1a8a076592a404168faeecc34/lib/url.js#L115-L124
62787    // See: https://code.google.com/p/chromium/issues/detail?id=25916
62788    // https://github.com/medialize/URI.js/pull/233
62789    string = string.replace(/\\/g, '/');
62790
62791    // extract host:port
62792    var pos = string.indexOf('/');
62793    var bracketPos;
62794    var t;
62795
62796    if (pos === -1) {
62797      pos = string.length;
62798    }
62799
62800    if (string.charAt(0) === '[') {
62801      // IPv6 host - http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04#section-6
62802      // I claim most client software breaks on IPv6 anyways. To simplify things, URI only accepts
62803      // IPv6+port in the format [2001:db8::1]:80 (for the time being)
62804      bracketPos = string.indexOf(']');
62805      parts.hostname = string.substring(1, bracketPos) || null;
62806      parts.port = string.substring(bracketPos + 2, pos) || null;
62807      if (parts.port === '/') {
62808        parts.port = null;
62809      }
62810    } else {
62811      var firstColon = string.indexOf(':');
62812      var firstSlash = string.indexOf('/');
62813      var nextColon = string.indexOf(':', firstColon + 1);
62814      if (nextColon !== -1 && (firstSlash === -1 || nextColon < firstSlash)) {
62815        // IPv6 host contains multiple colons - but no port
62816        // this notation is actually not allowed by RFC 3986, but we're a liberal parser
62817        parts.hostname = string.substring(0, pos) || null;
62818        parts.port = null;
62819      } else {
62820        t = string.substring(0, pos).split(':');
62821        parts.hostname = t[0] || null;
62822        parts.port = t[1] || null;
62823      }
62824    }
62825
62826    if (parts.hostname && string.substring(pos).charAt(0) !== '/') {
62827      pos++;
62828      string = '/' + string;
62829    }
62830
62831    if (parts.preventInvalidHostname) {
62832      URI.ensureValidHostname(parts.hostname, parts.protocol);
62833    }
62834
62835    if (parts.port) {
62836      URI.ensureValidPort(parts.port);
62837    }
62838
62839    return string.substring(pos) || '/';
62840  };
62841  URI.parseAuthority = function(string, parts) {
62842    string = URI.parseUserinfo(string, parts);
62843    return URI.parseHost(string, parts);
62844  };
62845  URI.parseUserinfo = function(string, parts) {
62846    // extract username:password
62847    var _string = string
62848    var firstBackSlash = string.indexOf('\\');
62849    if (firstBackSlash !== -1) {
62850      string = string.replace(/\\/g, '/')
62851    }
62852    var firstSlash = string.indexOf('/');
62853    var pos = string.lastIndexOf('@', firstSlash > -1 ? firstSlash : string.length - 1);
62854    var t;
62855
62856    // authority@ must come before /path or \path
62857    if (pos > -1 && (firstSlash === -1 || pos < firstSlash)) {
62858      t = string.substring(0, pos).split(':');
62859      parts.username = t[0] ? URI.decode(t[0]) : null;
62860      t.shift();
62861      parts.password = t[0] ? URI.decode(t.join(':')) : null;
62862      string = _string.substring(pos + 1);
62863    } else {
62864      parts.username = null;
62865      parts.password = null;
62866    }
62867
62868    return string;
62869  };
62870  URI.parseQuery = function(string, escapeQuerySpace) {
62871    if (!string) {
62872      return {};
62873    }
62874
62875    // throw out the funky business - "?"[name"="value"&"]+
62876    string = string.replace(/&+/g, '&').replace(/^\?*&*|&+$/g, '');
62877
62878    if (!string) {
62879      return {};
62880    }
62881
62882    var items = {};
62883    var splits = string.split('&');
62884    var length = splits.length;
62885    var v, name, value;
62886
62887    for (var i = 0; i < length; i++) {
62888      v = splits[i].split('=');
62889      name = URI.decodeQuery(v.shift(), escapeQuerySpace);
62890      // no "=" is null according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#collect-url-parameters
62891      value = v.length ? URI.decodeQuery(v.join('='), escapeQuerySpace) : null;
62892
62893      if (name === '__proto__') {
62894        // ignore attempt at exploiting JavaScript internals
62895        continue;
62896      } else if (hasOwn.call(items, name)) {
62897        if (typeof items[name] === 'string' || items[name] === null) {
62898          items[name] = [items[name]];
62899        }
62900
62901        items[name].push(value);
62902      } else {
62903        items[name] = value;
62904      }
62905    }
62906
62907    return items;
62908  };
62909
62910  URI.build = function(parts) {
62911    var t = '';
62912    var requireAbsolutePath = false
62913
62914    if (parts.protocol) {
62915      t += parts.protocol + ':';
62916    }
62917
62918    if (!parts.urn && (t || parts.hostname)) {
62919      t += '//';
62920      requireAbsolutePath = true
62921    }
62922
62923    t += (URI.buildAuthority(parts) || '');
62924
62925    if (typeof parts.path === 'string') {
62926      if (parts.path.charAt(0) !== '/' && requireAbsolutePath) {
62927        t += '/';
62928      }
62929
62930      t += parts.path;
62931    }
62932
62933    if (typeof parts.query === 'string' && parts.query) {
62934      t += '?' + parts.query;
62935    }
62936
62937    if (typeof parts.fragment === 'string' && parts.fragment) {
62938      t += '#' + parts.fragment;
62939    }
62940    return t;
62941  };
62942  URI.buildHost = function(parts) {
62943    var t = '';
62944
62945    if (!parts.hostname) {
62946      return '';
62947    } else if (URI.ip6_expression.test(parts.hostname)) {
62948      t += '[' + parts.hostname + ']';
62949    } else {
62950      t += parts.hostname;
62951    }
62952
62953    if (parts.port) {
62954      t += ':' + parts.port;
62955    }
62956
62957    return t;
62958  };
62959  URI.buildAuthority = function(parts) {
62960    return URI.buildUserinfo(parts) + URI.buildHost(parts);
62961  };
62962  URI.buildUserinfo = function(parts) {
62963    var t = '';
62964
62965    if (parts.username) {
62966      t += URI.encode(parts.username);
62967    }
62968
62969    if (parts.password) {
62970      t += ':' + URI.encode(parts.password);
62971    }
62972
62973    if (t) {
62974      t += '@';
62975    }
62976
62977    return t;
62978  };
62979  URI.buildQuery = function(data, duplicateQueryParameters, escapeQuerySpace) {
62980    // according to http://tools.ietf.org/html/rfc3986 or http://labs.apache.org/webarch/uri/rfc/rfc3986.html
62981    // being »-._~!$&'()*+,;=:@/?« %HEX and alnum are allowed
62982    // the RFC explicitly states ?/foo being a valid use case, no mention of parameter syntax!
62983    // URI.js treats the query string as being application/x-www-form-urlencoded
62984    // see http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type
62985
62986    var t = '';
62987    var unique, key, i, length;
62988    for (key in data) {
62989      if (key === '__proto__') {
62990        // ignore attempt at exploiting JavaScript internals
62991        continue;
62992      } else if (hasOwn.call(data, key)) {
62993        if (isArray(data[key])) {
62994          unique = {};
62995          for (i = 0, length = data[key].length; i < length; i++) {
62996            if (data[key][i] !== undefined && unique[data[key][i] + ''] === undefined) {
62997              t += '&' + URI.buildQueryParameter(key, data[key][i], escapeQuerySpace);
62998              if (duplicateQueryParameters !== true) {
62999                unique[data[key][i] + ''] = true;
63000              }
63001            }
63002          }
63003        } else if (data[key] !== undefined) {
63004          t += '&' + URI.buildQueryParameter(key, data[key], escapeQuerySpace);
63005        }
63006      }
63007    }
63008
63009    return t.substring(1);
63010  };
63011  URI.buildQueryParameter = function(name, value, escapeQuerySpace) {
63012    // http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type -- application/x-www-form-urlencoded
63013    // don't append "=" for null values, according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#url-parameter-serialization
63014    return URI.encodeQuery(name, escapeQuerySpace) + (value !== null ? '=' + URI.encodeQuery(value, escapeQuerySpace) : '');
63015  };
63016
63017  URI.addQuery = function(data, name, value) {
63018    if (typeof name === 'object') {
63019      for (var key in name) {
63020        if (hasOwn.call(name, key)) {
63021          URI.addQuery(data, key, name[key]);
63022        }
63023      }
63024    } else if (typeof name === 'string') {
63025      if (data[name] === undefined) {
63026        data[name] = value;
63027        return;
63028      } else if (typeof data[name] === 'string') {
63029        data[name] = [data[name]];
63030      }
63031
63032      if (!isArray(value)) {
63033        value = [value];
63034      }
63035
63036      data[name] = (data[name] || []).concat(value);
63037    } else {
63038      throw new TypeError('URI.addQuery() accepts an object, string as the name parameter');
63039    }
63040  };
63041
63042  URI.setQuery = function(data, name, value) {
63043    if (typeof name === 'object') {
63044      for (var key in name) {
63045        if (hasOwn.call(name, key)) {
63046          URI.setQuery(data, key, name[key]);
63047        }
63048      }
63049    } else if (typeof name === 'string') {
63050      data[name] = value === undefined ? null : value;
63051    } else {
63052      throw new TypeError('URI.setQuery() accepts an object, string as the name parameter');
63053    }
63054  };
63055
63056  URI.removeQuery = function(data, name, value) {
63057    var i, length, key;
63058
63059    if (isArray(name)) {
63060      for (i = 0, length = name.length; i < length; i++) {
63061        data[name[i]] = undefined;
63062      }
63063    } else if (getType(name) === 'RegExp') {
63064      for (key in data) {
63065        if (name.test(key)) {
63066          data[key] = undefined;
63067        }
63068      }
63069    } else if (typeof name === 'object') {
63070      for (key in name) {
63071        if (hasOwn.call(name, key)) {
63072          URI.removeQuery(data, key, name[key]);
63073        }
63074      }
63075    } else if (typeof name === 'string') {
63076      if (value !== undefined) {
63077        if (getType(value) === 'RegExp') {
63078          if (!isArray(data[name]) && value.test(data[name])) {
63079            data[name] = undefined;
63080          } else {
63081            data[name] = filterArrayValues(data[name], value);
63082          }
63083        } else if (data[name] === String(value) && (!isArray(value) || value.length === 1)) {
63084          data[name] = undefined;
63085        } else if (isArray(data[name])) {
63086          data[name] = filterArrayValues(data[name], value);
63087        }
63088      } else {
63089        data[name] = undefined;
63090      }
63091    } else {
63092      throw new TypeError('URI.removeQuery() accepts an object, string, RegExp as the first parameter');
63093    }
63094  };
63095  URI.hasQuery = function(data, name, value, withinArray) {
63096    switch (getType(name)) {
63097      case 'String':
63098        // Nothing to do here
63099        break;
63100
63101      case 'RegExp':
63102        for (var key in data) {
63103          if (hasOwn.call(data, key)) {
63104            if (name.test(key) && (value === undefined || URI.hasQuery(data, key, value))) {
63105              return true;
63106            }
63107          }
63108        }
63109
63110        return false;
63111
63112      case 'Object':
63113        for (var _key in name) {
63114          if (hasOwn.call(name, _key)) {
63115            if (!URI.hasQuery(data, _key, name[_key])) {
63116              return false;
63117            }
63118          }
63119        }
63120
63121        return true;
63122
63123      default:
63124        throw new TypeError('URI.hasQuery() accepts a string, regular expression or object as the name parameter');
63125    }
63126
63127    switch (getType(value)) {
63128      case 'Undefined':
63129        // true if exists (but may be empty)
63130        return name in data; // data[name] !== undefined;
63131
63132      case 'Boolean':
63133        // true if exists and non-empty
63134        var _booly = Boolean(isArray(data[name]) ? data[name].length : data[name]);
63135        return value === _booly;
63136
63137      case 'Function':
63138        // allow complex comparison
63139        return !!value(data[name], name, data);
63140
63141      case 'Array':
63142        if (!isArray(data[name])) {
63143          return false;
63144        }
63145
63146        var op = withinArray ? arrayContains : arraysEqual;
63147        return op(data[name], value);
63148
63149      case 'RegExp':
63150        if (!isArray(data[name])) {
63151          return Boolean(data[name] && data[name].match(value));
63152        }
63153
63154        if (!withinArray) {
63155          return false;
63156        }
63157
63158        return arrayContains(data[name], value);
63159
63160      case 'Number':
63161        value = String(value);
63162        /* falls through */
63163      case 'String':
63164        if (!isArray(data[name])) {
63165          return data[name] === value;
63166        }
63167
63168        if (!withinArray) {
63169          return false;
63170        }
63171
63172        return arrayContains(data[name], value);
63173
63174      default:
63175        throw new TypeError('URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter');
63176    }
63177  };
63178
63179
63180  URI.joinPaths = function() {
63181    var input = [];
63182    var segments = [];
63183    var nonEmptySegments = 0;
63184
63185    for (var i = 0; i < arguments.length; i++) {
63186      var url = new URI(arguments[i]);
63187      input.push(url);
63188      var _segments = url.segment();
63189      for (var s = 0; s < _segments.length; s++) {
63190        if (typeof _segments[s] === 'string') {
63191          segments.push(_segments[s]);
63192        }
63193
63194        if (_segments[s]) {
63195          nonEmptySegments++;
63196        }
63197      }
63198    }
63199
63200    if (!segments.length || !nonEmptySegments) {
63201      return new URI('');
63202    }
63203
63204    var uri = new URI('').segment(segments);
63205
63206    if (input[0].path() === '' || input[0].path().slice(0, 1) === '/') {
63207      uri.path('/' + uri.path());
63208    }
63209
63210    return uri.normalize();
63211  };
63212
63213  URI.commonPath = function(one, two) {
63214    var length = Math.min(one.length, two.length);
63215    var pos;
63216
63217    // find first non-matching character
63218    for (pos = 0; pos < length; pos++) {
63219      if (one.charAt(pos) !== two.charAt(pos)) {
63220        pos--;
63221        break;
63222      }
63223    }
63224
63225    if (pos < 1) {
63226      return one.charAt(0) === two.charAt(0) && one.charAt(0) === '/' ? '/' : '';
63227    }
63228
63229    // revert to last /
63230    if (one.charAt(pos) !== '/' || two.charAt(pos) !== '/') {
63231      pos = one.substring(0, pos).lastIndexOf('/');
63232    }
63233
63234    return one.substring(0, pos + 1);
63235  };
63236
63237  URI.withinString = function(string, callback, options) {
63238    options || (options = {});
63239    var _start = options.start || URI.findUri.start;
63240    var _end = options.end || URI.findUri.end;
63241    var _trim = options.trim || URI.findUri.trim;
63242    var _parens = options.parens || URI.findUri.parens;
63243    var _attributeOpen = /[a-z0-9-]=["']?$/i;
63244
63245    _start.lastIndex = 0;
63246    while (true) {
63247      var match = _start.exec(string);
63248      if (!match) {
63249        break;
63250      }
63251
63252      var start = match.index;
63253      if (options.ignoreHtml) {
63254        // attribut(e=["']?$)
63255        var attributeOpen = string.slice(Math.max(start - 3, 0), start);
63256        if (attributeOpen && _attributeOpen.test(attributeOpen)) {
63257          continue;
63258        }
63259      }
63260
63261      var end = start + string.slice(start).search(_end);
63262      var slice = string.slice(start, end);
63263      // make sure we include well balanced parens
63264      var parensEnd = -1;
63265      while (true) {
63266        var parensMatch = _parens.exec(slice);
63267        if (!parensMatch) {
63268          break;
63269        }
63270
63271        var parensMatchEnd = parensMatch.index + parensMatch[0].length;
63272        parensEnd = Math.max(parensEnd, parensMatchEnd);
63273      }
63274
63275      if (parensEnd > -1) {
63276        slice = slice.slice(0, parensEnd) + slice.slice(parensEnd).replace(_trim, '');
63277      } else {
63278        slice = slice.replace(_trim, '');
63279      }
63280
63281      if (slice.length <= match[0].length) {
63282        // the extract only contains the starting marker of a URI,
63283        // e.g. "www" or "http://"
63284        continue;
63285      }
63286
63287      if (options.ignore && options.ignore.test(slice)) {
63288        continue;
63289      }
63290
63291      end = start + slice.length;
63292      var result = callback(slice, start, end, string);
63293      if (result === undefined) {
63294        _start.lastIndex = end;
63295        continue;
63296      }
63297
63298      result = String(result);
63299      string = string.slice(0, start) + result + string.slice(end);
63300      _start.lastIndex = start + result.length;
63301    }
63302
63303    _start.lastIndex = 0;
63304    return string;
63305  };
63306
63307  URI.ensureValidHostname = function(v, protocol) {
63308    // Theoretically URIs allow percent-encoding in Hostnames (according to RFC 3986)
63309    // they are not part of DNS and therefore ignored by URI.js
63310
63311    var hasHostname = !!v; // not null and not an empty string
63312    var hasProtocol = !!protocol;
63313    var rejectEmptyHostname = false;
63314
63315    if (hasProtocol) {
63316      rejectEmptyHostname = arrayContains(URI.hostProtocols, protocol);
63317    }
63318
63319    if (rejectEmptyHostname && !hasHostname) {
63320      throw new TypeError('Hostname cannot be empty, if protocol is ' + protocol);
63321    } else if (v && v.match(URI.invalid_hostname_characters)) {
63322      // test punycode
63323      if (!punycode) {
63324        throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available');
63325      }
63326      if (punycode.toASCII(v).match(URI.invalid_hostname_characters)) {
63327        throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-:_]');
63328      }
63329    }
63330  };
63331
63332  URI.ensureValidPort = function (v) {
63333    if (!v) {
63334      return;
63335    }
63336
63337    var port = Number(v);
63338    if (isInteger(port) && (port > 0) && (port < 65536)) {
63339      return;
63340    }
63341
63342    throw new TypeError('Port "' + v + '" is not a valid port');
63343  };
63344
63345  // noConflict
63346  URI.noConflict = function(removeAll) {
63347    if (removeAll) {
63348      var unconflicted = {
63349        URI: this.noConflict()
63350      };
63351
63352      if (root.URITemplate && typeof root.URITemplate.noConflict === 'function') {
63353        unconflicted.URITemplate = root.URITemplate.noConflict();
63354      }
63355
63356      if (root.IPv6 && typeof root.IPv6.noConflict === 'function') {
63357        unconflicted.IPv6 = root.IPv6.noConflict();
63358      }
63359
63360      if (root.SecondLevelDomains && typeof root.SecondLevelDomains.noConflict === 'function') {
63361        unconflicted.SecondLevelDomains = root.SecondLevelDomains.noConflict();
63362      }
63363
63364      return unconflicted;
63365    } else if (root.URI === this) {
63366      root.URI = _URI;
63367    }
63368
63369    return this;
63370  };
63371
63372  p.build = function(deferBuild) {
63373    if (deferBuild === true) {
63374      this._deferred_build = true;
63375    } else if (deferBuild === undefined || this._deferred_build) {
63376      this._string = URI.build(this._parts);
63377      this._deferred_build = false;
63378    }
63379
63380    return this;
63381  };
63382
63383  p.clone = function() {
63384    return new URI(this);
63385  };
63386
63387  p.valueOf = p.toString = function() {
63388    return this.build(false)._string;
63389  };
63390
63391
63392  function generateSimpleAccessor(_part){
63393    return function(v, build) {
63394      if (v === undefined) {
63395        return this._parts[_part] || '';
63396      } else {
63397        this._parts[_part] = v || null;
63398        this.build(!build);
63399        return this;
63400      }
63401    };
63402  }
63403
63404  function generatePrefixAccessor(_part, _key){
63405    return function(v, build) {
63406      if (v === undefined) {
63407        return this._parts[_part] || '';
63408      } else {
63409        if (v !== null) {
63410          v = v + '';
63411          if (v.charAt(0) === _key) {
63412            v = v.substring(1);
63413          }
63414        }
63415
63416        this._parts[_part] = v;
63417        this.build(!build);
63418        return this;
63419      }
63420    };
63421  }
63422
63423  p.protocol = generateSimpleAccessor('protocol');
63424  p.username = generateSimpleAccessor('username');
63425  p.password = generateSimpleAccessor('password');
63426  p.hostname = generateSimpleAccessor('hostname');
63427  p.port = generateSimpleAccessor('port');
63428  p.query = generatePrefixAccessor('query', '?');
63429  p.fragment = generatePrefixAccessor('fragment', '#');
63430
63431  p.search = function(v, build) {
63432    var t = this.query(v, build);
63433    return typeof t === 'string' && t.length ? ('?' + t) : t;
63434  };
63435  p.hash = function(v, build) {
63436    var t = this.fragment(v, build);
63437    return typeof t === 'string' && t.length ? ('#' + t) : t;
63438  };
63439
63440  p.pathname = function(v, build) {
63441    if (v === undefined || v === true) {
63442      var res = this._parts.path || (this._parts.hostname ? '/' : '');
63443      return v ? (this._parts.urn ? URI.decodeUrnPath : URI.decodePath)(res) : res;
63444    } else {
63445      if (this._parts.urn) {
63446        this._parts.path = v ? URI.recodeUrnPath(v) : '';
63447      } else {
63448        this._parts.path = v ? URI.recodePath(v) : '/';
63449      }
63450      this.build(!build);
63451      return this;
63452    }
63453  };
63454  p.path = p.pathname;
63455  p.href = function(href, build) {
63456    var key;
63457
63458    if (href === undefined) {
63459      return this.toString();
63460    }
63461
63462    this._string = '';
63463    this._parts = URI._parts();
63464
63465    var _URI = href instanceof URI;
63466    var _object = typeof href === 'object' && (href.hostname || href.path || href.pathname);
63467    if (href.nodeName) {
63468      var attribute = URI.getDomAttribute(href);
63469      href = href[attribute] || '';
63470      _object = false;
63471    }
63472
63473    // window.location is reported to be an object, but it's not the sort
63474    // of object we're looking for:
63475    // * location.protocol ends with a colon
63476    // * location.query != object.search
63477    // * location.hash != object.fragment
63478    // simply serializing the unknown object should do the trick
63479    // (for location, not for everything...)
63480    if (!_URI && _object && href.pathname !== undefined) {
63481      href = href.toString();
63482    }
63483
63484    if (typeof href === 'string' || href instanceof String) {
63485      this._parts = URI.parse(String(href), this._parts);
63486    } else if (_URI || _object) {
63487      var src = _URI ? href._parts : href;
63488      for (key in src) {
63489        if (key === 'query') { continue; }
63490        if (hasOwn.call(this._parts, key)) {
63491          this._parts[key] = src[key];
63492        }
63493      }
63494      if (src.query) {
63495        this.query(src.query, false);
63496      }
63497    } else {
63498      throw new TypeError('invalid input');
63499    }
63500
63501    this.build(!build);
63502    return this;
63503  };
63504
63505  // identification accessors
63506  p.is = function(what) {
63507    var ip = false;
63508    var ip4 = false;
63509    var ip6 = false;
63510    var name = false;
63511    var sld = false;
63512    var idn = false;
63513    var punycode = false;
63514    var relative = !this._parts.urn;
63515
63516    if (this._parts.hostname) {
63517      relative = false;
63518      ip4 = URI.ip4_expression.test(this._parts.hostname);
63519      ip6 = URI.ip6_expression.test(this._parts.hostname);
63520      ip = ip4 || ip6;
63521      name = !ip;
63522      sld = name && SLD && SLD.has(this._parts.hostname);
63523      idn = name && URI.idn_expression.test(this._parts.hostname);
63524      punycode = name && URI.punycode_expression.test(this._parts.hostname);
63525    }
63526
63527    switch (what.toLowerCase()) {
63528      case 'relative':
63529        return relative;
63530
63531      case 'absolute':
63532        return !relative;
63533
63534      // hostname identification
63535      case 'domain':
63536      case 'name':
63537        return name;
63538
63539      case 'sld':
63540        return sld;
63541
63542      case 'ip':
63543        return ip;
63544
63545      case 'ip4':
63546      case 'ipv4':
63547      case 'inet4':
63548        return ip4;
63549
63550      case 'ip6':
63551      case 'ipv6':
63552      case 'inet6':
63553        return ip6;
63554
63555      case 'idn':
63556        return idn;
63557
63558      case 'url':
63559        return !this._parts.urn;
63560
63561      case 'urn':
63562        return !!this._parts.urn;
63563
63564      case 'punycode':
63565        return punycode;
63566    }
63567
63568    return null;
63569  };
63570
63571  // component specific input validation
63572  var _protocol = p.protocol;
63573  var _port = p.port;
63574  var _hostname = p.hostname;
63575
63576  p.protocol = function(v, build) {
63577    if (v) {
63578      // accept trailing ://
63579      v = v.replace(/:(\/\/)?$/, '');
63580
63581      if (!v.match(URI.protocol_expression)) {
63582        throw new TypeError('Protocol "' + v + '" contains characters other than [A-Z0-9.+-] or doesn\'t start with [A-Z]');
63583      }
63584    }
63585
63586    return _protocol.call(this, v, build);
63587  };
63588  p.scheme = p.protocol;
63589  p.port = function(v, build) {
63590    if (this._parts.urn) {
63591      return v === undefined ? '' : this;
63592    }
63593
63594    if (v !== undefined) {
63595      if (v === 0) {
63596        v = null;
63597      }
63598
63599      if (v) {
63600        v += '';
63601        if (v.charAt(0) === ':') {
63602          v = v.substring(1);
63603        }
63604
63605        URI.ensureValidPort(v);
63606      }
63607    }
63608    return _port.call(this, v, build);
63609  };
63610  p.hostname = function(v, build) {
63611    if (this._parts.urn) {
63612      return v === undefined ? '' : this;
63613    }
63614
63615    if (v !== undefined) {
63616      var x = { preventInvalidHostname: this._parts.preventInvalidHostname };
63617      var res = URI.parseHost(v, x);
63618      if (res !== '/') {
63619        throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-]');
63620      }
63621
63622      v = x.hostname;
63623      if (this._parts.preventInvalidHostname) {
63624        URI.ensureValidHostname(v, this._parts.protocol);
63625      }
63626    }
63627
63628    return _hostname.call(this, v, build);
63629  };
63630
63631  // compound accessors
63632  p.origin = function(v, build) {
63633    if (this._parts.urn) {
63634      return v === undefined ? '' : this;
63635    }
63636
63637    if (v === undefined) {
63638      var protocol = this.protocol();
63639      var authority = this.authority();
63640      if (!authority) {
63641        return '';
63642      }
63643
63644      return (protocol ? protocol + '://' : '') + this.authority();
63645    } else {
63646      var origin = URI(v);
63647      this
63648        .protocol(origin.protocol())
63649        .authority(origin.authority())
63650        .build(!build);
63651      return this;
63652    }
63653  };
63654  p.host = function(v, build) {
63655    if (this._parts.urn) {
63656      return v === undefined ? '' : this;
63657    }
63658
63659    if (v === undefined) {
63660      return this._parts.hostname ? URI.buildHost(this._parts) : '';
63661    } else {
63662      var res = URI.parseHost(v, this._parts);
63663      if (res !== '/') {
63664        throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-]');
63665      }
63666
63667      this.build(!build);
63668      return this;
63669    }
63670  };
63671  p.authority = function(v, build) {
63672    if (this._parts.urn) {
63673      return v === undefined ? '' : this;
63674    }
63675
63676    if (v === undefined) {
63677      return this._parts.hostname ? URI.buildAuthority(this._parts) : '';
63678    } else {
63679      var res = URI.parseAuthority(v, this._parts);
63680      if (res !== '/') {
63681        throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-]');
63682      }
63683
63684      this.build(!build);
63685      return this;
63686    }
63687  };
63688  p.userinfo = function(v, build) {
63689    if (this._parts.urn) {
63690      return v === undefined ? '' : this;
63691    }
63692
63693    if (v === undefined) {
63694      var t = URI.buildUserinfo(this._parts);
63695      return t ? t.substring(0, t.length -1) : t;
63696    } else {
63697      if (v[v.length-1] !== '@') {
63698        v += '@';
63699      }
63700
63701      URI.parseUserinfo(v, this._parts);
63702      this.build(!build);
63703      return this;
63704    }
63705  };
63706  p.resource = function(v, build) {
63707    var parts;
63708
63709    if (v === undefined) {
63710      return this.path() + this.search() + this.hash();
63711    }
63712
63713    parts = URI.parse(v);
63714    this._parts.path = parts.path;
63715    this._parts.query = parts.query;
63716    this._parts.fragment = parts.fragment;
63717    this.build(!build);
63718    return this;
63719  };
63720
63721  // fraction accessors
63722  p.subdomain = function(v, build) {
63723    if (this._parts.urn) {
63724      return v === undefined ? '' : this;
63725    }
63726
63727    // convenience, return "www" from "www.example.org"
63728    if (v === undefined) {
63729      if (!this._parts.hostname || this.is('IP')) {
63730        return '';
63731      }
63732
63733      // grab domain and add another segment
63734      var end = this._parts.hostname.length - this.domain().length - 1;
63735      return this._parts.hostname.substring(0, end) || '';
63736    } else {
63737      var e = this._parts.hostname.length - this.domain().length;
63738      var sub = this._parts.hostname.substring(0, e);
63739      var replace = new RegExp('^' + escapeRegEx(sub));
63740
63741      if (v && v.charAt(v.length - 1) !== '.') {
63742        v += '.';
63743      }
63744
63745      if (v.indexOf(':') !== -1) {
63746        throw new TypeError('Domains cannot contain colons');
63747      }
63748
63749      if (v) {
63750        URI.ensureValidHostname(v, this._parts.protocol);
63751      }
63752
63753      this._parts.hostname = this._parts.hostname.replace(replace, v);
63754      this.build(!build);
63755      return this;
63756    }
63757  };
63758  p.domain = function(v, build) {
63759    if (this._parts.urn) {
63760      return v === undefined ? '' : this;
63761    }
63762
63763    if (typeof v === 'boolean') {
63764      build = v;
63765      v = undefined;
63766    }
63767
63768    // convenience, return "example.org" from "www.example.org"
63769    if (v === undefined) {
63770      if (!this._parts.hostname || this.is('IP')) {
63771        return '';
63772      }
63773
63774      // if hostname consists of 1 or 2 segments, it must be the domain
63775      var t = this._parts.hostname.match(/\./g);
63776      if (t && t.length < 2) {
63777        return this._parts.hostname;
63778      }
63779
63780      // grab tld and add another segment
63781      var end = this._parts.hostname.length - this.tld(build).length - 1;
63782      end = this._parts.hostname.lastIndexOf('.', end -1) + 1;
63783      return this._parts.hostname.substring(end) || '';
63784    } else {
63785      if (!v) {
63786        throw new TypeError('cannot set domain empty');
63787      }
63788
63789      if (v.indexOf(':') !== -1) {
63790        throw new TypeError('Domains cannot contain colons');
63791      }
63792
63793      URI.ensureValidHostname(v, this._parts.protocol);
63794
63795      if (!this._parts.hostname || this.is('IP')) {
63796        this._parts.hostname = v;
63797      } else {
63798        var replace = new RegExp(escapeRegEx(this.domain()) + '$');
63799        this._parts.hostname = this._parts.hostname.replace(replace, v);
63800      }
63801
63802      this.build(!build);
63803      return this;
63804    }
63805  };
63806  p.tld = function(v, build) {
63807    if (this._parts.urn) {
63808      return v === undefined ? '' : this;
63809    }
63810
63811    if (typeof v === 'boolean') {
63812      build = v;
63813      v = undefined;
63814    }
63815
63816    // return "org" from "www.example.org"
63817    if (v === undefined) {
63818      if (!this._parts.hostname || this.is('IP')) {
63819        return '';
63820      }
63821
63822      var pos = this._parts.hostname.lastIndexOf('.');
63823      var tld = this._parts.hostname.substring(pos + 1);
63824
63825      if (build !== true && SLD && SLD.list[tld.toLowerCase()]) {
63826        return SLD.get(this._parts.hostname) || tld;
63827      }
63828
63829      return tld;
63830    } else {
63831      var replace;
63832
63833      if (!v) {
63834        throw new TypeError('cannot set TLD empty');
63835      } else if (v.match(/[^a-zA-Z0-9-]/)) {
63836        if (SLD && SLD.is(v)) {
63837          replace = new RegExp(escapeRegEx(this.tld()) + '$');
63838          this._parts.hostname = this._parts.hostname.replace(replace, v);
63839        } else {
63840          throw new TypeError('TLD "' + v + '" contains characters other than [A-Z0-9]');
63841        }
63842      } else if (!this._parts.hostname || this.is('IP')) {
63843        throw new ReferenceError('cannot set TLD on non-domain host');
63844      } else {
63845        replace = new RegExp(escapeRegEx(this.tld()) + '$');
63846        this._parts.hostname = this._parts.hostname.replace(replace, v);
63847      }
63848
63849      this.build(!build);
63850      return this;
63851    }
63852  };
63853  p.directory = function(v, build) {
63854    if (this._parts.urn) {
63855      return v === undefined ? '' : this;
63856    }
63857
63858    if (v === undefined || v === true) {
63859      if (!this._parts.path && !this._parts.hostname) {
63860        return '';
63861      }
63862
63863      if (this._parts.path === '/') {
63864        return '/';
63865      }
63866
63867      var end = this._parts.path.length - this.filename().length - 1;
63868      var res = this._parts.path.substring(0, end) || (this._parts.hostname ? '/' : '');
63869
63870      return v ? URI.decodePath(res) : res;
63871
63872    } else {
63873      var e = this._parts.path.length - this.filename().length;
63874      var directory = this._parts.path.substring(0, e);
63875      var replace = new RegExp('^' + escapeRegEx(directory));
63876
63877      // fully qualifier directories begin with a slash
63878      if (!this.is('relative')) {
63879        if (!v) {
63880          v = '/';
63881        }
63882
63883        if (v.charAt(0) !== '/') {
63884          v = '/' + v;
63885        }
63886      }
63887
63888      // directories always end with a slash
63889      if (v && v.charAt(v.length - 1) !== '/') {
63890        v += '/';
63891      }
63892
63893      v = URI.recodePath(v);
63894      this._parts.path = this._parts.path.replace(replace, v);
63895      this.build(!build);
63896      return this;
63897    }
63898  };
63899  p.filename = function(v, build) {
63900    if (this._parts.urn) {
63901      return v === undefined ? '' : this;
63902    }
63903
63904    if (typeof v !== 'string') {
63905      if (!this._parts.path || this._parts.path === '/') {
63906        return '';
63907      }
63908
63909      var pos = this._parts.path.lastIndexOf('/');
63910      var res = this._parts.path.substring(pos+1);
63911
63912      return v ? URI.decodePathSegment(res) : res;
63913    } else {
63914      var mutatedDirectory = false;
63915
63916      if (v.charAt(0) === '/') {
63917        v = v.substring(1);
63918      }
63919
63920      if (v.match(/\.?\//)) {
63921        mutatedDirectory = true;
63922      }
63923
63924      var replace = new RegExp(escapeRegEx(this.filename()) + '$');
63925      v = URI.recodePath(v);
63926      this._parts.path = this._parts.path.replace(replace, v);
63927
63928      if (mutatedDirectory) {
63929        this.normalizePath(build);
63930      } else {
63931        this.build(!build);
63932      }
63933
63934      return this;
63935    }
63936  };
63937  p.suffix = function(v, build) {
63938    if (this._parts.urn) {
63939      return v === undefined ? '' : this;
63940    }
63941
63942    if (v === undefined || v === true) {
63943      if (!this._parts.path || this._parts.path === '/') {
63944        return '';
63945      }
63946
63947      var filename = this.filename();
63948      var pos = filename.lastIndexOf('.');
63949      var s, res;
63950
63951      if (pos === -1) {
63952        return '';
63953      }
63954
63955      // suffix may only contain alnum characters (yup, I made this up.)
63956      s = filename.substring(pos+1);
63957      res = (/^[a-z0-9%]+$/i).test(s) ? s : '';
63958      return v ? URI.decodePathSegment(res) : res;
63959    } else {
63960      if (v.charAt(0) === '.') {
63961        v = v.substring(1);
63962      }
63963
63964      var suffix = this.suffix();
63965      var replace;
63966
63967      if (!suffix) {
63968        if (!v) {
63969          return this;
63970        }
63971
63972        this._parts.path += '.' + URI.recodePath(v);
63973      } else if (!v) {
63974        replace = new RegExp(escapeRegEx('.' + suffix) + '$');
63975      } else {
63976        replace = new RegExp(escapeRegEx(suffix) + '$');
63977      }
63978
63979      if (replace) {
63980        v = URI.recodePath(v);
63981        this._parts.path = this._parts.path.replace(replace, v);
63982      }
63983
63984      this.build(!build);
63985      return this;
63986    }
63987  };
63988  p.segment = function(segment, v, build) {
63989    var separator = this._parts.urn ? ':' : '/';
63990    var path = this.path();
63991    var absolute = path.substring(0, 1) === '/';
63992    var segments = path.split(separator);
63993
63994    if (segment !== undefined && typeof segment !== 'number') {
63995      build = v;
63996      v = segment;
63997      segment = undefined;
63998    }
63999
64000    if (segment !== undefined && typeof segment !== 'number') {
64001      throw new Error('Bad segment "' + segment + '", must be 0-based integer');
64002    }
64003
64004    if (absolute) {
64005      segments.shift();
64006    }
64007
64008    if (segment < 0) {
64009      // allow negative indexes to address from the end
64010      segment = Math.max(segments.length + segment, 0);
64011    }
64012
64013    if (v === undefined) {
64014      /*jshint laxbreak: true */
64015      return segment === undefined
64016        ? segments
64017        : segments[segment];
64018      /*jshint laxbreak: false */
64019    } else if (segment === null || segments[segment] === undefined) {
64020      if (isArray(v)) {
64021        segments = [];
64022        // collapse empty elements within array
64023        for (var i=0, l=v.length; i < l; i++) {
64024          if (!v[i].length && (!segments.length || !segments[segments.length -1].length)) {
64025            continue;
64026          }
64027
64028          if (segments.length && !segments[segments.length -1].length) {
64029            segments.pop();
64030          }
64031
64032          segments.push(trimSlashes(v[i]));
64033        }
64034      } else if (v || typeof v === 'string') {
64035        v = trimSlashes(v);
64036        if (segments[segments.length -1] === '') {
64037          // empty trailing elements have to be overwritten
64038          // to prevent results such as /foo//bar
64039          segments[segments.length -1] = v;
64040        } else {
64041          segments.push(v);
64042        }
64043      }
64044    } else {
64045      if (v) {
64046        segments[segment] = trimSlashes(v);
64047      } else {
64048        segments.splice(segment, 1);
64049      }
64050    }
64051
64052    if (absolute) {
64053      segments.unshift('');
64054    }
64055
64056    return this.path(segments.join(separator), build);
64057  };
64058  p.segmentCoded = function(segment, v, build) {
64059    var segments, i, l;
64060
64061    if (typeof segment !== 'number') {
64062      build = v;
64063      v = segment;
64064      segment = undefined;
64065    }
64066
64067    if (v === undefined) {
64068      segments = this.segment(segment, v, build);
64069      if (!isArray(segments)) {
64070        segments = segments !== undefined ? URI.decode(segments) : undefined;
64071      } else {
64072        for (i = 0, l = segments.length; i < l; i++) {
64073          segments[i] = URI.decode(segments[i]);
64074        }
64075      }
64076
64077      return segments;
64078    }
64079
64080    if (!isArray(v)) {
64081      v = (typeof v === 'string' || v instanceof String) ? URI.encode(v) : v;
64082    } else {
64083      for (i = 0, l = v.length; i < l; i++) {
64084        v[i] = URI.encode(v[i]);
64085      }
64086    }
64087
64088    return this.segment(segment, v, build);
64089  };
64090
64091  // mutating query string
64092  var q = p.query;
64093  p.query = function(v, build) {
64094    if (v === true) {
64095      return URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);
64096    } else if (typeof v === 'function') {
64097      var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);
64098      var result = v.call(this, data);
64099      this._parts.query = URI.buildQuery(result || data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);
64100      this.build(!build);
64101      return this;
64102    } else if (v !== undefined && typeof v !== 'string') {
64103      this._parts.query = URI.buildQuery(v, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);
64104      this.build(!build);
64105      return this;
64106    } else {
64107      return q.call(this, v, build);
64108    }
64109  };
64110  p.setQuery = function(name, value, build) {
64111    var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);
64112
64113    if (typeof name === 'string' || name instanceof String) {
64114      data[name] = value !== undefined ? value : null;
64115    } else if (typeof name === 'object') {
64116      for (var key in name) {
64117        if (hasOwn.call(name, key)) {
64118          data[key] = name[key];
64119        }
64120      }
64121    } else {
64122      throw new TypeError('URI.addQuery() accepts an object, string as the name parameter');
64123    }
64124
64125    this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);
64126    if (typeof name !== 'string') {
64127      build = value;
64128    }
64129
64130    this.build(!build);
64131    return this;
64132  };
64133  p.addQuery = function(name, value, build) {
64134    var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);
64135    URI.addQuery(data, name, value === undefined ? null : value);
64136    this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);
64137    if (typeof name !== 'string') {
64138      build = value;
64139    }
64140
64141    this.build(!build);
64142    return this;
64143  };
64144  p.removeQuery = function(name, value, build) {
64145    var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);
64146    URI.removeQuery(data, name, value);
64147    this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);
64148    if (typeof name !== 'string') {
64149      build = value;
64150    }
64151
64152    this.build(!build);
64153    return this;
64154  };
64155  p.hasQuery = function(name, value, withinArray) {
64156    var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);
64157    return URI.hasQuery(data, name, value, withinArray);
64158  };
64159  p.setSearch = p.setQuery;
64160  p.addSearch = p.addQuery;
64161  p.removeSearch = p.removeQuery;
64162  p.hasSearch = p.hasQuery;
64163
64164  // sanitizing URLs
64165  p.normalize = function() {
64166    if (this._parts.urn) {
64167      return this
64168        .normalizeProtocol(false)
64169        .normalizePath(false)
64170        .normalizeQuery(false)
64171        .normalizeFragment(false)
64172        .build();
64173    }
64174
64175    return this
64176      .normalizeProtocol(false)
64177      .normalizeHostname(false)
64178      .normalizePort(false)
64179      .normalizePath(false)
64180      .normalizeQuery(false)
64181      .normalizeFragment(false)
64182      .build();
64183  };
64184  p.normalizeProtocol = function(build) {
64185    if (typeof this._parts.protocol === 'string') {
64186      this._parts.protocol = this._parts.protocol.toLowerCase();
64187      this.build(!build);
64188    }
64189
64190    return this;
64191  };
64192  p.normalizeHostname = function(build) {
64193    if (this._parts.hostname) {
64194      if (this.is('IDN') && punycode) {
64195        this._parts.hostname = punycode.toASCII(this._parts.hostname);
64196      } else if (this.is('IPv6') && IPv6) {
64197        this._parts.hostname = IPv6.best(this._parts.hostname);
64198      }
64199
64200      this._parts.hostname = this._parts.hostname.toLowerCase();
64201      this.build(!build);
64202    }
64203
64204    return this;
64205  };
64206  p.normalizePort = function(build) {
64207    // remove port of it's the protocol's default
64208    if (typeof this._parts.protocol === 'string' && this._parts.port === URI.defaultPorts[this._parts.protocol]) {
64209      this._parts.port = null;
64210      this.build(!build);
64211    }
64212
64213    return this;
64214  };
64215  p.normalizePath = function(build) {
64216    var _path = this._parts.path;
64217    if (!_path) {
64218      return this;
64219    }
64220
64221    if (this._parts.urn) {
64222      this._parts.path = URI.recodeUrnPath(this._parts.path);
64223      this.build(!build);
64224      return this;
64225    }
64226
64227    if (this._parts.path === '/') {
64228      return this;
64229    }
64230
64231    _path = URI.recodePath(_path);
64232
64233    var _was_relative;
64234    var _leadingParents = '';
64235    var _parent, _pos;
64236
64237    // handle relative paths
64238    if (_path.charAt(0) !== '/') {
64239      _was_relative = true;
64240      _path = '/' + _path;
64241    }
64242
64243    // handle relative files (as opposed to directories)
64244    if (_path.slice(-3) === '/..' || _path.slice(-2) === '/.') {
64245      _path += '/';
64246    }
64247
64248    // resolve simples
64249    _path = _path
64250      .replace(/(\/(\.\/)+)|(\/\.$)/g, '/')
64251      .replace(/\/{2,}/g, '/');
64252
64253    // remember leading parents
64254    if (_was_relative) {
64255      _leadingParents = _path.substring(1).match(/^(\.\.\/)+/) || '';
64256      if (_leadingParents) {
64257        _leadingParents = _leadingParents[0];
64258      }
64259    }
64260
64261    // resolve parents
64262    while (true) {
64263      _parent = _path.search(/\/\.\.(\/|$)/);
64264      if (_parent === -1) {
64265        // no more ../ to resolve
64266        break;
64267      } else if (_parent === 0) {
64268        // top level cannot be relative, skip it
64269        _path = _path.substring(3);
64270        continue;
64271      }
64272
64273      _pos = _path.substring(0, _parent).lastIndexOf('/');
64274      if (_pos === -1) {
64275        _pos = _parent;
64276      }
64277      _path = _path.substring(0, _pos) + _path.substring(_parent + 3);
64278    }
64279
64280    // revert to relative
64281    if (_was_relative && this.is('relative')) {
64282      _path = _leadingParents + _path.substring(1);
64283    }
64284
64285    this._parts.path = _path;
64286    this.build(!build);
64287    return this;
64288  };
64289  p.normalizePathname = p.normalizePath;
64290  p.normalizeQuery = function(build) {
64291    if (typeof this._parts.query === 'string') {
64292      if (!this._parts.query.length) {
64293        this._parts.query = null;
64294      } else {
64295        this.query(URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace));
64296      }
64297
64298      this.build(!build);
64299    }
64300
64301    return this;
64302  };
64303  p.normalizeFragment = function(build) {
64304    if (!this._parts.fragment) {
64305      this._parts.fragment = null;
64306      this.build(!build);
64307    }
64308
64309    return this;
64310  };
64311  p.normalizeSearch = p.normalizeQuery;
64312  p.normalizeHash = p.normalizeFragment;
64313
64314  p.iso8859 = function() {
64315    // expect unicode input, iso8859 output
64316    var e = URI.encode;
64317    var d = URI.decode;
64318
64319    URI.encode = escape;
64320    URI.decode = decodeURIComponent;
64321    try {
64322      this.normalize();
64323    } finally {
64324      URI.encode = e;
64325      URI.decode = d;
64326    }
64327    return this;
64328  };
64329
64330  p.unicode = function() {
64331    // expect iso8859 input, unicode output
64332    var e = URI.encode;
64333    var d = URI.decode;
64334
64335    URI.encode = strictEncodeURIComponent;
64336    URI.decode = unescape;
64337    try {
64338      this.normalize();
64339    } finally {
64340      URI.encode = e;
64341      URI.decode = d;
64342    }
64343    return this;
64344  };
64345
64346  p.readable = function() {
64347    var uri = this.clone();
64348    // removing username, password, because they shouldn't be displayed according to RFC 3986
64349    uri.username('').password('').normalize();
64350    var t = '';
64351    if (uri._parts.protocol) {
64352      t += uri._parts.protocol + '://';
64353    }
64354
64355    if (uri._parts.hostname) {
64356      if (uri.is('punycode') && punycode) {
64357        t += punycode.toUnicode(uri._parts.hostname);
64358        if (uri._parts.port) {
64359          t += ':' + uri._parts.port;
64360        }
64361      } else {
64362        t += uri.host();
64363      }
64364    }
64365
64366    if (uri._parts.hostname && uri._parts.path && uri._parts.path.charAt(0) !== '/') {
64367      t += '/';
64368    }
64369
64370    t += uri.path(true);
64371    if (uri._parts.query) {
64372      var q = '';
64373      for (var i = 0, qp = uri._parts.query.split('&'), l = qp.length; i < l; i++) {
64374        var kv = (qp[i] || '').split('=');
64375        q += '&' + URI.decodeQuery(kv[0], this._parts.escapeQuerySpace)
64376          .replace(/&/g, '%26');
64377
64378        if (kv[1] !== undefined) {
64379          q += '=' + URI.decodeQuery(kv[1], this._parts.escapeQuerySpace)
64380            .replace(/&/g, '%26');
64381        }
64382      }
64383      t += '?' + q.substring(1);
64384    }
64385
64386    t += URI.decodeQuery(uri.hash(), true);
64387    return t;
64388  };
64389
64390  // resolving relative and absolute URLs
64391  p.absoluteTo = function(base) {
64392    var resolved = this.clone();
64393    var properties = ['protocol', 'username', 'password', 'hostname', 'port'];
64394    var basedir, i, p;
64395
64396    if (this._parts.urn) {
64397      throw new Error('URNs do not have any generally defined hierarchical components');
64398    }
64399
64400    if (!(base instanceof URI)) {
64401      base = new URI(base);
64402    }
64403
64404    if (resolved._parts.protocol) {
64405      // Directly returns even if this._parts.hostname is empty.
64406      return resolved;
64407    } else {
64408      resolved._parts.protocol = base._parts.protocol;
64409    }
64410
64411    if (this._parts.hostname) {
64412      return resolved;
64413    }
64414
64415    for (i = 0; (p = properties[i]); i++) {
64416      resolved._parts[p] = base._parts[p];
64417    }
64418
64419    if (!resolved._parts.path) {
64420      resolved._parts.path = base._parts.path;
64421      if (!resolved._parts.query) {
64422        resolved._parts.query = base._parts.query;
64423      }
64424    } else {
64425      if (resolved._parts.path.substring(-2) === '..') {
64426        resolved._parts.path += '/';
64427      }
64428
64429      if (resolved.path().charAt(0) !== '/') {
64430        basedir = base.directory();
64431        basedir = basedir ? basedir : base.path().indexOf('/') === 0 ? '/' : '';
64432        resolved._parts.path = (basedir ? (basedir + '/') : '') + resolved._parts.path;
64433        resolved.normalizePath();
64434      }
64435    }
64436
64437    resolved.build();
64438    return resolved;
64439  };
64440  p.relativeTo = function(base) {
64441    var relative = this.clone().normalize();
64442    var relativeParts, baseParts, common, relativePath, basePath;
64443
64444    if (relative._parts.urn) {
64445      throw new Error('URNs do not have any generally defined hierarchical components');
64446    }
64447
64448    base = new URI(base).normalize();
64449    relativeParts = relative._parts;
64450    baseParts = base._parts;
64451    relativePath = relative.path();
64452    basePath = base.path();
64453
64454    if (relativePath.charAt(0) !== '/') {
64455      throw new Error('URI is already relative');
64456    }
64457
64458    if (basePath.charAt(0) !== '/') {
64459      throw new Error('Cannot calculate a URI relative to another relative URI');
64460    }
64461
64462    if (relativeParts.protocol === baseParts.protocol) {
64463      relativeParts.protocol = null;
64464    }
64465
64466    if (relativeParts.username !== baseParts.username || relativeParts.password !== baseParts.password) {
64467      return relative.build();
64468    }
64469
64470    if (relativeParts.protocol !== null || relativeParts.username !== null || relativeParts.password !== null) {
64471      return relative.build();
64472    }
64473
64474    if (relativeParts.hostname === baseParts.hostname && relativeParts.port === baseParts.port) {
64475      relativeParts.hostname = null;
64476      relativeParts.port = null;
64477    } else {
64478      return relative.build();
64479    }
64480
64481    if (relativePath === basePath) {
64482      relativeParts.path = '';
64483      return relative.build();
64484    }
64485
64486    // determine common sub path
64487    common = URI.commonPath(relativePath, basePath);
64488
64489    // If the paths have nothing in common, return a relative URL with the absolute path.
64490    if (!common) {
64491      return relative.build();
64492    }
64493
64494    var parents = baseParts.path
64495      .substring(common.length)
64496      .replace(/[^\/]*$/, '')
64497      .replace(/.*?\//g, '../');
64498
64499    relativeParts.path = (parents + relativeParts.path.substring(common.length)) || './';
64500
64501    return relative.build();
64502  };
64503
64504  // comparing URIs
64505  p.equals = function(uri) {
64506    var one = this.clone();
64507    var two = new URI(uri);
64508    var one_map = {};
64509    var two_map = {};
64510    var checked = {};
64511    var one_query, two_query, key;
64512
64513    one.normalize();
64514    two.normalize();
64515
64516    // exact match
64517    if (one.toString() === two.toString()) {
64518      return true;
64519    }
64520
64521    // extract query string
64522    one_query = one.query();
64523    two_query = two.query();
64524    one.query('');
64525    two.query('');
64526
64527    // definitely not equal if not even non-query parts match
64528    if (one.toString() !== two.toString()) {
64529      return false;
64530    }
64531
64532    // query parameters have the same length, even if they're permuted
64533    if (one_query.length !== two_query.length) {
64534      return false;
64535    }
64536
64537    one_map = URI.parseQuery(one_query, this._parts.escapeQuerySpace);
64538    two_map = URI.parseQuery(two_query, this._parts.escapeQuerySpace);
64539
64540    for (key in one_map) {
64541      if (hasOwn.call(one_map, key)) {
64542        if (!isArray(one_map[key])) {
64543          if (one_map[key] !== two_map[key]) {
64544            return false;
64545          }
64546        } else if (!arraysEqual(one_map[key], two_map[key])) {
64547          return false;
64548        }
64549
64550        checked[key] = true;
64551      }
64552    }
64553
64554    for (key in two_map) {
64555      if (hasOwn.call(two_map, key)) {
64556        if (!checked[key]) {
64557          // two contains a parameter not present in one
64558          return false;
64559        }
64560      }
64561    }
64562
64563    return true;
64564  };
64565
64566  // state
64567  p.preventInvalidHostname = function(v) {
64568    this._parts.preventInvalidHostname = !!v;
64569    return this;
64570  };
64571
64572  p.duplicateQueryParameters = function(v) {
64573    this._parts.duplicateQueryParameters = !!v;
64574    return this;
64575  };
64576
64577  p.escapeQuerySpace = function(v) {
64578    this._parts.escapeQuerySpace = !!v;
64579    return this;
64580  };
64581
64582  return URI;
64583}));
64584
64585
64586/***/ }),
64587
vendor: 14,996 bytes, lines 64588-65118
64588/***/ "./node_modules/urijs/src/punycode.js":
64589/*!********************************************!*\
64590  !*** ./node_modules/urijs/src/punycode.js ***!
64591  \********************************************/
64592/*! no static exports found */
64593/***/ (function(module, exports, __webpack_require__) {
64594
64595/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.0 by @mathias */
64596;(function(root) {
64597
64598	/** Detect free variables */
64599	var freeExports =  true && exports &&
64600		!exports.nodeType && exports;
64601	var freeModule =  true && module &&
64602		!module.nodeType && module;
64603	var freeGlobal = typeof global == 'object' && global;
64604	if (
64605		freeGlobal.global === freeGlobal ||
64606		freeGlobal.window === freeGlobal ||
64607		freeGlobal.self === freeGlobal
64608	) {
64609		root = freeGlobal;
64610	}
64611
64612	/**
64613	 * The `punycode` object.
64614	 * @name punycode
64615	 * @type Object
64616	 */
64617	var punycode,
64618
64619	/** Highest positive signed 32-bit float value */
64620	maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
64621
64622	/** Bootstring parameters */
64623	base = 36,
64624	tMin = 1,
64625	tMax = 26,
64626	skew = 38,
64627	damp = 700,
64628	initialBias = 72,
64629	initialN = 128, // 0x80
64630	delimiter = '-', // '\x2D'
64631
64632	/** Regular expressions */
64633	regexPunycode = /^xn--/,
64634	regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
64635	regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
64636
64637	/** Error messages */
64638	errors = {
64639		'overflow': 'Overflow: input needs wider integers to process',
64640		'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
64641		'invalid-input': 'Invalid input'
64642	},
64643
64644	/** Convenience shortcuts */
64645	baseMinusTMin = base - tMin,
64646	floor = Math.floor,
64647	stringFromCharCode = String.fromCharCode,
64648
64649	/** Temporary variable */
64650	key;
64651
64652	/*--------------------------------------------------------------------------*/
64653
64654	/**
64655	 * A generic error utility function.
64656	 * @private
64657	 * @param {String} type The error type.
64658	 * @returns {Error} Throws a `RangeError` with the applicable error message.
64659	 */
64660	function error(type) {
64661		throw new RangeError(errors[type]);
64662	}
64663
64664	/**
64665	 * A generic `Array#map` utility function.
64666	 * @private
64667	 * @param {Array} array The array to iterate over.
64668	 * @param {Function} callback The function that gets called for every array
64669	 * item.
64670	 * @returns {Array} A new array of values returned by the callback function.
64671	 */
64672	function map(array, fn) {
64673		var length = array.length;
64674		var result = [];
64675		while (length--) {
64676			result[length] = fn(array[length]);
64677		}
64678		return result;
64679	}
64680
64681	/**
64682	 * A simple `Array#map`-like wrapper to work with domain name strings or email
64683	 * addresses.
64684	 * @private
64685	 * @param {String} domain The domain name or email address.
64686	 * @param {Function} callback The function that gets called for every
64687	 * character.
64688	 * @returns {Array} A new string of characters returned by the callback
64689	 * function.
64690	 */
64691	function mapDomain(string, fn) {
64692		var parts = string.split('@');
64693		var result = '';
64694		if (parts.length > 1) {
64695			// In email addresses, only the domain name should be punycoded. Leave
64696			// the local part (i.e. everything up to `@`) intact.
64697			result = parts[0] + '@';
64698			string = parts[1];
64699		}
64700		// Avoid `split(regex)` for IE8 compatibility. See #17.
64701		string = string.replace(regexSeparators, '\x2E');
64702		var labels = string.split('.');
64703		var encoded = map(labels, fn).join('.');
64704		return result + encoded;
64705	}
64706
64707	/**
64708	 * Creates an array containing the numeric code points of each Unicode
64709	 * character in the string. While JavaScript uses UCS-2 internally,
64710	 * this function will convert a pair of surrogate halves (each of which
64711	 * UCS-2 exposes as separate characters) into a single code point,
64712	 * matching UTF-16.
64713	 * @see `punycode.ucs2.encode`
64714	 * @see <https://mathiasbynens.be/notes/javascript-encoding>
64715	 * @memberOf punycode.ucs2
64716	 * @name decode
64717	 * @param {String} string The Unicode input string (UCS-2).
64718	 * @returns {Array} The new array of code points.
64719	 */
64720	function ucs2decode(string) {
64721		var output = [],
64722		    counter = 0,
64723		    length = string.length,
64724		    value,
64725		    extra;
64726		while (counter < length) {
64727			value = string.charCodeAt(counter++);
64728			if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
64729				// high surrogate, and there is a next character
64730				extra = string.charCodeAt(counter++);
64731				if ((extra & 0xFC00) == 0xDC00) { // low surrogate
64732					output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
64733				} else {
64734					// unmatched surrogate; only append this code unit, in case the next
64735					// code unit is the high surrogate of a surrogate pair
64736					output.push(value);
64737					counter--;
64738				}
64739			} else {
64740				output.push(value);
64741			}
64742		}
64743		return output;
64744	}
64745
64746	/**
64747	 * Creates a string based on an array of numeric code points.
64748	 * @see `punycode.ucs2.decode`
64749	 * @memberOf punycode.ucs2
64750	 * @name encode
64751	 * @param {Array} codePoints The array of numeric code points.
64752	 * @returns {String} The new Unicode string (UCS-2).
64753	 */
64754	function ucs2encode(array) {
64755		return map(array, function(value) {
64756			var output = '';
64757			if (value > 0xFFFF) {
64758				value -= 0x10000;
64759				output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
64760				value = 0xDC00 | value & 0x3FF;
64761			}
64762			output += stringFromCharCode(value);
64763			return output;
64764		}).join('');
64765	}
64766
64767	/**
64768	 * Converts a basic code point into a digit/integer.
64769	 * @see `digitToBasic()`
64770	 * @private
64771	 * @param {Number} codePoint The basic numeric code point value.
64772	 * @returns {Number} The numeric value of a basic code point (for use in
64773	 * representing integers) in the range `0` to `base - 1`, or `base` if
64774	 * the code point does not represent a value.
64775	 */
64776	function basicToDigit(codePoint) {
64777		if (codePoint - 48 < 10) {
64778			return codePoint - 22;
64779		}
64780		if (codePoint - 65 < 26) {
64781			return codePoint - 65;
64782		}
64783		if (codePoint - 97 < 26) {
64784			return codePoint - 97;
64785		}
64786		return base;
64787	}
64788
64789	/**
64790	 * Converts a digit/integer into a basic code point.
64791	 * @see `basicToDigit()`
64792	 * @private
64793	 * @param {Number} digit The numeric value of a basic code point.
64794	 * @returns {Number} The basic code point whose value (when used for
64795	 * representing integers) is `digit`, which needs to be in the range
64796	 * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
64797	 * used; else, the lowercase form is used. The behavior is undefined
64798	 * if `flag` is non-zero and `digit` has no uppercase form.
64799	 */
64800	function digitToBasic(digit, flag) {
64801		//  0..25 map to ASCII a..z or A..Z
64802		// 26..35 map to ASCII 0..9
64803		return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
64804	}
64805
64806	/**
64807	 * Bias adaptation function as per section 3.4 of RFC 3492.
64808	 * https://tools.ietf.org/html/rfc3492#section-3.4
64809	 * @private
64810	 */
64811	function adapt(delta, numPoints, firstTime) {
64812		var k = 0;
64813		delta = firstTime ? floor(delta / damp) : delta >> 1;
64814		delta += floor(delta / numPoints);
64815		for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
64816			delta = floor(delta / baseMinusTMin);
64817		}
64818		return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
64819	}
64820
64821	/**
64822	 * Converts a Punycode string of ASCII-only symbols to a string of Unicode
64823	 * symbols.
64824	 * @memberOf punycode
64825	 * @param {String} input The Punycode string of ASCII-only symbols.
64826	 * @returns {String} The resulting string of Unicode symbols.
64827	 */
64828	function decode(input) {
64829		// Don't use UCS-2
64830		var output = [],
64831		    inputLength = input.length,
64832		    out,
64833		    i = 0,
64834		    n = initialN,
64835		    bias = initialBias,
64836		    basic,
64837		    j,
64838		    index,
64839		    oldi,
64840		    w,
64841		    k,
64842		    digit,
64843		    t,
64844		    /** Cached calculation results */
64845		    baseMinusT;
64846
64847		// Handle the basic code points: let `basic` be the number of input code
64848		// points before the last delimiter, or `0` if there is none, then copy
64849		// the first basic code points to the output.
64850
64851		basic = input.lastIndexOf(delimiter);
64852		if (basic < 0) {
64853			basic = 0;
64854		}
64855
64856		for (j = 0; j < basic; ++j) {
64857			// if it's not a basic code point
64858			if (input.charCodeAt(j) >= 0x80) {
64859				error('not-basic');
64860			}
64861			output.push(input.charCodeAt(j));
64862		}
64863
64864		// Main decoding loop: start just after the last delimiter if any basic code
64865		// points were copied; start at the beginning otherwise.
64866
64867		for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
64868
64869			// `index` is the index of the next character to be consumed.
64870			// Decode a generalized variable-length integer into `delta`,
64871			// which gets added to `i`. The overflow checking is easier
64872			// if we increase `i` as we go, then subtract off its starting
64873			// value at the end to obtain `delta`.
64874			for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
64875
64876				if (index >= inputLength) {
64877					error('invalid-input');
64878				}
64879
64880				digit = basicToDigit(input.charCodeAt(index++));
64881
64882				if (digit >= base || digit > floor((maxInt - i) / w)) {
64883					error('overflow');
64884				}
64885
64886				i += digit * w;
64887				t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
64888
64889				if (digit < t) {
64890					break;
64891				}
64892
64893				baseMinusT = base - t;
64894				if (w > floor(maxInt / baseMinusT)) {
64895					error('overflow');
64896				}
64897
64898				w *= baseMinusT;
64899
64900			}
64901
64902			out = output.length + 1;
64903			bias = adapt(i - oldi, out, oldi == 0);
64904
64905			// `i` was supposed to wrap around from `out` to `0`,
64906			// incrementing `n` each time, so we'll fix that now:
64907			if (floor(i / out) > maxInt - n) {
64908				error('overflow');
64909			}
64910
64911			n += floor(i / out);
64912			i %= out;
64913
64914			// Insert `n` at position `i` of the output
64915			output.splice(i++, 0, n);
64916
64917		}
64918
64919		return ucs2encode(output);
64920	}
64921
64922	/**
64923	 * Converts a string of Unicode symbols (e.g. a domain name label) to a
64924	 * Punycode string of ASCII-only symbols.
64925	 * @memberOf punycode
64926	 * @param {String} input The string of Unicode symbols.
64927	 * @returns {String} The resulting Punycode string of ASCII-only symbols.
64928	 */
64929	function encode(input) {
64930		var n,
64931		    delta,
64932		    handledCPCount,
64933		    basicLength,
64934		    bias,
64935		    j,
64936		    m,
64937		    q,
64938		    k,
64939		    t,
64940		    currentValue,
64941		    output = [],
64942		    /** `inputLength` will hold the number of code points in `input`. */
64943		    inputLength,
64944		    /** Cached calculation results */
64945		    handledCPCountPlusOne,
64946		    baseMinusT,
64947		    qMinusT;
64948
64949		// Convert the input in UCS-2 to Unicode
64950		input = ucs2decode(input);
64951
64952		// Cache the length
64953		inputLength = input.length;
64954
64955		// Initialize the state
64956		n = initialN;
64957		delta = 0;
64958		bias = initialBias;
64959
64960		// Handle the basic code points
64961		for (j = 0; j < inputLength; ++j) {
64962			currentValue = input[j];
64963			if (currentValue < 0x80) {
64964				output.push(stringFromCharCode(currentValue));
64965			}
64966		}
64967
64968		handledCPCount = basicLength = output.length;
64969
64970		// `handledCPCount` is the number of code points that have been handled;
64971		// `basicLength` is the number of basic code points.
64972
64973		// Finish the basic string - if it is not empty - with a delimiter
64974		if (basicLength) {
64975			output.push(delimiter);
64976		}
64977
64978		// Main encoding loop:
64979		while (handledCPCount < inputLength) {
64980
64981			// All non-basic code points < n have been handled already. Find the next
64982			// larger one:
64983			for (m = maxInt, j = 0; j < inputLength; ++j) {
64984				currentValue = input[j];
64985				if (currentValue >= n && currentValue < m) {
64986					m = currentValue;
64987				}
64988			}
64989
64990			// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
64991			// but guard against overflow
64992			handledCPCountPlusOne = handledCPCount + 1;
64993			if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
64994				error('overflow');
64995			}
64996
64997			delta += (m - n) * handledCPCountPlusOne;
64998			n = m;
64999
65000			for (j = 0; j < inputLength; ++j) {
65001				currentValue = input[j];
65002
65003				if (currentValue < n && ++delta > maxInt) {
65004					error('overflow');
65005				}
65006
65007				if (currentValue == n) {
65008					// Represent delta as a generalized variable-length integer
65009					for (q = delta, k = base; /* no condition */; k += base) {
65010						t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
65011						if (q < t) {
65012							break;
65013						}
65014						qMinusT = q - t;
65015						baseMinusT = base - t;
65016						output.push(
65017							stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
65018						);
65019						q = floor(qMinusT / baseMinusT);
65020					}
65021
65022					output.push(stringFromCharCode(digitToBasic(q, 0)));
65023					bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
65024					delta = 0;
65025					++handledCPCount;
65026				}
65027			}
65028
65029			++delta;
65030			++n;
65031
65032		}
65033		return output.join('');
65034	}
65035
65036	/**
65037	 * Converts a Punycode string representing a domain name or an email address
65038	 * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
65039	 * it doesn't matter if you call it on a string that has already been
65040	 * converted to Unicode.
65041	 * @memberOf punycode
65042	 * @param {String} input The Punycoded domain name or email address to
65043	 * convert to Unicode.
65044	 * @returns {String} The Unicode representation of the given Punycode
65045	 * string.
65046	 */
65047	function toUnicode(input) {
65048		return mapDomain(input, function(string) {
65049			return regexPunycode.test(string)
65050				? decode(string.slice(4).toLowerCase())
65051				: string;
65052		});
65053	}
65054
65055	/**
65056	 * Converts a Unicode string representing a domain name or an email address to
65057	 * Punycode. Only the non-ASCII parts of the domain name will be converted,
65058	 * i.e. it doesn't matter if you call it with a domain that's already in
65059	 * ASCII.
65060	 * @memberOf punycode
65061	 * @param {String} input The domain name or email address to convert, as a
65062	 * Unicode string.
65063	 * @returns {String} The Punycode representation of the given domain name or
65064	 * email address.
65065	 */
65066	function toASCII(input) {
65067		return mapDomain(input, function(string) {
65068			return regexNonASCII.test(string)
65069				? 'xn--' + encode(string)
65070				: string;
65071		});
65072	}
65073
65074	/*--------------------------------------------------------------------------*/
65075
65076	/** Define the public API */
65077	punycode = {
65078		/**
65079		 * A string representing the current Punycode.js version number.
65080		 * @memberOf punycode
65081		 * @type String
65082		 */
65083		'version': '1.3.2',
65084		/**
65085		 * An object of methods to convert from JavaScript's internal character
65086		 * representation (UCS-2) to Unicode code points, and back.
65087		 * @see <https://mathiasbynens.be/notes/javascript-encoding>
65088		 * @memberOf punycode
65089		 * @type Object
65090		 */
65091		'ucs2': {
65092			'decode': ucs2decode,
65093			'encode': ucs2encode
65094		},
65095		'decode': decode,
65096		'encode': encode,
65097		'toASCII': toASCII,
65098		'toUnicode': toUnicode
65099	};
65100
65101	/** Expose `punycode` */
65102	// Some AMD build optimizers, like r.js, check for specific condition patterns
65103	// like the following:
65104	if (
65105		true
65106	) {
65107		!(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
65108			return punycode;
65109		}).call(exports, __webpack_require__, exports, module),
65110				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
65111	} else {}
65112
65113}(this));
65114
65115/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module), __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
65116
65117/***/ }),
65118
vendor: 435,260 bytes, lines 65119-77061
65119/***/ "./node_modules/vue/dist/vue.js":
65120/*!**************************************!*\
65121  !*** ./node_modules/vue/dist/vue.js ***!
65122  \**************************************/
65123/*! no static exports found */
65124/***/ (function(module, exports, __webpack_require__) {
65125
65126/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/*!
65127 * Vue.js v2.7.16
65128 * (c) 2014-2023 Evan You
65129 * Released under the MIT License.
65130 */
65131(function (global, factory) {
65132   true ? module.exports = factory() :
65133  undefined;
65134})(this, (function () { 'use strict';
65135
65136  var emptyObject = Object.freeze({});
65137  var isArray = Array.isArray;
65138  // These helpers produce better VM code in JS engines due to their
65139  // explicitness and function inlining.
65140  function isUndef(v) {
65141      return v === undefined || v === null;
65142  }
65143  function isDef(v) {
65144      return v !== undefined && v !== null;
65145  }
65146  function isTrue(v) {
65147      return v === true;
65148  }
65149  function isFalse(v) {
65150      return v === false;
65151  }
65152  /**
65153   * Check if value is primitive.
65154   */
65155  function isPrimitive(value) {
65156      return (typeof value === 'string' ||
65157          typeof value === 'number' ||
65158          // $flow-disable-line
65159          typeof value === 'symbol' ||
65160          typeof value === 'boolean');
65161  }
65162  function isFunction(value) {
65163      return typeof value === 'function';
65164  }
65165  /**
65166   * Quick object check - this is primarily used to tell
65167   * objects from primitive values when we know the value
65168   * is a JSON-compliant type.
65169   */
65170  function isObject(obj) {
65171      return obj !== null && typeof obj === 'object';
65172  }
65173  /**
65174   * Get the raw type string of a value, e.g., [object Object].
65175   */
65176  var _toString = Object.prototype.toString;
65177  function toRawType(value) {
65178      return _toString.call(value).slice(8, -1);
65179  }
65180  /**
65181   * Strict object type check. Only returns true
65182   * for plain JavaScript objects.
65183   */
65184  function isPlainObject(obj) {
65185      return _toString.call(obj) === '[object Object]';
65186  }
65187  function isRegExp(v) {
65188      return _toString.call(v) === '[object RegExp]';
65189  }
65190  /**
65191   * Check if val is a valid array index.
65192   */
65193  function isValidArrayIndex(val) {
65194      var n = parseFloat(String(val));
65195      return n >= 0 && Math.floor(n) === n && isFinite(val);
65196  }
65197  function isPromise(val) {
65198      return (isDef(val) &&
65199          typeof val.then === 'function' &&
65200          typeof val.catch === 'function');
65201  }
65202  /**
65203   * Convert a value to a string that is actually rendered.
65204   */
65205  function toString(val) {
65206      return val == null
65207          ? ''
65208          : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
65209              ? JSON.stringify(val, replacer, 2)
65210              : String(val);
65211  }
65212  function replacer(_key, val) {
65213      // avoid circular deps from v3
65214      if (val && val.__v_isRef) {
65215          return val.value;
65216      }
65217      return val;
65218  }
65219  /**
65220   * Convert an input value to a number for persistence.
65221   * If the conversion fails, return original string.
65222   */
65223  function toNumber(val) {
65224      var n = parseFloat(val);
65225      return isNaN(n) ? val : n;
65226  }
65227  /**
65228   * Make a map and return a function for checking if a key
65229   * is in that map.
65230   */
65231  function makeMap(str, expectsLowerCase) {
65232      var map = Object.create(null);
65233      var list = str.split(',');
65234      for (var i = 0; i < list.length; i++) {
65235          map[list[i]] = true;
65236      }
65237      return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };
65238  }
65239  /**
65240   * Check if a tag is a built-in tag.
65241   */
65242  var isBuiltInTag = makeMap('slot,component', true);
65243  /**
65244   * Check if an attribute is a reserved attribute.
65245   */
65246  var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
65247  /**
65248   * Remove an item from an array.
65249   */
65250  function remove$2(arr, item) {
65251      var len = arr.length;
65252      if (len) {
65253          // fast path for the only / last item
65254          if (item === arr[len - 1]) {
65255              arr.length = len - 1;
65256              return;
65257          }
65258          var index = arr.indexOf(item);
65259          if (index > -1) {
65260              return arr.splice(index, 1);
65261          }
65262      }
65263  }
65264  /**
65265   * Check whether an object has the property.
65266   */
65267  var hasOwnProperty = Object.prototype.hasOwnProperty;
65268  function hasOwn(obj, key) {
65269      return hasOwnProperty.call(obj, key);
65270  }
65271  /**
65272   * Create a cached version of a pure function.
65273   */
65274  function cached(fn) {
65275      var cache = Object.create(null);
65276      return function cachedFn(str) {
65277          var hit = cache[str];
65278          return hit || (cache[str] = fn(str));
65279      };
65280  }
65281  /**
65282   * Camelize a hyphen-delimited string.
65283   */
65284  var camelizeRE = /-(\w)/g;
65285  var camelize = cached(function (str) {
65286      return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });
65287  });
65288  /**
65289   * Capitalize a string.
65290   */
65291  var capitalize = cached(function (str) {
65292      return str.charAt(0).toUpperCase() + str.slice(1);
65293  });
65294  /**
65295   * Hyphenate a camelCase string.
65296   */
65297  var hyphenateRE = /\B([A-Z])/g;
65298  var hyphenate = cached(function (str) {
65299      return str.replace(hyphenateRE, '-$1').toLowerCase();
65300  });
65301  /**
65302   * Simple bind polyfill for environments that do not support it,
65303   * e.g., PhantomJS 1.x. Technically, we don't need this anymore
65304   * since native bind is now performant enough in most browsers.
65305   * But removing it would mean breaking code that was able to run in
65306   * PhantomJS 1.x, so this must be kept for backward compatibility.
65307   */
65308  /* istanbul ignore next */
65309  function polyfillBind(fn, ctx) {
65310      function boundFn(a) {
65311          var l = arguments.length;
65312          return l
65313              ? l > 1
65314                  ? fn.apply(ctx, arguments)
65315                  : fn.call(ctx, a)
65316              : fn.call(ctx);
65317      }
65318      boundFn._length = fn.length;
65319      return boundFn;
65320  }
65321  function nativeBind(fn, ctx) {
65322      return fn.bind(ctx);
65323  }
65324  // @ts-expect-error bind cannot be `undefined`
65325  var bind$1 = Function.prototype.bind ? nativeBind : polyfillBind;
65326  /**
65327   * Convert an Array-like object to a real Array.
65328   */
65329  function toArray(list, start) {
65330      start = start || 0;
65331      var i = list.length - start;
65332      var ret = new Array(i);
65333      while (i--) {
65334          ret[i] = list[i + start];
65335      }
65336      return ret;
65337  }
65338  /**
65339   * Mix properties into target object.
65340   */
65341  function extend(to, _from) {
65342      for (var key in _from) {
65343          to[key] = _from[key];
65344      }
65345      return to;
65346  }
65347  /**
65348   * Merge an Array of Objects into a single Object.
65349   */
65350  function toObject(arr) {
65351      var res = {};
65352      for (var i = 0; i < arr.length; i++) {
65353          if (arr[i]) {
65354              extend(res, arr[i]);
65355          }
65356      }
65357      return res;
65358  }
65359  /* eslint-disable no-unused-vars */
65360  /**
65361   * Perform no operation.
65362   * Stubbing args to make Flow happy without leaving useless transpiled code
65363   * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
65364   */
65365  function noop(a, b, c) { }
65366  /**
65367   * Always return false.
65368   */
65369  var no = function (a, b, c) { return false; };
65370  /* eslint-enable no-unused-vars */
65371  /**
65372   * Return the same value.
65373   */
65374  var identity = function (_) { return _; };
65375  /**
65376   * Generate a string containing static keys from compiler modules.
65377   */
65378  function genStaticKeys$1(modules) {
65379      return modules
65380          .reduce(function (keys, m) { return keys.concat(m.staticKeys || []); }, [])
65381          .join(',');
65382  }
65383  /**
65384   * Check if two values are loosely equal - that is,
65385   * if they are plain objects, do they have the same shape?
65386   */
65387  function looseEqual(a, b) {
65388      if (a === b)
65389          return true;
65390      var isObjectA = isObject(a);
65391      var isObjectB = isObject(b);
65392      if (isObjectA && isObjectB) {
65393          try {
65394              var isArrayA = Array.isArray(a);
65395              var isArrayB = Array.isArray(b);
65396              if (isArrayA && isArrayB) {
65397                  return (a.length === b.length &&
65398                      a.every(function (e, i) {
65399                          return looseEqual(e, b[i]);
65400                      }));
65401              }
65402              else if (a instanceof Date && b instanceof Date) {
65403                  return a.getTime() === b.getTime();
65404              }
65405              else if (!isArrayA && !isArrayB) {
65406                  var keysA = Object.keys(a);
65407                  var keysB = Object.keys(b);
65408                  return (keysA.length === keysB.length &&
65409                      keysA.every(function (key) {
65410                          return looseEqual(a[key], b[key]);
65411                      }));
65412              }
65413              else {
65414                  /* istanbul ignore next */
65415                  return false;
65416              }
65417          }
65418          catch (e) {
65419              /* istanbul ignore next */
65420              return false;
65421          }
65422      }
65423      else if (!isObjectA && !isObjectB) {
65424          return String(a) === String(b);
65425      }
65426      else {
65427          return false;
65428      }
65429  }
65430  /**
65431   * Return the first index at which a loosely equal value can be
65432   * found in the array (if value is a plain object, the array must
65433   * contain an object of the same shape), or -1 if it is not present.
65434   */
65435  function looseIndexOf(arr, val) {
65436      for (var i = 0; i < arr.length; i++) {
65437          if (looseEqual(arr[i], val))
65438              return i;
65439      }
65440      return -1;
65441  }
65442  /**
65443   * Ensure a function is called only once.
65444   */
65445  function once(fn) {
65446      var called = false;
65447      return function () {
65448          if (!called) {
65449              called = true;
65450              fn.apply(this, arguments);
65451          }
65452      };
65453  }
65454  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
65455  function hasChanged(x, y) {
65456      if (x === y) {
65457          return x === 0 && 1 / x !== 1 / y;
65458      }
65459      else {
65460          return x === x || y === y;
65461      }
65462  }
65463
65464  var SSR_ATTR = 'data-server-rendered';
65465  var ASSET_TYPES = ['component', 'directive', 'filter'];
65466  var LIFECYCLE_HOOKS = [
65467      'beforeCreate',
65468      'created',
65469      'beforeMount',
65470      'mounted',
65471      'beforeUpdate',
65472      'updated',
65473      'beforeDestroy',
65474      'destroyed',
65475      'activated',
65476      'deactivated',
65477      'errorCaptured',
65478      'serverPrefetch',
65479      'renderTracked',
65480      'renderTriggered'
65481  ];
65482
65483  var config = {
65484      /**
65485       * Option merge strategies (used in core/util/options)
65486       */
65487      // $flow-disable-line
65488      optionMergeStrategies: Object.create(null),
65489      /**
65490       * Whether to suppress warnings.
65491       */
65492      silent: false,
65493      /**
65494       * Show production mode tip message on boot?
65495       */
65496      productionTip: true,
65497      /**
65498       * Whether to enable devtools
65499       */
65500      devtools: true,
65501      /**
65502       * Whether to record perf
65503       */
65504      performance: false,
65505      /**
65506       * Error handler for watcher errors
65507       */
65508      errorHandler: null,
65509      /**
65510       * Warn handler for watcher warns
65511       */
65512      warnHandler: null,
65513      /**
65514       * Ignore certain custom elements
65515       */
65516      ignoredElements: [],
65517      /**
65518       * Custom user key aliases for v-on
65519       */
65520      // $flow-disable-line
65521      keyCodes: Object.create(null),
65522      /**
65523       * Check if a tag is reserved so that it cannot be registered as a
65524       * component. This is platform-dependent and may be overwritten.
65525       */
65526      isReservedTag: no,
65527      /**
65528       * Check if an attribute is reserved so that it cannot be used as a component
65529       * prop. This is platform-dependent and may be overwritten.
65530       */
65531      isReservedAttr: no,
65532      /**
65533       * Check if a tag is an unknown element.
65534       * Platform-dependent.
65535       */
65536      isUnknownElement: no,
65537      /**
65538       * Get the namespace of an element
65539       */
65540      getTagNamespace: noop,
65541      /**
65542       * Parse the real tag name for the specific platform.
65543       */
65544      parsePlatformTagName: identity,
65545      /**
65546       * Check if an attribute must be bound using property, e.g. value
65547       * Platform-dependent.
65548       */
65549      mustUseProp: no,
65550      /**
65551       * Perform updates asynchronously. Intended to be used by Vue Test Utils
65552       * This will significantly reduce performance if set to false.
65553       */
65554      async: true,
65555      /**
65556       * Exposed for legacy reasons
65557       */
65558      _lifecycleHooks: LIFECYCLE_HOOKS
65559  };
65560
65561  /**
65562   * unicode letters used for parsing html tags, component names and property paths.
65563   * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
65564   * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
65565   */
65566  var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
65567  /**
65568   * Check if a string starts with $ or _
65569   */
65570  function isReserved(str) {
65571      var c = (str + '').charCodeAt(0);
65572      return c === 0x24 || c === 0x5f;
65573  }
65574  /**
65575   * Define a property.
65576   */
65577  function def(obj, key, val, enumerable) {
65578      Object.defineProperty(obj, key, {
65579          value: val,
65580          enumerable: !!enumerable,
65581          writable: true,
65582          configurable: true
65583      });
65584  }
65585  /**
65586   * Parse simple path.
65587   */
65588  var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]"));
65589  function parsePath(path) {
65590      if (bailRE.test(path)) {
65591          return;
65592      }
65593      var segments = path.split('.');
65594      return function (obj) {
65595          for (var i = 0; i < segments.length; i++) {
65596              if (!obj)
65597                  return;
65598              obj = obj[segments[i]];
65599          }
65600          return obj;
65601      };
65602  }
65603
65604  // can we use __proto__?
65605  var hasProto = '__proto__' in {};
65606  // Browser environment sniffing
65607  var inBrowser = typeof window !== 'undefined';
65608  var UA = inBrowser && window.navigator.userAgent.toLowerCase();
65609  var isIE = UA && /msie|trident/.test(UA);
65610  var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
65611  var isEdge = UA && UA.indexOf('edge/') > 0;
65612  UA && UA.indexOf('android') > 0;
65613  var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
65614  UA && /chrome\/\d+/.test(UA) && !isEdge;
65615  UA && /phantomjs/.test(UA);
65616  var isFF = UA && UA.match(/firefox\/(\d+)/);
65617  // Firefox has a "watch" function on Object.prototype...
65618  // @ts-expect-error firebox support
65619  var nativeWatch = {}.watch;
65620  var supportsPassive = false;
65621  if (inBrowser) {
65622      try {
65623          var opts = {};
65624          Object.defineProperty(opts, 'passive', {
65625              get: function () {
65626                  /* istanbul ignore next */
65627                  supportsPassive = true;
65628              }
65629          }); // https://github.com/facebook/flow/issues/285
65630          window.addEventListener('test-passive', null, opts);
65631      }
65632      catch (e) { }
65633  }
65634  // this needs to be lazy-evaled because vue may be required before
65635  // vue-server-renderer can set VUE_ENV
65636  var _isServer;
65637  var isServerRendering = function () {
65638      if (_isServer === undefined) {
65639          /* istanbul ignore if */
65640          if (!inBrowser && typeof global !== 'undefined') {
65641              // detect presence of vue-server-renderer and avoid
65642              // Webpack shimming the process
65643              _isServer =
65644                  global['process'] && global['process'].env.VUE_ENV === 'server';
65645          }
65646          else {
65647              _isServer = false;
65648          }
65649      }
65650      return _isServer;
65651  };
65652  // detect devtools
65653  var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
65654  /* istanbul ignore next */
65655  function isNative(Ctor) {
65656      return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
65657  }
65658  var hasSymbol = typeof Symbol !== 'undefined' &&
65659      isNative(Symbol) &&
65660      typeof Reflect !== 'undefined' &&
65661      isNative(Reflect.ownKeys);
65662  var _Set; // $flow-disable-line
65663  /* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
65664      // use native Set when available.
65665      _Set = Set;
65666  }
65667  else {
65668      // a non-standard Set polyfill that only works with primitive keys.
65669      _Set = /** @class */ (function () {
65670          function Set() {
65671              this.set = Object.create(null);
65672          }
65673          Set.prototype.has = function (key) {
65674              return this.set[key] === true;
65675          };
65676          Set.prototype.add = function (key) {
65677              this.set[key] = true;
65678          };
65679          Set.prototype.clear = function () {
65680              this.set = Object.create(null);
65681          };
65682          return Set;
65683      }());
65684  }
65685
65686  var currentInstance = null;
65687  /**
65688   * This is exposed for compatibility with v3 (e.g. some functions in VueUse
65689   * relies on it). Do not use this internally, just use `currentInstance`.
65690   *
65691   * @internal this function needs manual type declaration because it relies
65692   * on previously manually authored types from Vue 2
65693   */
65694  function getCurrentInstance() {
65695      return currentInstance && { proxy: currentInstance };
65696  }
65697  /**
65698   * @internal
65699   */
65700  function setCurrentInstance(vm) {
65701      if (vm === void 0) { vm = null; }
65702      if (!vm)
65703          currentInstance && currentInstance._scope.off();
65704      currentInstance = vm;
65705      vm && vm._scope.on();
65706  }
65707
65708  /**
65709   * @internal
65710   */
65711  var VNode = /** @class */ (function () {
65712      function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
65713          this.tag = tag;
65714          this.data = data;
65715          this.children = children;
65716          this.text = text;
65717          this.elm = elm;
65718          this.ns = undefined;
65719          this.context = context;
65720          this.fnContext = undefined;
65721          this.fnOptions = undefined;
65722          this.fnScopeId = undefined;
65723          this.key = data && data.key;
65724          this.componentOptions = componentOptions;
65725          this.componentInstance = undefined;
65726          this.parent = undefined;
65727          this.raw = false;
65728          this.isStatic = false;
65729          this.isRootInsert = true;
65730          this.isComment = false;
65731          this.isCloned = false;
65732          this.isOnce = false;
65733          this.asyncFactory = asyncFactory;
65734          this.asyncMeta = undefined;
65735          this.isAsyncPlaceholder = false;
65736      }
65737      Object.defineProperty(VNode.prototype, "child", {
65738          // DEPRECATED: alias for componentInstance for backwards compat.
65739          /* istanbul ignore next */
65740          get: function () {
65741              return this.componentInstance;
65742          },
65743          enumerable: false,
65744          configurable: true
65745      });
65746      return VNode;
65747  }());
65748  var createEmptyVNode = function (text) {
65749      if (text === void 0) { text = ''; }
65750      var node = new VNode();
65751      node.text = text;
65752      node.isComment = true;
65753      return node;
65754  };
65755  function createTextVNode(val) {
65756      return new VNode(undefined, undefined, undefined, String(val));
65757  }
65758  // optimized shallow clone
65759  // used for static nodes and slot nodes because they may be reused across
65760  // multiple renders, cloning them avoids errors when DOM manipulations rely
65761  // on their elm reference.
65762  function cloneVNode(vnode) {
65763      var cloned = new VNode(vnode.tag, vnode.data, 
65764      // #7975
65765      // clone children array to avoid mutating original in case of cloning
65766      // a child.
65767      vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
65768      cloned.ns = vnode.ns;
65769      cloned.isStatic = vnode.isStatic;
65770      cloned.key = vnode.key;
65771      cloned.isComment = vnode.isComment;
65772      cloned.fnContext = vnode.fnContext;
65773      cloned.fnOptions = vnode.fnOptions;
65774      cloned.fnScopeId = vnode.fnScopeId;
65775      cloned.asyncMeta = vnode.asyncMeta;
65776      cloned.isCloned = true;
65777      return cloned;
65778  }
65779
65780  /* not type checking this file because flow doesn't play well with Proxy */
65781  var initProxy;
65782  {
65783      var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
65784          'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
65785          'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
65786          'require' // for Webpack/Browserify
65787      );
65788      var warnNonPresent_1 = function (target, key) {
65789          warn$2("Property or method \"".concat(key, "\" is not defined on the instance but ") +
65790              'referenced during render. Make sure that this property is reactive, ' +
65791              'either in the data option, or for class-based components, by ' +
65792              'initializing the property. ' +
65793              'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);
65794      };
65795      var warnReservedPrefix_1 = function (target, key) {
65796          warn$2("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") +
65797              'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
65798              'prevent conflicts with Vue internals. ' +
65799              'See: https://v2.vuejs.org/v2/api/#data', target);
65800      };
65801      var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy);
65802      if (hasProxy_1) {
65803          var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
65804          config.keyCodes = new Proxy(config.keyCodes, {
65805              set: function (target, key, value) {
65806                  if (isBuiltInModifier_1(key)) {
65807                      warn$2("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key));
65808                      return false;
65809                  }
65810                  else {
65811                      target[key] = value;
65812                      return true;
65813                  }
65814              }
65815          });
65816      }
65817      var hasHandler_1 = {
65818          has: function (target, key) {
65819              var has = key in target;
65820              var isAllowed = allowedGlobals_1(key) ||
65821                  (typeof key === 'string' &&
65822                      key.charAt(0) === '_' &&
65823                      !(key in target.$data));
65824              if (!has && !isAllowed) {
65825                  if (key in target.$data)
65826                      warnReservedPrefix_1(target, key);
65827                  else
65828                      warnNonPresent_1(target, key);
65829              }
65830              return has || !isAllowed;
65831          }
65832      };
65833      var getHandler_1 = {
65834          get: function (target, key) {
65835              if (typeof key === 'string' && !(key in target)) {
65836                  if (key in target.$data)
65837                      warnReservedPrefix_1(target, key);
65838                  else
65839                      warnNonPresent_1(target, key);
65840              }
65841              return target[key];
65842          }
65843      };
65844      initProxy = function initProxy(vm) {
65845          if (hasProxy_1) {
65846              // determine which proxy handler to use
65847              var options = vm.$options;
65848              var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1;
65849              vm._renderProxy = new Proxy(vm, handlers);
65850          }
65851          else {
65852              vm._renderProxy = vm;
65853          }
65854      };
65855  }
65856
65857  /******************************************************************************
65858  Copyright (c) Microsoft Corporation.
65859
65860  Permission to use, copy, modify, and/or distribute this software for any
65861  purpose with or without fee is hereby granted.
65862
65863  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
65864  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
65865  AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
65866  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
65867  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
65868  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
65869  PERFORMANCE OF THIS SOFTWARE.
65870  ***************************************************************************** */
65871
65872  var __assign = function() {
65873      __assign = Object.assign || function __assign(t) {
65874          for (var s, i = 1, n = arguments.length; i < n; i++) {
65875              s = arguments[i];
65876              for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
65877          }
65878          return t;
65879      };
65880      return __assign.apply(this, arguments);
65881  };
65882
65883  typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
65884      var e = new Error(message);
65885      return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
65886  };
65887
65888  var uid$2 = 0;
65889  var pendingCleanupDeps = [];
65890  var cleanupDeps = function () {
65891      for (var i = 0; i < pendingCleanupDeps.length; i++) {
65892          var dep = pendingCleanupDeps[i];
65893          dep.subs = dep.subs.filter(function (s) { return s; });
65894          dep._pending = false;
65895      }
65896      pendingCleanupDeps.length = 0;
65897  };
65898  /**
65899   * A dep is an observable that can have multiple
65900   * directives subscribing to it.
65901   * @internal
65902   */
65903  var Dep = /** @class */ (function () {
65904      function Dep() {
65905          // pending subs cleanup
65906          this._pending = false;
65907          this.id = uid$2++;
65908          this.subs = [];
65909      }
65910      Dep.prototype.addSub = function (sub) {
65911          this.subs.push(sub);
65912      };
65913      Dep.prototype.removeSub = function (sub) {
65914          // #12696 deps with massive amount of subscribers are extremely slow to
65915          // clean up in Chromium
65916          // to workaround this, we unset the sub for now, and clear them on
65917          // next scheduler flush.
65918          this.subs[this.subs.indexOf(sub)] = null;
65919          if (!this._pending) {
65920              this._pending = true;
65921              pendingCleanupDeps.push(this);
65922          }
65923      };
65924      Dep.prototype.depend = function (info) {
65925          if (Dep.target) {
65926              Dep.target.addDep(this);
65927              if (info && Dep.target.onTrack) {
65928                  Dep.target.onTrack(__assign({ effect: Dep.target }, info));
65929              }
65930          }
65931      };
65932      Dep.prototype.notify = function (info) {
65933          // stabilize the subscriber list first
65934          var subs = this.subs.filter(function (s) { return s; });
65935          if (!config.async) {
65936              // subs aren't sorted in scheduler if not running async
65937              // we need to sort them now to make sure they fire in correct
65938              // order
65939              subs.sort(function (a, b) { return a.id - b.id; });
65940          }
65941          for (var i = 0, l = subs.length; i < l; i++) {
65942              var sub = subs[i];
65943              if (info) {
65944                  sub.onTrigger &&
65945                      sub.onTrigger(__assign({ effect: subs[i] }, info));
65946              }
65947              sub.update();
65948          }
65949      };
65950      return Dep;
65951  }());
65952  // The current target watcher being evaluated.
65953  // This is globally unique because only one watcher
65954  // can be evaluated at a time.
65955  Dep.target = null;
65956  var targetStack = [];
65957  function pushTarget(target) {
65958      targetStack.push(target);
65959      Dep.target = target;
65960  }
65961  function popTarget() {
65962      targetStack.pop();
65963      Dep.target = targetStack[targetStack.length - 1];
65964  }
65965
65966  /*
65967   * not type checking this file because flow doesn't play well with
65968   * dynamically accessing methods on Array prototype
65969   */
65970  var arrayProto = Array.prototype;
65971  var arrayMethods = Object.create(arrayProto);
65972  var methodsToPatch = [
65973      'push',
65974      'pop',
65975      'shift',
65976      'unshift',
65977      'splice',
65978      'sort',
65979      'reverse'
65980  ];
65981  /**
65982   * Intercept mutating methods and emit events
65983   */
65984  methodsToPatch.forEach(function (method) {
65985      // cache original method
65986      var original = arrayProto[method];
65987      def(arrayMethods, method, function mutator() {
65988          var args = [];
65989          for (var _i = 0; _i < arguments.length; _i++) {
65990              args[_i] = arguments[_i];
65991          }
65992          var result = original.apply(this, args);
65993          var ob = this.__ob__;
65994          var inserted;
65995          switch (method) {
65996              case 'push':
65997              case 'unshift':
65998                  inserted = args;
65999                  break;
66000              case 'splice':
66001                  inserted = args.slice(2);
66002                  break;
66003          }
66004          if (inserted)
66005              ob.observeArray(inserted);
66006          // notify change
66007          {
66008              ob.dep.notify({
66009                  type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */,
66010                  target: this,
66011                  key: method
66012              });
66013          }
66014          return result;
66015      });
66016  });
66017
66018  var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
66019  var NO_INITIAL_VALUE = {};
66020  /**
66021   * In some cases we may want to disable observation inside a component's
66022   * update computation.
66023   */
66024  var shouldObserve = true;
66025  function toggleObserving(value) {
66026      shouldObserve = value;
66027  }
66028  // ssr mock dep
66029  var mockDep = {
66030      notify: noop,
66031      depend: noop,
66032      addSub: noop,
66033      removeSub: noop
66034  };
66035  /**
66036   * Observer class that is attached to each observed
66037   * object. Once attached, the observer converts the target
66038   * object's property keys into getter/setters that
66039   * collect dependencies and dispatch updates.
66040   */
66041  var Observer = /** @class */ (function () {
66042      function Observer(value, shallow, mock) {
66043          if (shallow === void 0) { shallow = false; }
66044          if (mock === void 0) { mock = false; }
66045          this.value = value;
66046          this.shallow = shallow;
66047          this.mock = mock;
66048          // this.value = value
66049          this.dep = mock ? mockDep : new Dep();
66050          this.vmCount = 0;
66051          def(value, '__ob__', this);
66052          if (isArray(value)) {
66053              if (!mock) {
66054                  if (hasProto) {
66055                      value.__proto__ = arrayMethods;
66056                      /* eslint-enable no-proto */
66057                  }
66058                  else {
66059                      for (var i = 0, l = arrayKeys.length; i < l; i++) {
66060                          var key = arrayKeys[i];
66061                          def(value, key, arrayMethods[key]);
66062                      }
66063                  }
66064              }
66065              if (!shallow) {
66066                  this.observeArray(value);
66067              }
66068          }
66069          else {
66070              /**
66071               * Walk through all properties and convert them into
66072               * getter/setters. This method should only be called when
66073               * value type is Object.
66074               */
66075              var keys = Object.keys(value);
66076              for (var i = 0; i < keys.length; i++) {
66077                  var key = keys[i];
66078                  defineReactive(value, key, NO_INITIAL_VALUE, undefined, shallow, mock);
66079              }
66080          }
66081      }
66082      /**
66083       * Observe a list of Array items.
66084       */
66085      Observer.prototype.observeArray = function (value) {
66086          for (var i = 0, l = value.length; i < l; i++) {
66087              observe(value[i], false, this.mock);
66088          }
66089      };
66090      return Observer;
66091  }());
66092  // helpers
66093  /**
66094   * Attempt to create an observer instance for a value,
66095   * returns the new observer if successfully observed,
66096   * or the existing observer if the value already has one.
66097   */
66098  function observe(value, shallow, ssrMockReactivity) {
66099      if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
66100          return value.__ob__;
66101      }
66102      if (shouldObserve &&
66103          (ssrMockReactivity || !isServerRendering()) &&
66104          (isArray(value) || isPlainObject(value)) &&
66105          Object.isExtensible(value) &&
66106          !value.__v_skip /* ReactiveFlags.SKIP */ &&
66107          !isRef(value) &&
66108          !(value instanceof VNode)) {
66109          return new Observer(value, shallow, ssrMockReactivity);
66110      }
66111  }
66112  /**
66113   * Define a reactive property on an Object.
66114   */
66115  function defineReactive(obj, key, val, customSetter, shallow, mock, observeEvenIfShallow) {
66116      if (observeEvenIfShallow === void 0) { observeEvenIfShallow = false; }
66117      var dep = new Dep();
66118      var property = Object.getOwnPropertyDescriptor(obj, key);
66119      if (property && property.configurable === false) {
66120          return;
66121      }
66122      // cater for pre-defined getter/setters
66123      var getter = property && property.get;
66124      var setter = property && property.set;
66125      if ((!getter || setter) &&
66126          (val === NO_INITIAL_VALUE || arguments.length === 2)) {
66127          val = obj[key];
66128      }
66129      var childOb = shallow ? val && val.__ob__ : observe(val, false, mock);
66130      Object.defineProperty(obj, key, {
66131          enumerable: true,
66132          configurable: true,
66133          get: function reactiveGetter() {
66134              var value = getter ? getter.call(obj) : val;
66135              if (Dep.target) {
66136                  {
66137                      dep.depend({
66138                          target: obj,
66139                          type: "get" /* TrackOpTypes.GET */,
66140                          key: key
66141                      });
66142                  }
66143                  if (childOb) {
66144                      childOb.dep.depend();
66145                      if (isArray(value)) {
66146                          dependArray(value);
66147                      }
66148                  }
66149              }
66150              return isRef(value) && !shallow ? value.value : value;
66151          },
66152          set: function reactiveSetter(newVal) {
66153              var value = getter ? getter.call(obj) : val;
66154              if (!hasChanged(value, newVal)) {
66155                  return;
66156              }
66157              if (customSetter) {
66158                  customSetter();
66159              }
66160              if (setter) {
66161                  setter.call(obj, newVal);
66162              }
66163              else if (getter) {
66164                  // #7981: for accessor properties without setter
66165                  return;
66166              }
66167              else if (!shallow && isRef(value) && !isRef(newVal)) {
66168                  value.value = newVal;
66169                  return;
66170              }
66171              else {
66172                  val = newVal;
66173              }
66174              childOb = shallow ? newVal && newVal.__ob__ : observe(newVal, false, mock);
66175              {
66176                  dep.notify({
66177                      type: "set" /* TriggerOpTypes.SET */,
66178                      target: obj,
66179                      key: key,
66180                      newValue: newVal,
66181                      oldValue: value
66182                  });
66183              }
66184          }
66185      });
66186      return dep;
66187  }
66188  function set(target, key, val) {
66189      if ((isUndef(target) || isPrimitive(target))) {
66190          warn$2("Cannot set reactive property on undefined, null, or primitive value: ".concat(target));
66191      }
66192      if (isReadonly(target)) {
66193          warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly."));
66194          return;
66195      }
66196      var ob = target.__ob__;
66197      if (isArray(target) && isValidArrayIndex(key)) {
66198          target.length = Math.max(target.length, key);
66199          target.splice(key, 1, val);
66200          // when mocking for SSR, array methods are not hijacked
66201          if (ob && !ob.shallow && ob.mock) {
66202              observe(val, false, true);
66203          }
66204          return val;
66205      }
66206      if (key in target && !(key in Object.prototype)) {
66207          target[key] = val;
66208          return val;
66209      }
66210      if (target._isVue || (ob && ob.vmCount)) {
66211          warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' +
66212                  'at runtime - declare it upfront in the data option.');
66213          return val;
66214      }
66215      if (!ob) {
66216          target[key] = val;
66217          return val;
66218      }
66219      defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
66220      {
66221          ob.dep.notify({
66222              type: "add" /* TriggerOpTypes.ADD */,
66223              target: target,
66224              key: key,
66225              newValue: val,
66226              oldValue: undefined
66227          });
66228      }
66229      return val;
66230  }
66231  function del(target, key) {
66232      if ((isUndef(target) || isPrimitive(target))) {
66233          warn$2("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target));
66234      }
66235      if (isArray(target) && isValidArrayIndex(key)) {
66236          target.splice(key, 1);
66237          return;
66238      }
66239      var ob = target.__ob__;
66240      if (target._isVue || (ob && ob.vmCount)) {
66241          warn$2('Avoid deleting properties on a Vue instance or its root $data ' +
66242                  '- just set it to null.');
66243          return;
66244      }
66245      if (isReadonly(target)) {
66246          warn$2("Delete operation on key \"".concat(key, "\" failed: target is readonly."));
66247          return;
66248      }
66249      if (!hasOwn(target, key)) {
66250          return;
66251      }
66252      delete target[key];
66253      if (!ob) {
66254          return;
66255      }
66256      {
66257          ob.dep.notify({
66258              type: "delete" /* TriggerOpTypes.DELETE */,
66259              target: target,
66260              key: key
66261          });
66262      }
66263  }
66264  /**
66265   * Collect dependencies on array elements when the array is touched, since
66266   * we cannot intercept array element access like property getters.
66267   */
66268  function dependArray(value) {
66269      for (var e = void 0, i = 0, l = value.length; i < l; i++) {
66270          e = value[i];
66271          if (e && e.__ob__) {
66272              e.__ob__.dep.depend();
66273          }
66274          if (isArray(e)) {
66275              dependArray(e);
66276          }
66277      }
66278  }
66279
66280  function reactive(target) {
66281      makeReactive(target, false);
66282      return target;
66283  }
66284  /**
66285   * Return a shallowly-reactive copy of the original object, where only the root
66286   * level properties are reactive. It also does not auto-unwrap refs (even at the
66287   * root level).
66288   */
66289  function shallowReactive(target) {
66290      makeReactive(target, true);
66291      def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
66292      return target;
66293  }
66294  function makeReactive(target, shallow) {
66295      // if trying to observe a readonly proxy, return the readonly version.
66296      if (!isReadonly(target)) {
66297          {
66298              if (isArray(target)) {
66299                  warn$2("Avoid using Array as root value for ".concat(shallow ? "shallowReactive()" : "reactive()", " as it cannot be tracked in watch() or watchEffect(). Use ").concat(shallow ? "shallowRef()" : "ref()", " instead. This is a Vue-2-only limitation."));
66300              }
66301              var existingOb = target && target.__ob__;
66302              if (existingOb && existingOb.shallow !== shallow) {
66303                  warn$2("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow."));
66304              }
66305          }
66306          var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);
66307          if (!ob) {
66308              if (target == null || isPrimitive(target)) {
66309                  warn$2("value cannot be made reactive: ".concat(String(target)));
66310              }
66311              if (isCollectionType(target)) {
66312                  warn$2("Vue 2 does not support reactive collection types such as Map or Set.");
66313              }
66314          }
66315      }
66316  }
66317  function isReactive(value) {
66318      if (isReadonly(value)) {
66319          return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]);
66320      }
66321      return !!(value && value.__ob__);
66322  }
66323  function isShallow(value) {
66324      return !!(value && value.__v_isShallow);
66325  }
66326  function isReadonly(value) {
66327      return !!(value && value.__v_isReadonly);
66328  }
66329  function isProxy(value) {
66330      return isReactive(value) || isReadonly(value);
66331  }
66332  function toRaw(observed) {
66333      var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */];
66334      return raw ? toRaw(raw) : observed;
66335  }
66336  function markRaw(value) {
66337      // non-extensible objects won't be observed anyway
66338      if (Object.isExtensible(value)) {
66339          def(value, "__v_skip" /* ReactiveFlags.SKIP */, true);
66340      }
66341      return value;
66342  }
66343  /**
66344   * @internal
66345   */
66346  function isCollectionType(value) {
66347      var type = toRawType(value);
66348      return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');
66349  }
66350
66351  /**
66352   * @internal
66353   */
66354  var RefFlag = "__v_isRef";
66355  function isRef(r) {
66356      return !!(r && r.__v_isRef === true);
66357  }
66358  function ref$1(value) {
66359      return createRef(value, false);
66360  }
66361  function shallowRef(value) {
66362      return createRef(value, true);
66363  }
66364  function createRef(rawValue, shallow) {
66365      if (isRef(rawValue)) {
66366          return rawValue;
66367      }
66368      var ref = {};
66369      def(ref, RefFlag, true);
66370      def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow);
66371      def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));
66372      return ref;
66373  }
66374  function triggerRef(ref) {
66375      if (!ref.dep) {
66376          warn$2("received object is not a triggerable ref.");
66377      }
66378      {
66379          ref.dep &&
66380              ref.dep.notify({
66381                  type: "set" /* TriggerOpTypes.SET */,
66382                  target: ref,
66383                  key: 'value'
66384              });
66385      }
66386  }
66387  function unref(ref) {
66388      return isRef(ref) ? ref.value : ref;
66389  }
66390  function proxyRefs(objectWithRefs) {
66391      if (isReactive(objectWithRefs)) {
66392          return objectWithRefs;
66393      }
66394      var proxy = {};
66395      var keys = Object.keys(objectWithRefs);
66396      for (var i = 0; i < keys.length; i++) {
66397          proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);
66398      }
66399      return proxy;
66400  }
66401  function proxyWithRefUnwrap(target, source, key) {
66402      Object.defineProperty(target, key, {
66403          enumerable: true,
66404          configurable: true,
66405          get: function () {
66406              var val = source[key];
66407              if (isRef(val)) {
66408                  return val.value;
66409              }
66410              else {
66411                  var ob = val && val.__ob__;
66412                  if (ob)
66413                      ob.dep.depend();
66414                  return val;
66415              }
66416          },
66417          set: function (value) {
66418              var oldValue = source[key];
66419              if (isRef(oldValue) && !isRef(value)) {
66420                  oldValue.value = value;
66421              }
66422              else {
66423                  source[key] = value;
66424              }
66425          }
66426      });
66427  }
66428  function customRef(factory) {
66429      var dep = new Dep();
66430      var _a = factory(function () {
66431          {
66432              dep.depend({
66433                  target: ref,
66434                  type: "get" /* TrackOpTypes.GET */,
66435                  key: 'value'
66436              });
66437          }
66438      }, function () {
66439          {
66440              dep.notify({
66441                  target: ref,
66442                  type: "set" /* TriggerOpTypes.SET */,
66443                  key: 'value'
66444              });
66445          }
66446      }), get = _a.get, set = _a.set;
66447      var ref = {
66448          get value() {
66449              return get();
66450          },
66451          set value(newVal) {
66452              set(newVal);
66453          }
66454      };
66455      def(ref, RefFlag, true);
66456      return ref;
66457  }
66458  function toRefs(object) {
66459      if (!isReactive(object)) {
66460          warn$2("toRefs() expects a reactive object but received a plain one.");
66461      }
66462      var ret = isArray(object) ? new Array(object.length) : {};
66463      for (var key in object) {
66464          ret[key] = toRef(object, key);
66465      }
66466      return ret;
66467  }
66468  function toRef(object, key, defaultValue) {
66469      var val = object[key];
66470      if (isRef(val)) {
66471          return val;
66472      }
66473      var ref = {
66474          get value() {
66475              var val = object[key];
66476              return val === undefined ? defaultValue : val;
66477          },
66478          set value(newVal) {
66479              object[key] = newVal;
66480          }
66481      };
66482      def(ref, RefFlag, true);
66483      return ref;
66484  }
66485
66486  var rawToReadonlyFlag = "__v_rawToReadonly";
66487  var rawToShallowReadonlyFlag = "__v_rawToShallowReadonly";
66488  function readonly(target) {
66489      return createReadonly(target, false);
66490  }
66491  function createReadonly(target, shallow) {
66492      if (!isPlainObject(target)) {
66493          {
66494              if (isArray(target)) {
66495                  warn$2("Vue 2 does not support readonly arrays.");
66496              }
66497              else if (isCollectionType(target)) {
66498                  warn$2("Vue 2 does not support readonly collection types such as Map or Set.");
66499              }
66500              else {
66501                  warn$2("value cannot be made readonly: ".concat(typeof target));
66502              }
66503          }
66504          return target;
66505      }
66506      if (!Object.isExtensible(target)) {
66507          warn$2("Vue 2 does not support creating readonly proxy for non-extensible object.");
66508      }
66509      // already a readonly object
66510      if (isReadonly(target)) {
66511          return target;
66512      }
66513      // already has a readonly proxy
66514      var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;
66515      var existingProxy = target[existingFlag];
66516      if (existingProxy) {
66517          return existingProxy;
66518      }
66519      var proxy = Object.create(Object.getPrototypeOf(target));
66520      def(target, existingFlag, proxy);
66521      def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true);
66522      def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target);
66523      if (isRef(target)) {
66524          def(proxy, RefFlag, true);
66525      }
66526      if (shallow || isShallow(target)) {
66527          def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
66528      }
66529      var keys = Object.keys(target);
66530      for (var i = 0; i < keys.length; i++) {
66531          defineReadonlyProperty(proxy, target, keys[i], shallow);
66532      }
66533      return proxy;
66534  }
66535  function defineReadonlyProperty(proxy, target, key, shallow) {
66536      Object.defineProperty(proxy, key, {
66537          enumerable: true,
66538          configurable: true,
66539          get: function () {
66540              var val = target[key];
66541              return shallow || !isPlainObject(val) ? val : readonly(val);
66542          },
66543          set: function () {
66544              warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly."));
66545          }
66546      });
66547  }
66548  /**
66549   * Returns a reactive-copy of the original object, where only the root level
66550   * properties are readonly, and does NOT unwrap refs nor recursively convert
66551   * returned properties.
66552   * This is used for creating the props proxy object for stateful components.
66553   */
66554  function shallowReadonly(target) {
66555      return createReadonly(target, true);
66556  }
66557
66558  function computed(getterOrOptions, debugOptions) {
66559      var getter;
66560      var setter;
66561      var onlyGetter = isFunction(getterOrOptions);
66562      if (onlyGetter) {
66563          getter = getterOrOptions;
66564          setter = function () {
66565                  warn$2('Write operation failed: computed value is readonly');
66566              }
66567              ;
66568      }
66569      else {
66570          getter = getterOrOptions.get;
66571          setter = getterOrOptions.set;
66572      }
66573      var watcher = isServerRendering()
66574          ? null
66575          : new Watcher(currentInstance, getter, noop, { lazy: true });
66576      if (watcher && debugOptions) {
66577          watcher.onTrack = debugOptions.onTrack;
66578          watcher.onTrigger = debugOptions.onTrigger;
66579      }
66580      var ref = {
66581          // some libs rely on the presence effect for checking computed refs
66582          // from normal refs, but the implementation doesn't matter
66583          effect: watcher,
66584          get value() {
66585              if (watcher) {
66586                  if (watcher.dirty) {
66587                      watcher.evaluate();
66588                  }
66589                  if (Dep.target) {
66590                      if (Dep.target.onTrack) {
66591                          Dep.target.onTrack({
66592                              effect: Dep.target,
66593                              target: ref,
66594                              type: "get" /* TrackOpTypes.GET */,
66595                              key: 'value'
66596                          });
66597                      }
66598                      watcher.depend();
66599                  }
66600                  return watcher.value;
66601              }
66602              else {
66603                  return getter();
66604              }
66605          },
66606          set value(newVal) {
66607              setter(newVal);
66608          }
66609      };
66610      def(ref, RefFlag, true);
66611      def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter);
66612      return ref;
66613  }
66614
66615  var mark;
66616  var measure;
66617  {
66618      var perf_1 = inBrowser && window.performance;
66619      /* istanbul ignore if */
66620      if (perf_1 &&
66621          // @ts-ignore
66622          perf_1.mark &&
66623          // @ts-ignore
66624          perf_1.measure &&
66625          // @ts-ignore
66626          perf_1.clearMarks &&
66627          // @ts-ignore
66628          perf_1.clearMeasures) {
66629          mark = function (tag) { return perf_1.mark(tag); };
66630          measure = function (name, startTag, endTag) {
66631              perf_1.measure(name, startTag, endTag);
66632              perf_1.clearMarks(startTag);
66633              perf_1.clearMarks(endTag);
66634              // perf.clearMeasures(name)
66635          };
66636      }
66637  }
66638
66639  var normalizeEvent = cached(function (name) {
66640      var passive = name.charAt(0) === '&';
66641      name = passive ? name.slice(1) : name;
66642      var once = name.charAt(0) === '~'; // Prefixed last, checked first
66643      name = once ? name.slice(1) : name;
66644      var capture = name.charAt(0) === '!';
66645      name = capture ? name.slice(1) : name;
66646      return {
66647          name: name,
66648          once: once,
66649          capture: capture,
66650          passive: passive
66651      };
66652  });
66653  function createFnInvoker(fns, vm) {
66654      function invoker() {
66655          var fns = invoker.fns;
66656          if (isArray(fns)) {
66657              var cloned = fns.slice();
66658              for (var i = 0; i < cloned.length; i++) {
66659                  invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler");
66660              }
66661          }
66662          else {
66663              // return handler return value for single handlers
66664              return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler");
66665          }
66666      }
66667      invoker.fns = fns;
66668      return invoker;
66669  }
66670  function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
66671      var name, cur, old, event;
66672      for (name in on) {
66673          cur = on[name];
66674          old = oldOn[name];
66675          event = normalizeEvent(name);
66676          if (isUndef(cur)) {
66677              warn$2("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm);
66678          }
66679          else if (isUndef(old)) {
66680              if (isUndef(cur.fns)) {
66681                  cur = on[name] = createFnInvoker(cur, vm);
66682              }
66683              if (isTrue(event.once)) {
66684                  cur = on[name] = createOnceHandler(event.name, cur, event.capture);
66685              }
66686              add(event.name, cur, event.capture, event.passive, event.params);
66687          }
66688          else if (cur !== old) {
66689              old.fns = cur;
66690              on[name] = old;
66691          }
66692      }
66693      for (name in oldOn) {
66694          if (isUndef(on[name])) {
66695              event = normalizeEvent(name);
66696              remove(event.name, oldOn[name], event.capture);
66697          }
66698      }
66699  }
66700
66701  function mergeVNodeHook(def, hookKey, hook) {
66702      if (def instanceof VNode) {
66703          def = def.data.hook || (def.data.hook = {});
66704      }
66705      var invoker;
66706      var oldHook = def[hookKey];
66707      function wrappedHook() {
66708          hook.apply(this, arguments);
66709          // important: remove merged hook to ensure it's called only once
66710          // and prevent memory leak
66711          remove$2(invoker.fns, wrappedHook);
66712      }
66713      if (isUndef(oldHook)) {
66714          // no existing hook
66715          invoker = createFnInvoker([wrappedHook]);
66716      }
66717      else {
66718          /* istanbul ignore if */
66719          if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
66720              // already a merged invoker
66721              invoker = oldHook;
66722              invoker.fns.push(wrappedHook);
66723          }
66724          else {
66725              // existing plain hook
66726              invoker = createFnInvoker([oldHook, wrappedHook]);
66727          }
66728      }
66729      invoker.merged = true;
66730      def[hookKey] = invoker;
66731  }
66732
66733  function extractPropsFromVNodeData(data, Ctor, tag) {
66734      // we are only extracting raw values here.
66735      // validation and default values are handled in the child
66736      // component itself.
66737      var propOptions = Ctor.options.props;
66738      if (isUndef(propOptions)) {
66739          return;
66740      }
66741      var res = {};
66742      var attrs = data.attrs, props = data.props;
66743      if (isDef(attrs) || isDef(props)) {
66744          for (var key in propOptions) {
66745              var altKey = hyphenate(key);
66746              {
66747                  var keyInLowerCase = key.toLowerCase();
66748                  if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
66749                      tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") +
66750                          "".concat(formatComponentName(
66751                          // @ts-expect-error tag is string
66752                          tag || Ctor), ", but the declared prop name is") +
66753                          " \"".concat(key, "\". ") +
66754                          "Note that HTML attributes are case-insensitive and camelCased " +
66755                          "props need to use their kebab-case equivalents when using in-DOM " +
66756                          "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\"."));
66757                  }
66758              }
66759              checkProp(res, props, key, altKey, true) ||
66760                  checkProp(res, attrs, key, altKey, false);
66761          }
66762      }
66763      return res;
66764  }
66765  function checkProp(res, hash, key, altKey, preserve) {
66766      if (isDef(hash)) {
66767          if (hasOwn(hash, key)) {
66768              res[key] = hash[key];
66769              if (!preserve) {
66770                  delete hash[key];
66771              }
66772              return true;
66773          }
66774          else if (hasOwn(hash, altKey)) {
66775              res[key] = hash[altKey];
66776              if (!preserve) {
66777                  delete hash[altKey];
66778              }
66779              return true;
66780          }
66781      }
66782      return false;
66783  }
66784
66785  // The template compiler attempts to minimize the need for normalization by
66786  // statically analyzing the template at compile time.
66787  //
66788  // For plain HTML markup, normalization can be completely skipped because the
66789  // generated render function is guaranteed to return Array<VNode>. There are
66790  // two cases where extra normalization is needed:
66791  // 1. When the children contains components - because a functional component
66792  // may return an Array instead of a single root. In this case, just a simple
66793  // normalization is needed - if any child is an Array, we flatten the whole
66794  // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
66795  // because functional components already normalize their own children.
66796  function simpleNormalizeChildren(children) {
66797      for (var i = 0; i < children.length; i++) {
66798          if (isArray(children[i])) {
66799              return Array.prototype.concat.apply([], children);
66800          }
66801      }
66802      return children;
66803  }
66804  // 2. When the children contains constructs that always generated nested Arrays,
66805  // e.g. <template>, <slot>, v-for, or when the children is provided by user
66806  // with hand-written render functions / JSX. In such cases a full normalization
66807  // is needed to cater to all possible types of children values.
66808  function normalizeChildren(children) {
66809      return isPrimitive(children)
66810          ? [createTextVNode(children)]
66811          : isArray(children)
66812              ? normalizeArrayChildren(children)
66813              : undefined;
66814  }
66815  function isTextNode(node) {
66816      return isDef(node) && isDef(node.text) && isFalse(node.isComment);
66817  }
66818  function normalizeArrayChildren(children, nestedIndex) {
66819      var res = [];
66820      var i, c, lastIndex, last;
66821      for (i = 0; i < children.length; i++) {
66822          c = children[i];
66823          if (isUndef(c) || typeof c === 'boolean')
66824              continue;
66825          lastIndex = res.length - 1;
66826          last = res[lastIndex];
66827          //  nested
66828          if (isArray(c)) {
66829              if (c.length > 0) {
66830                  c = normalizeArrayChildren(c, "".concat(nestedIndex || '', "_").concat(i));
66831                  // merge adjacent text nodes
66832                  if (isTextNode(c[0]) && isTextNode(last)) {
66833                      res[lastIndex] = createTextVNode(last.text + c[0].text);
66834                      c.shift();
66835                  }
66836                  res.push.apply(res, c);
66837              }
66838          }
66839          else if (isPrimitive(c)) {
66840              if (isTextNode(last)) {
66841                  // merge adjacent text nodes
66842                  // this is necessary for SSR hydration because text nodes are
66843                  // essentially merged when rendered to HTML strings
66844                  res[lastIndex] = createTextVNode(last.text + c);
66845              }
66846              else if (c !== '') {
66847                  // convert primitive to vnode
66848                  res.push(createTextVNode(c));
66849              }
66850          }
66851          else {
66852              if (isTextNode(c) && isTextNode(last)) {
66853                  // merge adjacent text nodes
66854                  res[lastIndex] = createTextVNode(last.text + c.text);
66855              }
66856              else {
66857                  // default key for nested array children (likely generated by v-for)
66858                  if (isTrue(children._isVList) &&
66859                      isDef(c.tag) &&
66860                      isUndef(c.key) &&
66861                      isDef(nestedIndex)) {
66862                      c.key = "__vlist".concat(nestedIndex, "_").concat(i, "__");
66863                  }
66864                  res.push(c);
66865              }
66866          }
66867      }
66868      return res;
66869  }
66870
66871  var SIMPLE_NORMALIZE = 1;
66872  var ALWAYS_NORMALIZE = 2;
66873  // wrapper function for providing a more flexible interface
66874  // without getting yelled at by flow
66875  function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {
66876      if (isArray(data) || isPrimitive(data)) {
66877          normalizationType = children;
66878          children = data;
66879          data = undefined;
66880      }
66881      if (isTrue(alwaysNormalize)) {
66882          normalizationType = ALWAYS_NORMALIZE;
66883      }
66884      return _createElement(context, tag, data, children, normalizationType);
66885  }
66886  function _createElement(context, tag, data, children, normalizationType) {
66887      if (isDef(data) && isDef(data.__ob__)) {
66888          warn$2("Avoid using observed data object as vnode data: ".concat(JSON.stringify(data), "\n") + 'Always create fresh vnode data objects in each render!', context);
66889          return createEmptyVNode();
66890      }
66891      // object syntax in v-bind
66892      if (isDef(data) && isDef(data.is)) {
66893          tag = data.is;
66894      }
66895      if (!tag) {
66896          // in case of component :is set to falsy value
66897          return createEmptyVNode();
66898      }
66899      // warn against non-primitive key
66900      if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
66901          warn$2('Avoid using non-primitive value as key, ' +
66902              'use string/number value instead.', context);
66903      }
66904      // support single function children as default scoped slot
66905      if (isArray(children) && isFunction(children[0])) {
66906          data = data || {};
66907          data.scopedSlots = { default: children[0] };
66908          children.length = 0;
66909      }
66910      if (normalizationType === ALWAYS_NORMALIZE) {
66911          children = normalizeChildren(children);
66912      }
66913      else if (normalizationType === SIMPLE_NORMALIZE) {
66914          children = simpleNormalizeChildren(children);
66915      }
66916      var vnode, ns;
66917      if (typeof tag === 'string') {
66918          var Ctor = void 0;
66919          ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
66920          if (config.isReservedTag(tag)) {
66921              // platform built-in elements
66922              if (isDef(data) &&
66923                  isDef(data.nativeOn) &&
66924                  data.tag !== 'component') {
66925                  warn$2("The .native modifier for v-on is only valid on components but it was used on <".concat(tag, ">."), context);
66926              }
66927              vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);
66928          }
66929          else if ((!data || !data.pre) &&
66930              isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {
66931              // component
66932              vnode = createComponent(Ctor, data, context, children, tag);
66933          }
66934          else {
66935              // unknown or unlisted namespaced elements
66936              // check at runtime because it may get assigned a namespace when its
66937              // parent normalizes children
66938              vnode = new VNode(tag, data, children, undefined, undefined, context);
66939          }
66940      }
66941      else {
66942          // direct component options / constructor
66943          vnode = createComponent(tag, data, context, children);
66944      }
66945      if (isArray(vnode)) {
66946          return vnode;
66947      }
66948      else if (isDef(vnode)) {
66949          if (isDef(ns))
66950              applyNS(vnode, ns);
66951          if (isDef(data))
66952              registerDeepBindings(data);
66953          return vnode;
66954      }
66955      else {
66956          return createEmptyVNode();
66957      }
66958  }
66959  function applyNS(vnode, ns, force) {
66960      vnode.ns = ns;
66961      if (vnode.tag === 'foreignObject') {
66962          // use default namespace inside foreignObject
66963          ns = undefined;
66964          force = true;
66965      }
66966      if (isDef(vnode.children)) {
66967          for (var i = 0, l = vnode.children.length; i < l; i++) {
66968              var child = vnode.children[i];
66969              if (isDef(child.tag) &&
66970                  (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
66971                  applyNS(child, ns, force);
66972              }
66973          }
66974      }
66975  }
66976  // ref #5318
66977  // necessary to ensure parent re-render when deep bindings like :style and
66978  // :class are used on slot nodes
66979  function registerDeepBindings(data) {
66980      if (isObject(data.style)) {
66981          traverse(data.style);
66982      }
66983      if (isObject(data.class)) {
66984          traverse(data.class);
66985      }
66986  }
66987
66988  /**
66989   * Runtime helper for rendering v-for lists.
66990   */
66991  function renderList(val, render) {
66992      var ret = null, i, l, keys, key;
66993      if (isArray(val) || typeof val === 'string') {
66994          ret = new Array(val.length);
66995          for (i = 0, l = val.length; i < l; i++) {
66996              ret[i] = render(val[i], i);
66997          }
66998      }
66999      else if (typeof val === 'number') {
67000          ret = new Array(val);
67001          for (i = 0; i < val; i++) {
67002              ret[i] = render(i + 1, i);
67003          }
67004      }
67005      else if (isObject(val)) {
67006          if (hasSymbol && val[Symbol.iterator]) {
67007              ret = [];
67008              var iterator = val[Symbol.iterator]();
67009              var result = iterator.next();
67010              while (!result.done) {
67011                  ret.push(render(result.value, ret.length));
67012                  result = iterator.next();
67013              }
67014          }
67015          else {
67016              keys = Object.keys(val);
67017              ret = new Array(keys.length);
67018              for (i = 0, l = keys.length; i < l; i++) {
67019                  key = keys[i];
67020                  ret[i] = render(val[key], key, i);
67021              }
67022          }
67023      }
67024      if (!isDef(ret)) {
67025          ret = [];
67026      }
67027      ret._isVList = true;
67028      return ret;
67029  }
67030
67031  /**
67032   * Runtime helper for rendering <slot>
67033   */
67034  function renderSlot(name, fallbackRender, props, bindObject) {
67035      var scopedSlotFn = this.$scopedSlots[name];
67036      var nodes;
67037      if (scopedSlotFn) {
67038          // scoped slot
67039          props = props || {};
67040          if (bindObject) {
67041              if (!isObject(bindObject)) {
67042                  warn$2('slot v-bind without argument expects an Object', this);
67043              }
67044              props = extend(extend({}, bindObject), props);
67045          }
67046          nodes =
67047              scopedSlotFn(props) ||
67048                  (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
67049      }
67050      else {
67051          nodes =
67052              this.$slots[name] ||
67053                  (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
67054      }
67055      var target = props && props.slot;
67056      if (target) {
67057          return this.$createElement('template', { slot: target }, nodes);
67058      }
67059      else {
67060          return nodes;
67061      }
67062  }
67063
67064  /**
67065   * Runtime helper for resolving filters
67066   */
67067  function resolveFilter(id) {
67068      return resolveAsset(this.$options, 'filters', id, true) || identity;
67069  }
67070
67071  function isKeyNotMatch(expect, actual) {
67072      if (isArray(expect)) {
67073          return expect.indexOf(actual) === -1;
67074      }
67075      else {
67076          return expect !== actual;
67077      }
67078  }
67079  /**
67080   * Runtime helper for checking keyCodes from config.
67081   * exposed as Vue.prototype._k
67082   * passing in eventKeyName as last argument separately for backwards compat
67083   */
67084  function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
67085      var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
67086      if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
67087          return isKeyNotMatch(builtInKeyName, eventKeyName);
67088      }
67089      else if (mappedKeyCode) {
67090          return isKeyNotMatch(mappedKeyCode, eventKeyCode);
67091      }
67092      else if (eventKeyName) {
67093          return hyphenate(eventKeyName) !== key;
67094      }
67095      return eventKeyCode === undefined;
67096  }
67097
67098  /**
67099   * Runtime helper for merging v-bind="object" into a VNode's data.
67100   */
67101  function bindObjectProps(data, tag, value, asProp, isSync) {
67102      if (value) {
67103          if (!isObject(value)) {
67104              warn$2('v-bind without argument expects an Object or Array value', this);
67105          }
67106          else {
67107              if (isArray(value)) {
67108                  value = toObject(value);
67109              }
67110              var hash = void 0;
67111              var _loop_1 = function (key) {
67112                  if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
67113                      hash = data;
67114                  }
67115                  else {
67116                      var type = data.attrs && data.attrs.type;
67117                      hash =
67118                          asProp || config.mustUseProp(tag, type, key)
67119                              ? data.domProps || (data.domProps = {})
67120                              : data.attrs || (data.attrs = {});
67121                  }
67122                  var camelizedKey = camelize(key);
67123                  var hyphenatedKey = hyphenate(key);
67124                  if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
67125                      hash[key] = value[key];
67126                      if (isSync) {
67127                          var on = data.on || (data.on = {});
67128                          on["update:".concat(key)] = function ($event) {
67129                              value[key] = $event;
67130                          };
67131                      }
67132                  }
67133              };
67134              for (var key in value) {
67135                  _loop_1(key);
67136              }
67137          }
67138      }
67139      return data;
67140  }
67141
67142  /**
67143   * Runtime helper for rendering static trees.
67144   */
67145  function renderStatic(index, isInFor) {
67146      var cached = this._staticTrees || (this._staticTrees = []);
67147      var tree = cached[index];
67148      // if has already-rendered static tree and not inside v-for,
67149      // we can reuse the same tree.
67150      if (tree && !isInFor) {
67151          return tree;
67152      }
67153      // otherwise, render a fresh tree.
67154      tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates
67155      );
67156      markStatic$1(tree, "__static__".concat(index), false);
67157      return tree;
67158  }
67159  /**
67160   * Runtime helper for v-once.
67161   * Effectively it means marking the node as static with a unique key.
67162   */
67163  function markOnce(tree, index, key) {
67164      markStatic$1(tree, "__once__".concat(index).concat(key ? "_".concat(key) : ""), true);
67165      return tree;
67166  }
67167  function markStatic$1(tree, key, isOnce) {
67168      if (isArray(tree)) {
67169          for (var i = 0; i < tree.length; i++) {
67170              if (tree[i] && typeof tree[i] !== 'string') {
67171                  markStaticNode(tree[i], "".concat(key, "_").concat(i), isOnce);
67172              }
67173          }
67174      }
67175      else {
67176          markStaticNode(tree, key, isOnce);
67177      }
67178  }
67179  function markStaticNode(node, key, isOnce) {
67180      node.isStatic = true;
67181      node.key = key;
67182      node.isOnce = isOnce;
67183  }
67184
67185  function bindObjectListeners(data, value) {
67186      if (value) {
67187          if (!isPlainObject(value)) {
67188              warn$2('v-on without argument expects an Object value', this);
67189          }
67190          else {
67191              var on = (data.on = data.on ? extend({}, data.on) : {});
67192              for (var key in value) {
67193                  var existing = on[key];
67194                  var ours = value[key];
67195                  on[key] = existing ? [].concat(existing, ours) : ours;
67196              }
67197          }
67198      }
67199      return data;
67200  }
67201
67202  function resolveScopedSlots(fns, res, 
67203  // the following are added in 2.6
67204  hasDynamicKeys, contentHashKey) {
67205      res = res || { $stable: !hasDynamicKeys };
67206      for (var i = 0; i < fns.length; i++) {
67207          var slot = fns[i];
67208          if (isArray(slot)) {
67209              resolveScopedSlots(slot, res, hasDynamicKeys);
67210          }
67211          else if (slot) {
67212              // marker for reverse proxying v-slot without scope on this.$slots
67213              // @ts-expect-error
67214              if (slot.proxy) {
67215                  // @ts-expect-error
67216                  slot.fn.proxy = true;
67217              }
67218              res[slot.key] = slot.fn;
67219          }
67220      }
67221      if (contentHashKey) {
67222          res.$key = contentHashKey;
67223      }
67224      return res;
67225  }
67226
67227  // helper to process dynamic keys for dynamic arguments in v-bind and v-on.
67228  function bindDynamicKeys(baseObj, values) {
67229      for (var i = 0; i < values.length; i += 2) {
67230          var key = values[i];
67231          if (typeof key === 'string' && key) {
67232              baseObj[values[i]] = values[i + 1];
67233          }
67234          else if (key !== '' && key !== null) {
67235              // null is a special value for explicitly removing a binding
67236              warn$2("Invalid value for dynamic directive argument (expected string or null): ".concat(key), this);
67237          }
67238      }
67239      return baseObj;
67240  }
67241  // helper to dynamically append modifier runtime markers to event names.
67242  // ensure only append when value is already string, otherwise it will be cast
67243  // to string and cause the type check to miss.
67244  function prependModifier(value, symbol) {
67245      return typeof value === 'string' ? symbol + value : value;
67246  }
67247
67248  function installRenderHelpers(target) {
67249      target._o = markOnce;
67250      target._n = toNumber;
67251      target._s = toString;
67252      target._l = renderList;
67253      target._t = renderSlot;
67254      target._q = looseEqual;
67255      target._i = looseIndexOf;
67256      target._m = renderStatic;
67257      target._f = resolveFilter;
67258      target._k = checkKeyCodes;
67259      target._b = bindObjectProps;
67260      target._v = createTextVNode;
67261      target._e = createEmptyVNode;
67262      target._u = resolveScopedSlots;
67263      target._g = bindObjectListeners;
67264      target._d = bindDynamicKeys;
67265      target._p = prependModifier;
67266  }
67267
67268  /**
67269   * Runtime helper for resolving raw children VNodes into a slot object.
67270   */
67271  function resolveSlots(children, context) {
67272      if (!children || !children.length) {
67273          return {};
67274      }
67275      var slots = {};
67276      for (var i = 0, l = children.length; i < l; i++) {
67277          var child = children[i];
67278          var data = child.data;
67279          // remove slot attribute if the node is resolved as a Vue slot node
67280          if (data && data.attrs && data.attrs.slot) {
67281              delete data.attrs.slot;
67282          }
67283          // named slots should only be respected if the vnode was rendered in the
67284          // same context.
67285          if ((child.context === context || child.fnContext === context) &&
67286              data &&
67287              data.slot != null) {
67288              var name_1 = data.slot;
67289              var slot = slots[name_1] || (slots[name_1] = []);
67290              if (child.tag === 'template') {
67291                  slot.push.apply(slot, child.children || []);
67292              }
67293              else {
67294                  slot.push(child);
67295              }
67296          }
67297          else {
67298              (slots.default || (slots.default = [])).push(child);
67299          }
67300      }
67301      // ignore slots that contains only whitespace
67302      for (var name_2 in slots) {
67303          if (slots[name_2].every(isWhitespace)) {
67304              delete slots[name_2];
67305          }
67306      }
67307      return slots;
67308  }
67309  function isWhitespace(node) {
67310      return (node.isComment && !node.asyncFactory) || node.text === ' ';
67311  }
67312
67313  function isAsyncPlaceholder(node) {
67314      // @ts-expect-error not really boolean type
67315      return node.isComment && node.asyncFactory;
67316  }
67317
67318  function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {
67319      var res;
67320      var hasNormalSlots = Object.keys(normalSlots).length > 0;
67321      var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;
67322      var key = scopedSlots && scopedSlots.$key;
67323      if (!scopedSlots) {
67324          res = {};
67325      }
67326      else if (scopedSlots._normalized) {
67327          // fast path 1: child component re-render only, parent did not change
67328          return scopedSlots._normalized;
67329      }
67330      else if (isStable &&
67331          prevScopedSlots &&
67332          prevScopedSlots !== emptyObject &&
67333          key === prevScopedSlots.$key &&
67334          !hasNormalSlots &&
67335          !prevScopedSlots.$hasNormal) {
67336          // fast path 2: stable scoped slots w/ no normal slots to proxy,
67337          // only need to normalize once
67338          return prevScopedSlots;
67339      }
67340      else {
67341          res = {};
67342          for (var key_1 in scopedSlots) {
67343              if (scopedSlots[key_1] && key_1[0] !== '$') {
67344                  res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]);
67345              }
67346          }
67347      }
67348      // expose normal slots on scopedSlots
67349      for (var key_2 in normalSlots) {
67350          if (!(key_2 in res)) {
67351              res[key_2] = proxyNormalSlot(normalSlots, key_2);
67352          }
67353      }
67354      // avoriaz seems to mock a non-extensible $scopedSlots object
67355      // and when that is passed down this would cause an error
67356      if (scopedSlots && Object.isExtensible(scopedSlots)) {
67357          scopedSlots._normalized = res;
67358      }
67359      def(res, '$stable', isStable);
67360      def(res, '$key', key);
67361      def(res, '$hasNormal', hasNormalSlots);
67362      return res;
67363  }
67364  function normalizeScopedSlot(vm, normalSlots, key, fn) {
67365      var normalized = function () {
67366          var cur = currentInstance;
67367          setCurrentInstance(vm);
67368          var res = arguments.length ? fn.apply(null, arguments) : fn({});
67369          res =
67370              res && typeof res === 'object' && !isArray(res)
67371                  ? [res] // single vnode
67372                  : normalizeChildren(res);
67373          var vnode = res && res[0];
67374          setCurrentInstance(cur);
67375          return res &&
67376              (!vnode ||
67377                  (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391
67378              ? undefined
67379              : res;
67380      };
67381      // this is a slot using the new v-slot syntax without scope. although it is
67382      // compiled as a scoped slot, render fn users would expect it to be present
67383      // on this.$slots because the usage is semantically a normal slot.
67384      if (fn.proxy) {
67385          Object.defineProperty(normalSlots, key, {
67386              get: normalized,
67387              enumerable: true,
67388              configurable: true
67389          });
67390      }
67391      return normalized;
67392  }
67393  function proxyNormalSlot(slots, key) {
67394      return function () { return slots[key]; };
67395  }
67396
67397  function initSetup(vm) {
67398      var options = vm.$options;
67399      var setup = options.setup;
67400      if (setup) {
67401          var ctx = (vm._setupContext = createSetupContext(vm));
67402          setCurrentInstance(vm);
67403          pushTarget();
67404          var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, "setup");
67405          popTarget();
67406          setCurrentInstance();
67407          if (isFunction(setupResult)) {
67408              // render function
67409              // @ts-ignore
67410              options.render = setupResult;
67411          }
67412          else if (isObject(setupResult)) {
67413              // bindings
67414              if (setupResult instanceof VNode) {
67415                  warn$2("setup() should not return VNodes directly - " +
67416                      "return a render function instead.");
67417              }
67418              vm._setupState = setupResult;
67419              // __sfc indicates compiled bindings from <script setup>
67420              if (!setupResult.__sfc) {
67421                  for (var key in setupResult) {
67422                      if (!isReserved(key)) {
67423                          proxyWithRefUnwrap(vm, setupResult, key);
67424                      }
67425                      else {
67426                          warn$2("Avoid using variables that start with _ or $ in setup().");
67427                      }
67428                  }
67429              }
67430              else {
67431                  // exposed for compiled render fn
67432                  var proxy = (vm._setupProxy = {});
67433                  for (var key in setupResult) {
67434                      if (key !== '__sfc') {
67435                          proxyWithRefUnwrap(proxy, setupResult, key);
67436                      }
67437                  }
67438              }
67439          }
67440          else if (setupResult !== undefined) {
67441              warn$2("setup() should return an object. Received: ".concat(setupResult === null ? 'null' : typeof setupResult));
67442          }
67443      }
67444  }
67445  function createSetupContext(vm) {
67446      var exposeCalled = false;
67447      return {
67448          get attrs() {
67449              if (!vm._attrsProxy) {
67450                  var proxy = (vm._attrsProxy = {});
67451                  def(proxy, '_v_attr_proxy', true);
67452                  syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');
67453              }
67454              return vm._attrsProxy;
67455          },
67456          get listeners() {
67457              if (!vm._listenersProxy) {
67458                  var proxy = (vm._listenersProxy = {});
67459                  syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');
67460              }
67461              return vm._listenersProxy;
67462          },
67463          get slots() {
67464              return initSlotsProxy(vm);
67465          },
67466          emit: bind$1(vm.$emit, vm),
67467          expose: function (exposed) {
67468              {
67469                  if (exposeCalled) {
67470                      warn$2("expose() should be called only once per setup().", vm);
67471                  }
67472                  exposeCalled = true;
67473              }
67474              if (exposed) {
67475                  Object.keys(exposed).forEach(function (key) {
67476                      return proxyWithRefUnwrap(vm, exposed, key);
67477                  });
67478              }
67479          }
67480      };
67481  }
67482  function syncSetupProxy(to, from, prev, instance, type) {
67483      var changed = false;
67484      for (var key in from) {
67485          if (!(key in to)) {
67486              changed = true;
67487              defineProxyAttr(to, key, instance, type);
67488          }
67489          else if (from[key] !== prev[key]) {
67490              changed = true;
67491          }
67492      }
67493      for (var key in to) {
67494          if (!(key in from)) {
67495              changed = true;
67496              delete to[key];
67497          }
67498      }
67499      return changed;
67500  }
67501  function defineProxyAttr(proxy, key, instance, type) {
67502      Object.defineProperty(proxy, key, {
67503          enumerable: true,
67504          configurable: true,
67505          get: function () {
67506              return instance[type][key];
67507          }
67508      });
67509  }
67510  function initSlotsProxy(vm) {
67511      if (!vm._slotsProxy) {
67512          syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots);
67513      }
67514      return vm._slotsProxy;
67515  }
67516  function syncSetupSlots(to, from) {
67517      for (var key in from) {
67518          to[key] = from[key];
67519      }
67520      for (var key in to) {
67521          if (!(key in from)) {
67522              delete to[key];
67523          }
67524      }
67525  }
67526  /**
67527   * @internal use manual type def because public setup context type relies on
67528   * legacy VNode types
67529   */
67530  function useSlots() {
67531      return getContext().slots;
67532  }
67533  /**
67534   * @internal use manual type def because public setup context type relies on
67535   * legacy VNode types
67536   */
67537  function useAttrs() {
67538      return getContext().attrs;
67539  }
67540  /**
67541   * Vue 2 only
67542   * @internal use manual type def because public setup context type relies on
67543   * legacy VNode types
67544   */
67545  function useListeners() {
67546      return getContext().listeners;
67547  }
67548  function getContext() {
67549      if (!currentInstance) {
67550          warn$2("useContext() called without active instance.");
67551      }
67552      var vm = currentInstance;
67553      return vm._setupContext || (vm._setupContext = createSetupContext(vm));
67554  }
67555  /**
67556   * Runtime helper for merging default declarations. Imported by compiled code
67557   * only.
67558   * @internal
67559   */
67560  function mergeDefaults(raw, defaults) {
67561      var props = isArray(raw)
67562          ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {})
67563          : raw;
67564      for (var key in defaults) {
67565          var opt = props[key];
67566          if (opt) {
67567              if (isArray(opt) || isFunction(opt)) {
67568                  props[key] = { type: opt, default: defaults[key] };
67569              }
67570              else {
67571                  opt.default = defaults[key];
67572              }
67573          }
67574          else if (opt === null) {
67575              props[key] = { default: defaults[key] };
67576          }
67577          else {
67578              warn$2("props default key \"".concat(key, "\" has no corresponding declaration."));
67579          }
67580      }
67581      return props;
67582  }
67583
67584  function initRender(vm) {
67585      vm._vnode = null; // the root of the child tree
67586      vm._staticTrees = null; // v-once cached trees
67587      var options = vm.$options;
67588      var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree
67589      var renderContext = parentVnode && parentVnode.context;
67590      vm.$slots = resolveSlots(options._renderChildren, renderContext);
67591      vm.$scopedSlots = parentVnode
67592          ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots)
67593          : emptyObject;
67594      // bind the createElement fn to this instance
67595      // so that we get proper render context inside it.
67596      // args order: tag, data, children, normalizationType, alwaysNormalize
67597      // internal version is used by render functions compiled from templates
67598      // @ts-expect-error
67599      vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); };
67600      // normalization is always applied for the public version, used in
67601      // user-written render functions.
67602      // @ts-expect-error
67603      vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); };
67604      // $attrs & $listeners are exposed for easier HOC creation.
67605      // they need to be reactive so that HOCs using them are always updated
67606      var parentData = parentVnode && parentVnode.data;
67607      /* istanbul ignore else */
67608      {
67609          defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () {
67610              !isUpdatingChildComponent && warn$2("$attrs is readonly.", vm);
67611          }, true);
67612          defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {
67613              !isUpdatingChildComponent && warn$2("$listeners is readonly.", vm);
67614          }, true);
67615      }
67616  }
67617  var currentRenderingInstance = null;
67618  function renderMixin(Vue) {
67619      // install runtime convenience helpers
67620      installRenderHelpers(Vue.prototype);
67621      Vue.prototype.$nextTick = function (fn) {
67622          return nextTick(fn, this);
67623      };
67624      Vue.prototype._render = function () {
67625          var vm = this;
67626          var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode;
67627          if (_parentVnode && vm._isMounted) {
67628              vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);
67629              if (vm._slotsProxy) {
67630                  syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);
67631              }
67632          }
67633          // set parent vnode. this allows render functions to have access
67634          // to the data on the placeholder node.
67635          vm.$vnode = _parentVnode;
67636          // render self
67637          var prevInst = currentInstance;
67638          var prevRenderInst = currentRenderingInstance;
67639          var vnode;
67640          try {
67641              setCurrentInstance(vm);
67642              currentRenderingInstance = vm;
67643              vnode = render.call(vm._renderProxy, vm.$createElement);
67644          }
67645          catch (e) {
67646              handleError(e, vm, "render");
67647              // return error render result,
67648              // or previous vnode to prevent render error causing blank component
67649              /* istanbul ignore else */
67650              if (vm.$options.renderError) {
67651                  try {
67652                      vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
67653                  }
67654                  catch (e) {
67655                      handleError(e, vm, "renderError");
67656                      vnode = vm._vnode;
67657                  }
67658              }
67659              else {
67660                  vnode = vm._vnode;
67661              }
67662          }
67663          finally {
67664              currentRenderingInstance = prevRenderInst;
67665              setCurrentInstance(prevInst);
67666          }
67667          // if the returned array contains only a single node, allow it
67668          if (isArray(vnode) && vnode.length === 1) {
67669              vnode = vnode[0];
67670          }
67671          // return empty vnode in case the render function errored out
67672          if (!(vnode instanceof VNode)) {
67673              if (isArray(vnode)) {
67674                  warn$2('Multiple root nodes returned from render function. Render function ' +
67675                      'should return a single root node.', vm);
67676              }
67677              vnode = createEmptyVNode();
67678          }
67679          // set parent
67680          vnode.parent = _parentVnode;
67681          return vnode;
67682      };
67683  }
67684
67685  function ensureCtor(comp, base) {
67686      if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {
67687          comp = comp.default;
67688      }
67689      return isObject(comp) ? base.extend(comp) : comp;
67690  }
67691  function createAsyncPlaceholder(factory, data, context, children, tag) {
67692      var node = createEmptyVNode();
67693      node.asyncFactory = factory;
67694      node.asyncMeta = { data: data, context: context, children: children, tag: tag };
67695      return node;
67696  }
67697  function resolveAsyncComponent(factory, baseCtor) {
67698      if (isTrue(factory.error) && isDef(factory.errorComp)) {
67699          return factory.errorComp;
67700      }
67701      if (isDef(factory.resolved)) {
67702          return factory.resolved;
67703      }
67704      var owner = currentRenderingInstance;
67705      if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
67706          // already pending
67707          factory.owners.push(owner);
67708      }
67709      if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
67710          return factory.loadingComp;
67711      }
67712      if (owner && !isDef(factory.owners)) {
67713          var owners_1 = (factory.owners = [owner]);
67714          var sync_1 = true;
67715          var timerLoading_1 = null;
67716          var timerTimeout_1 = null;
67717          owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); });
67718          var forceRender_1 = function (renderCompleted) {
67719              for (var i = 0, l = owners_1.length; i < l; i++) {
67720                  owners_1[i].$forceUpdate();
67721              }
67722              if (renderCompleted) {
67723                  owners_1.length = 0;
67724                  if (timerLoading_1 !== null) {
67725                      clearTimeout(timerLoading_1);
67726                      timerLoading_1 = null;
67727                  }
67728                  if (timerTimeout_1 !== null) {
67729                      clearTimeout(timerTimeout_1);
67730                      timerTimeout_1 = null;
67731                  }
67732              }
67733          };
67734          var resolve = once(function (res) {
67735              // cache resolved
67736              factory.resolved = ensureCtor(res, baseCtor);
67737              // invoke callbacks only if this is not a synchronous resolve
67738              // (async resolves are shimmed as synchronous during SSR)
67739              if (!sync_1) {
67740                  forceRender_1(true);
67741              }
67742              else {
67743                  owners_1.length = 0;
67744              }
67745          });
67746          var reject_1 = once(function (reason) {
67747              warn$2("Failed to resolve async component: ".concat(String(factory)) +
67748                      (reason ? "\nReason: ".concat(reason) : ''));
67749              if (isDef(factory.errorComp)) {
67750                  factory.error = true;
67751                  forceRender_1(true);
67752              }
67753          });
67754          var res_1 = factory(resolve, reject_1);
67755          if (isObject(res_1)) {
67756              if (isPromise(res_1)) {
67757                  // () => Promise
67758                  if (isUndef(factory.resolved)) {
67759                      res_1.then(resolve, reject_1);
67760                  }
67761              }
67762              else if (isPromise(res_1.component)) {
67763                  res_1.component.then(resolve, reject_1);
67764                  if (isDef(res_1.error)) {
67765                      factory.errorComp = ensureCtor(res_1.error, baseCtor);
67766                  }
67767                  if (isDef(res_1.loading)) {
67768                      factory.loadingComp = ensureCtor(res_1.loading, baseCtor);
67769                      if (res_1.delay === 0) {
67770                          factory.loading = true;
67771                      }
67772                      else {
67773                          // @ts-expect-error NodeJS timeout type
67774                          timerLoading_1 = setTimeout(function () {
67775                              timerLoading_1 = null;
67776                              if (isUndef(factory.resolved) && isUndef(factory.error)) {
67777                                  factory.loading = true;
67778                                  forceRender_1(false);
67779                              }
67780                          }, res_1.delay || 200);
67781                      }
67782                  }
67783                  if (isDef(res_1.timeout)) {
67784                      // @ts-expect-error NodeJS timeout type
67785                      timerTimeout_1 = setTimeout(function () {
67786                          timerTimeout_1 = null;
67787                          if (isUndef(factory.resolved)) {
67788                              reject_1("timeout (".concat(res_1.timeout, "ms)") );
67789                          }
67790                      }, res_1.timeout);
67791                  }
67792              }
67793          }
67794          sync_1 = false;
67795          // return in case resolved synchronously
67796          return factory.loading ? factory.loadingComp : factory.resolved;
67797      }
67798  }
67799
67800  function getFirstComponentChild(children) {
67801      if (isArray(children)) {
67802          for (var i = 0; i < children.length; i++) {
67803              var c = children[i];
67804              if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
67805                  return c;
67806              }
67807          }
67808      }
67809  }
67810
67811  function initEvents(vm) {
67812      vm._events = Object.create(null);
67813      vm._hasHookEvent = false;
67814      // init parent attached events
67815      var listeners = vm.$options._parentListeners;
67816      if (listeners) {
67817          updateComponentListeners(vm, listeners);
67818      }
67819  }
67820  var target$1;
67821  function add$1(event, fn) {
67822      target$1.$on(event, fn);
67823  }
67824  function remove$1(event, fn) {
67825      target$1.$off(event, fn);
67826  }
67827  function createOnceHandler$1(event, fn) {
67828      var _target = target$1;
67829      return function onceHandler() {
67830          var res = fn.apply(null, arguments);
67831          if (res !== null) {
67832              _target.$off(event, onceHandler);
67833          }
67834      };
67835  }
67836  function updateComponentListeners(vm, listeners, oldListeners) {
67837      target$1 = vm;
67838      updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);
67839      target$1 = undefined;
67840  }
67841  function eventsMixin(Vue) {
67842      var hookRE = /^hook:/;
67843      Vue.prototype.$on = function (event, fn) {
67844          var vm = this;
67845          if (isArray(event)) {
67846              for (var i = 0, l = event.length; i < l; i++) {
67847                  vm.$on(event[i], fn);
67848              }
67849          }
67850          else {
67851              (vm._events[event] || (vm._events[event] = [])).push(fn);
67852              // optimize hook:event cost by using a boolean flag marked at registration
67853              // instead of a hash lookup
67854              if (hookRE.test(event)) {
67855                  vm._hasHookEvent = true;
67856              }
67857          }
67858          return vm;
67859      };
67860      Vue.prototype.$once = function (event, fn) {
67861          var vm = this;
67862          function on() {
67863              vm.$off(event, on);
67864              fn.apply(vm, arguments);
67865          }
67866          on.fn = fn;
67867          vm.$on(event, on);
67868          return vm;
67869      };
67870      Vue.prototype.$off = function (event, fn) {
67871          var vm = this;
67872          // all
67873          if (!arguments.length) {
67874              vm._events = Object.create(null);
67875              return vm;
67876          }
67877          // array of events
67878          if (isArray(event)) {
67879              for (var i_1 = 0, l = event.length; i_1 < l; i_1++) {
67880                  vm.$off(event[i_1], fn);
67881              }
67882              return vm;
67883          }
67884          // specific event
67885          var cbs = vm._events[event];
67886          if (!cbs) {
67887              return vm;
67888          }
67889          if (!fn) {
67890              vm._events[event] = null;
67891              return vm;
67892          }
67893          // specific handler
67894          var cb;
67895          var i = cbs.length;
67896          while (i--) {
67897              cb = cbs[i];
67898              if (cb === fn || cb.fn === fn) {
67899                  cbs.splice(i, 1);
67900                  break;
67901              }
67902          }
67903          return vm;
67904      };
67905      Vue.prototype.$emit = function (event) {
67906          var vm = this;
67907          {
67908              var lowerCaseEvent = event.toLowerCase();
67909              if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
67910                  tip("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") +
67911                      "".concat(formatComponentName(vm), " but the handler is registered for \"").concat(event, "\". ") +
67912                      "Note that HTML attributes are case-insensitive and you cannot use " +
67913                      "v-on to listen to camelCase events when using in-DOM templates. " +
67914                      "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\"."));
67915              }
67916          }
67917          var cbs = vm._events[event];
67918          if (cbs) {
67919              cbs = cbs.length > 1 ? toArray(cbs) : cbs;
67920              var args = toArray(arguments, 1);
67921              var info = "event handler for \"".concat(event, "\"");
67922              for (var i = 0, l = cbs.length; i < l; i++) {
67923                  invokeWithErrorHandling(cbs[i], vm, args, vm, info);
67924              }
67925          }
67926          return vm;
67927      };
67928  }
67929
67930  var activeEffectScope;
67931  var EffectScope = /** @class */ (function () {
67932      function EffectScope(detached) {
67933          if (detached === void 0) { detached = false; }
67934          this.detached = detached;
67935          /**
67936           * @internal
67937           */
67938          this.active = true;
67939          /**
67940           * @internal
67941           */
67942          this.effects = [];
67943          /**
67944           * @internal
67945           */
67946          this.cleanups = [];
67947          this.parent = activeEffectScope;
67948          if (!detached && activeEffectScope) {
67949              this.index =
67950                  (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
67951          }
67952      }
67953      EffectScope.prototype.run = function (fn) {
67954          if (this.active) {
67955              var currentEffectScope = activeEffectScope;
67956              try {
67957                  activeEffectScope = this;
67958                  return fn();
67959              }
67960              finally {
67961                  activeEffectScope = currentEffectScope;
67962              }
67963          }
67964          else {
67965              warn$2("cannot run an inactive effect scope.");
67966          }
67967      };
67968      /**
67969       * This should only be called on non-detached scopes
67970       * @internal
67971       */
67972      EffectScope.prototype.on = function () {
67973          activeEffectScope = this;
67974      };
67975      /**
67976       * This should only be called on non-detached scopes
67977       * @internal
67978       */
67979      EffectScope.prototype.off = function () {
67980          activeEffectScope = this.parent;
67981      };
67982      EffectScope.prototype.stop = function (fromParent) {
67983          if (this.active) {
67984              var i = void 0, l = void 0;
67985              for (i = 0, l = this.effects.length; i < l; i++) {
67986                  this.effects[i].teardown();
67987              }
67988              for (i = 0, l = this.cleanups.length; i < l; i++) {
67989                  this.cleanups[i]();
67990              }
67991              if (this.scopes) {
67992                  for (i = 0, l = this.scopes.length; i < l; i++) {
67993                      this.scopes[i].stop(true);
67994                  }
67995              }
67996              // nested scope, dereference from parent to avoid memory leaks
67997              if (!this.detached && this.parent && !fromParent) {
67998                  // optimized O(1) removal
67999                  var last = this.parent.scopes.pop();
68000                  if (last && last !== this) {
68001                      this.parent.scopes[this.index] = last;
68002                      last.index = this.index;
68003                  }
68004              }
68005              this.parent = undefined;
68006              this.active = false;
68007          }
68008      };
68009      return EffectScope;
68010  }());
68011  function effectScope(detached) {
68012      return new EffectScope(detached);
68013  }
68014  /**
68015   * @internal
68016   */
68017  function recordEffectScope(effect, scope) {
68018      if (scope === void 0) { scope = activeEffectScope; }
68019      if (scope && scope.active) {
68020          scope.effects.push(effect);
68021      }
68022  }
68023  function getCurrentScope() {
68024      return activeEffectScope;
68025  }
68026  function onScopeDispose(fn) {
68027      if (activeEffectScope) {
68028          activeEffectScope.cleanups.push(fn);
68029      }
68030      else {
68031          warn$2("onScopeDispose() is called when there is no active effect scope" +
68032              " to be associated with.");
68033      }
68034  }
68035
68036  var activeInstance = null;
68037  var isUpdatingChildComponent = false;
68038  function setActiveInstance(vm) {
68039      var prevActiveInstance = activeInstance;
68040      activeInstance = vm;
68041      return function () {
68042          activeInstance = prevActiveInstance;
68043      };
68044  }
68045  function initLifecycle(vm) {
68046      var options = vm.$options;
68047      // locate first non-abstract parent
68048      var parent = options.parent;
68049      if (parent && !options.abstract) {
68050          while (parent.$options.abstract && parent.$parent) {
68051              parent = parent.$parent;
68052          }
68053          parent.$children.push(vm);
68054      }
68055      vm.$parent = parent;
68056      vm.$root = parent ? parent.$root : vm;
68057      vm.$children = [];
68058      vm.$refs = {};
68059      vm._provided = parent ? parent._provided : Object.create(null);
68060      vm._watcher = null;
68061      vm._inactive = null;
68062      vm._directInactive = false;
68063      vm._isMounted = false;
68064      vm._isDestroyed = false;
68065      vm._isBeingDestroyed = false;
68066  }
68067  function lifecycleMixin(Vue) {
68068      Vue.prototype._update = function (vnode, hydrating) {
68069          var vm = this;
68070          var prevEl = vm.$el;
68071          var prevVnode = vm._vnode;
68072          var restoreActiveInstance = setActiveInstance(vm);
68073          vm._vnode = vnode;
68074          // Vue.prototype.__patch__ is injected in entry points
68075          // based on the rendering backend used.
68076          if (!prevVnode) {
68077              // initial render
68078              vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
68079          }
68080          else {
68081              // updates
68082              vm.$el = vm.__patch__(prevVnode, vnode);
68083          }
68084          restoreActiveInstance();
68085          // update __vue__ reference
68086          if (prevEl) {
68087              prevEl.__vue__ = null;
68088          }
68089          if (vm.$el) {
68090              vm.$el.__vue__ = vm;
68091          }
68092          // if parent is an HOC, update its $el as well
68093          var wrapper = vm;
68094          while (wrapper &&
68095              wrapper.$vnode &&
68096              wrapper.$parent &&
68097              wrapper.$vnode === wrapper.$parent._vnode) {
68098              wrapper.$parent.$el = wrapper.$el;
68099              wrapper = wrapper.$parent;
68100          }
68101          // updated hook is called by the scheduler to ensure that children are
68102          // updated in a parent's updated hook.
68103      };
68104      Vue.prototype.$forceUpdate = function () {
68105          var vm = this;
68106          if (vm._watcher) {
68107              vm._watcher.update();
68108          }
68109      };
68110      Vue.prototype.$destroy = function () {
68111          var vm = this;
68112          if (vm._isBeingDestroyed) {
68113              return;
68114          }
68115          callHook$1(vm, 'beforeDestroy');
68116          vm._isBeingDestroyed = true;
68117          // remove self from parent
68118          var parent = vm.$parent;
68119          if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
68120              remove$2(parent.$children, vm);
68121          }
68122          // teardown scope. this includes both the render watcher and other
68123          // watchers created
68124          vm._scope.stop();
68125          // remove reference from data ob
68126          // frozen object may not have observer.
68127          if (vm._data.__ob__) {
68128              vm._data.__ob__.vmCount--;
68129          }
68130          // call the last hook...
68131          vm._isDestroyed = true;
68132          // invoke destroy hooks on current rendered tree
68133          vm.__patch__(vm._vnode, null);
68134          // fire destroyed hook
68135          callHook$1(vm, 'destroyed');
68136          // turn off all instance listeners.
68137          vm.$off();
68138          // remove __vue__ reference
68139          if (vm.$el) {
68140              vm.$el.__vue__ = null;
68141          }
68142          // release circular reference (#6759)
68143          if (vm.$vnode) {
68144              vm.$vnode.parent = null;
68145          }
68146      };
68147  }
68148  function mountComponent(vm, el, hydrating) {
68149      vm.$el = el;
68150      if (!vm.$options.render) {
68151          // @ts-expect-error invalid type
68152          vm.$options.render = createEmptyVNode;
68153          {
68154              /* istanbul ignore if */
68155              if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
68156                  vm.$options.el ||
68157                  el) {
68158                  warn$2('You are using the runtime-only build of Vue where the template ' +
68159                      'compiler is not available. Either pre-compile the templates into ' +
68160                      'render functions, or use the compiler-included build.', vm);
68161              }
68162              else {
68163                  warn$2('Failed to mount component: template or render function not defined.', vm);
68164              }
68165          }
68166      }
68167      callHook$1(vm, 'beforeMount');
68168      var updateComponent;
68169      /* istanbul ignore if */
68170      if (config.performance && mark) {
68171          updateComponent = function () {
68172              var name = vm._name;
68173              var id = vm._uid;
68174              var startTag = "vue-perf-start:".concat(id);
68175              var endTag = "vue-perf-end:".concat(id);
68176              mark(startTag);
68177              var vnode = vm._render();
68178              mark(endTag);
68179              measure("vue ".concat(name, " render"), startTag, endTag);
68180              mark(startTag);
68181              vm._update(vnode, hydrating);
68182              mark(endTag);
68183              measure("vue ".concat(name, " patch"), startTag, endTag);
68184          };
68185      }
68186      else {
68187          updateComponent = function () {
68188              vm._update(vm._render(), hydrating);
68189          };
68190      }
68191      var watcherOptions = {
68192          before: function () {
68193              if (vm._isMounted && !vm._isDestroyed) {
68194                  callHook$1(vm, 'beforeUpdate');
68195              }
68196          }
68197      };
68198      {
68199          watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); };
68200          watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); };
68201      }
68202      // we set this to vm._watcher inside the watcher's constructor
68203      // since the watcher's initial patch may call $forceUpdate (e.g. inside child
68204      // component's mounted hook), which relies on vm._watcher being already defined
68205      new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);
68206      hydrating = false;
68207      // flush buffer for flush: "pre" watchers queued in setup()
68208      var preWatchers = vm._preWatchers;
68209      if (preWatchers) {
68210          for (var i = 0; i < preWatchers.length; i++) {
68211              preWatchers[i].run();
68212          }
68213      }
68214      // manually mounted instance, call mounted on self
68215      // mounted is called for render-created child components in its inserted hook
68216      if (vm.$vnode == null) {
68217          vm._isMounted = true;
68218          callHook$1(vm, 'mounted');
68219      }
68220      return vm;
68221  }
68222  function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
68223      {
68224          isUpdatingChildComponent = true;
68225      }
68226      // determine whether component has slot children
68227      // we need to do this before overwriting $options._renderChildren.
68228      // check if there are dynamic scopedSlots (hand-written or compiled but with
68229      // dynamic slot names). Static scoped slots compiled from template has the
68230      // "$stable" marker.
68231      var newScopedSlots = parentVnode.data.scopedSlots;
68232      var oldScopedSlots = vm.$scopedSlots;
68233      var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||
68234          (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
68235          (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
68236          (!newScopedSlots && vm.$scopedSlots.$key));
68237      // Any static slot children from the parent may have changed during parent's
68238      // update. Dynamic scoped slots may also have changed. In such cases, a forced
68239      // update is necessary to ensure correctness.
68240      var needsForceUpdate = !!(renderChildren || // has new static slots
68241          vm.$options._renderChildren || // has old static slots
68242          hasDynamicScopedSlot);
68243      var prevVNode = vm.$vnode;
68244      vm.$options._parentVnode = parentVnode;
68245      vm.$vnode = parentVnode; // update vm's placeholder node without re-render
68246      if (vm._vnode) {
68247          // update child tree's parent
68248          vm._vnode.parent = parentVnode;
68249      }
68250      vm.$options._renderChildren = renderChildren;
68251      // update $attrs and $listeners hash
68252      // these are also reactive so they may trigger child update if the child
68253      // used them during render
68254      var attrs = parentVnode.data.attrs || emptyObject;
68255      if (vm._attrsProxy) {
68256          // force update if attrs are accessed and has changed since it may be
68257          // passed to a child component.
68258          if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {
68259              needsForceUpdate = true;
68260          }
68261      }
68262      vm.$attrs = attrs;
68263      // update listeners
68264      listeners = listeners || emptyObject;
68265      var prevListeners = vm.$options._parentListeners;
68266      if (vm._listenersProxy) {
68267          syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');
68268      }
68269      vm.$listeners = vm.$options._parentListeners = listeners;
68270      updateComponentListeners(vm, listeners, prevListeners);
68271      // update props
68272      if (propsData && vm.$options.props) {
68273          toggleObserving(false);
68274          var props = vm._props;
68275          var propKeys = vm.$options._propKeys || [];
68276          for (var i = 0; i < propKeys.length; i++) {
68277              var key = propKeys[i];
68278              var propOptions = vm.$options.props; // wtf flow?
68279              props[key] = validateProp(key, propOptions, propsData, vm);
68280          }
68281          toggleObserving(true);
68282          // keep a copy of raw propsData
68283          vm.$options.propsData = propsData;
68284      }
68285      // resolve slots + force update if has children
68286      if (needsForceUpdate) {
68287          vm.$slots = resolveSlots(renderChildren, parentVnode.context);
68288          vm.$forceUpdate();
68289      }
68290      {
68291          isUpdatingChildComponent = false;
68292      }
68293  }
68294  function isInInactiveTree(vm) {
68295      while (vm && (vm = vm.$parent)) {
68296          if (vm._inactive)
68297              return true;
68298      }
68299      return false;
68300  }
68301  function activateChildComponent(vm, direct) {
68302      if (direct) {
68303          vm._directInactive = false;
68304          if (isInInactiveTree(vm)) {
68305              return;
68306          }
68307      }
68308      else if (vm._directInactive) {
68309          return;
68310      }
68311      if (vm._inactive || vm._inactive === null) {
68312          vm._inactive = false;
68313          for (var i = 0; i < vm.$children.length; i++) {
68314              activateChildComponent(vm.$children[i]);
68315          }
68316          callHook$1(vm, 'activated');
68317      }
68318  }
68319  function deactivateChildComponent(vm, direct) {
68320      if (direct) {
68321          vm._directInactive = true;
68322          if (isInInactiveTree(vm)) {
68323              return;
68324          }
68325      }
68326      if (!vm._inactive) {
68327          vm._inactive = true;
68328          for (var i = 0; i < vm.$children.length; i++) {
68329              deactivateChildComponent(vm.$children[i]);
68330          }
68331          callHook$1(vm, 'deactivated');
68332      }
68333  }
68334  function callHook$1(vm, hook, args, setContext) {
68335      if (setContext === void 0) { setContext = true; }
68336      // #7573 disable dep collection when invoking lifecycle hooks
68337      pushTarget();
68338      var prevInst = currentInstance;
68339      var prevScope = getCurrentScope();
68340      setContext && setCurrentInstance(vm);
68341      var handlers = vm.$options[hook];
68342      var info = "".concat(hook, " hook");
68343      if (handlers) {
68344          for (var i = 0, j = handlers.length; i < j; i++) {
68345              invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);
68346          }
68347      }
68348      if (vm._hasHookEvent) {
68349          vm.$emit('hook:' + hook);
68350      }
68351      if (setContext) {
68352          setCurrentInstance(prevInst);
68353          prevScope && prevScope.on();
68354      }
68355      popTarget();
68356  }
68357
68358  var MAX_UPDATE_COUNT = 100;
68359  var queue = [];
68360  var activatedChildren = [];
68361  var has = {};
68362  var circular = {};
68363  var waiting = false;
68364  var flushing = false;
68365  var index$1 = 0;
68366  /**
68367   * Reset the scheduler's state.
68368   */
68369  function resetSchedulerState() {
68370      index$1 = queue.length = activatedChildren.length = 0;
68371      has = {};
68372      {
68373          circular = {};
68374      }
68375      waiting = flushing = false;
68376  }
68377  // Async edge case #6566 requires saving the timestamp when event listeners are
68378  // attached. However, calling performance.now() has a perf overhead especially
68379  // if the page has thousands of event listeners. Instead, we take a timestamp
68380  // every time the scheduler flushes and use that for all event listeners
68381  // attached during that flush.
68382  var currentFlushTimestamp = 0;
68383  // Async edge case fix requires storing an event listener's attach timestamp.
68384  var getNow = Date.now;
68385  // Determine what event timestamp the browser is using. Annoyingly, the
68386  // timestamp can either be hi-res (relative to page load) or low-res
68387  // (relative to UNIX epoch), so in order to compare time we have to use the
68388  // same timestamp type when saving the flush timestamp.
68389  // All IE versions use low-res event timestamps, and have problematic clock
68390  // implementations (#9632)
68391  if (inBrowser && !isIE) {
68392      var performance_1 = window.performance;
68393      if (performance_1 &&
68394          typeof performance_1.now === 'function' &&
68395          getNow() > document.createEvent('Event').timeStamp) {
68396          // if the event timestamp, although evaluated AFTER the Date.now(), is
68397          // smaller than it, it means the event is using a hi-res timestamp,
68398          // and we need to use the hi-res version for event listener timestamps as
68399          // well.
68400          getNow = function () { return performance_1.now(); };
68401      }
68402  }
68403  var sortCompareFn = function (a, b) {
68404      if (a.post) {
68405          if (!b.post)
68406              return 1;
68407      }
68408      else if (b.post) {
68409          return -1;
68410      }
68411      return a.id - b.id;
68412  };
68413  /**
68414   * Flush both queues and run the watchers.
68415   */
68416  function flushSchedulerQueue() {
68417      currentFlushTimestamp = getNow();
68418      flushing = true;
68419      var watcher, id;
68420      // Sort queue before flush.
68421      // This ensures that:
68422      // 1. Components are updated from parent to child. (because parent is always
68423      //    created before the child)
68424      // 2. A component's user watchers are run before its render watcher (because
68425      //    user watchers are created before the render watcher)
68426      // 3. If a component is destroyed during a parent component's watcher run,
68427      //    its watchers can be skipped.
68428      queue.sort(sortCompareFn);
68429      // do not cache length because more watchers might be pushed
68430      // as we run existing watchers
68431      for (index$1 = 0; index$1 < queue.length; index$1++) {
68432          watcher = queue[index$1];
68433          if (watcher.before) {
68434              watcher.before();
68435          }
68436          id = watcher.id;
68437          has[id] = null;
68438          watcher.run();
68439          // in dev build, check and stop circular updates.
68440          if (has[id] != null) {
68441              circular[id] = (circular[id] || 0) + 1;
68442              if (circular[id] > MAX_UPDATE_COUNT) {
68443                  warn$2('You may have an infinite update loop ' +
68444                      (watcher.user
68445                          ? "in watcher with expression \"".concat(watcher.expression, "\"")
68446                          : "in a component render function."), watcher.vm);
68447                  break;
68448              }
68449          }
68450      }
68451      // keep copies of post queues before resetting state
68452      var activatedQueue = activatedChildren.slice();
68453      var updatedQueue = queue.slice();
68454      resetSchedulerState();
68455      // call component updated and activated hooks
68456      callActivatedHooks(activatedQueue);
68457      callUpdatedHooks(updatedQueue);
68458      cleanupDeps();
68459      // devtool hook
68460      /* istanbul ignore if */
68461      if (devtools && config.devtools) {
68462          devtools.emit('flush');
68463      }
68464  }
68465  function callUpdatedHooks(queue) {
68466      var i = queue.length;
68467      while (i--) {
68468          var watcher = queue[i];
68469          var vm = watcher.vm;
68470          if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
68471              callHook$1(vm, 'updated');
68472          }
68473      }
68474  }
68475  /**
68476   * Queue a kept-alive component that was activated during patch.
68477   * The queue will be processed after the entire tree has been patched.
68478   */
68479  function queueActivatedComponent(vm) {
68480      // setting _inactive to false here so that a render function can
68481      // rely on checking whether it's in an inactive tree (e.g. router-view)
68482      vm._inactive = false;
68483      activatedChildren.push(vm);
68484  }
68485  function callActivatedHooks(queue) {
68486      for (var i = 0; i < queue.length; i++) {
68487          queue[i]._inactive = true;
68488          activateChildComponent(queue[i], true /* true */);
68489      }
68490  }
68491  /**
68492   * Push a watcher into the watcher queue.
68493   * Jobs with duplicate IDs will be skipped unless it's
68494   * pushed when the queue is being flushed.
68495   */
68496  function queueWatcher(watcher) {
68497      var id = watcher.id;
68498      if (has[id] != null) {
68499          return;
68500      }
68501      if (watcher === Dep.target && watcher.noRecurse) {
68502          return;
68503      }
68504      has[id] = true;
68505      if (!flushing) {
68506          queue.push(watcher);
68507      }
68508      else {
68509          // if already flushing, splice the watcher based on its id
68510          // if already past its id, it will be run next immediately.
68511          var i = queue.length - 1;
68512          while (i > index$1 && queue[i].id > watcher.id) {
68513              i--;
68514          }
68515          queue.splice(i + 1, 0, watcher);
68516      }
68517      // queue the flush
68518      if (!waiting) {
68519          waiting = true;
68520          if (!config.async) {
68521              flushSchedulerQueue();
68522              return;
68523          }
68524          nextTick(flushSchedulerQueue);
68525      }
68526  }
68527
68528  var WATCHER = "watcher";
68529  var WATCHER_CB = "".concat(WATCHER, " callback");
68530  var WATCHER_GETTER = "".concat(WATCHER, " getter");
68531  var WATCHER_CLEANUP = "".concat(WATCHER, " cleanup");
68532  // Simple effect.
68533  function watchEffect(effect, options) {
68534      return doWatch(effect, null, options);
68535  }
68536  function watchPostEffect(effect, options) {
68537      return doWatch(effect, null, (__assign(__assign({}, options), { flush: 'post' }) ));
68538  }
68539  function watchSyncEffect(effect, options) {
68540      return doWatch(effect, null, (__assign(__assign({}, options), { flush: 'sync' }) ));
68541  }
68542  // initial value for watchers to trigger on undefined initial values
68543  var INITIAL_WATCHER_VALUE = {};
68544  // implementation
68545  function watch(source, cb, options) {
68546      if (typeof cb !== 'function') {
68547          warn$2("`watch(fn, options?)` signature has been moved to a separate API. " +
68548              "Use `watchEffect(fn, options?)` instead. `watch` now only " +
68549              "supports `watch(source, cb, options?) signature.");
68550      }
68551      return doWatch(source, cb, options);
68552  }
68553  function doWatch(source, cb, _a) {
68554      var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger;
68555      if (!cb) {
68556          if (immediate !== undefined) {
68557              warn$2("watch() \"immediate\" option is only respected when using the " +
68558                  "watch(source, callback, options?) signature.");
68559          }
68560          if (deep !== undefined) {
68561              warn$2("watch() \"deep\" option is only respected when using the " +
68562                  "watch(source, callback, options?) signature.");
68563          }
68564      }
68565      var warnInvalidSource = function (s) {
68566          warn$2("Invalid watch source: ".concat(s, ". A watch source can only be a getter/effect ") +
68567              "function, a ref, a reactive object, or an array of these types.");
68568      };
68569      var instance = currentInstance;
68570      var call = function (fn, type, args) {
68571          if (args === void 0) { args = null; }
68572          var res = invokeWithErrorHandling(fn, null, args, instance, type);
68573          if (deep && res && res.__ob__)
68574              res.__ob__.dep.depend();
68575          return res;
68576      };
68577      var getter;
68578      var forceTrigger = false;
68579      var isMultiSource = false;
68580      if (isRef(source)) {
68581          getter = function () { return source.value; };
68582          forceTrigger = isShallow(source);
68583      }
68584      else if (isReactive(source)) {
68585          getter = function () {
68586              source.__ob__.dep.depend();
68587              return source;
68588          };
68589          deep = true;
68590      }
68591      else if (isArray(source)) {
68592          isMultiSource = true;
68593          forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); });
68594          getter = function () {
68595              return source.map(function (s) {
68596                  if (isRef(s)) {
68597                      return s.value;
68598                  }
68599                  else if (isReactive(s)) {
68600                      s.__ob__.dep.depend();
68601                      return traverse(s);
68602                  }
68603                  else if (isFunction(s)) {
68604                      return call(s, WATCHER_GETTER);
68605                  }
68606                  else {
68607                      warnInvalidSource(s);
68608                  }
68609              });
68610          };
68611      }
68612      else if (isFunction(source)) {
68613          if (cb) {
68614              // getter with cb
68615              getter = function () { return call(source, WATCHER_GETTER); };
68616          }
68617          else {
68618              // no cb -> simple effect
68619              getter = function () {
68620                  if (instance && instance._isDestroyed) {
68621                      return;
68622                  }
68623                  if (cleanup) {
68624                      cleanup();
68625                  }
68626                  return call(source, WATCHER, [onCleanup]);
68627              };
68628          }
68629      }
68630      else {
68631          getter = noop;
68632          warnInvalidSource(source);
68633      }
68634      if (cb && deep) {
68635          var baseGetter_1 = getter;
68636          getter = function () { return traverse(baseGetter_1()); };
68637      }
68638      var cleanup;
68639      var onCleanup = function (fn) {
68640          cleanup = watcher.onStop = function () {
68641              call(fn, WATCHER_CLEANUP);
68642          };
68643      };
68644      // in SSR there is no need to setup an actual effect, and it should be noop
68645      // unless it's eager
68646      if (isServerRendering()) {
68647          // we will also not call the invalidate callback (+ runner is not set up)
68648          onCleanup = noop;
68649          if (!cb) {
68650              getter();
68651          }
68652          else if (immediate) {
68653              call(cb, WATCHER_CB, [
68654                  getter(),
68655                  isMultiSource ? [] : undefined,
68656                  onCleanup
68657              ]);
68658          }
68659          return noop;
68660      }
68661      var watcher = new Watcher(currentInstance, getter, noop, {
68662          lazy: true
68663      });
68664      watcher.noRecurse = !cb;
68665      var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
68666      // overwrite default run
68667      watcher.run = function () {
68668          if (!watcher.active) {
68669              return;
68670          }
68671          if (cb) {
68672              // watch(source, cb)
68673              var newValue = watcher.get();
68674              if (deep ||
68675                  forceTrigger ||
68676                  (isMultiSource
68677                      ? newValue.some(function (v, i) {
68678                          return hasChanged(v, oldValue[i]);
68679                      })
68680                      : hasChanged(newValue, oldValue))) {
68681                  // cleanup before running cb again
68682                  if (cleanup) {
68683                      cleanup();
68684                  }
68685                  call(cb, WATCHER_CB, [
68686                      newValue,
68687                      // pass undefined as the old value when it's changed for the first time
68688                      oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,
68689                      onCleanup
68690                  ]);
68691                  oldValue = newValue;
68692              }
68693          }
68694          else {
68695              // watchEffect
68696              watcher.get();
68697          }
68698      };
68699      if (flush === 'sync') {
68700          watcher.update = watcher.run;
68701      }
68702      else if (flush === 'post') {
68703          watcher.post = true;
68704          watcher.update = function () { return queueWatcher(watcher); };
68705      }
68706      else {
68707          // pre
68708          watcher.update = function () {
68709              if (instance && instance === currentInstance && !instance._isMounted) {
68710                  // pre-watcher triggered before
68711                  var buffer = instance._preWatchers || (instance._preWatchers = []);
68712                  if (buffer.indexOf(watcher) < 0)
68713                      buffer.push(watcher);
68714              }
68715              else {
68716                  queueWatcher(watcher);
68717              }
68718          };
68719      }
68720      {
68721          watcher.onTrack = onTrack;
68722          watcher.onTrigger = onTrigger;
68723      }
68724      // initial run
68725      if (cb) {
68726          if (immediate) {
68727              watcher.run();
68728          }
68729          else {
68730              oldValue = watcher.get();
68731          }
68732      }
68733      else if (flush === 'post' && instance) {
68734          instance.$once('hook:mounted', function () { return watcher.get(); });
68735      }
68736      else {
68737          watcher.get();
68738      }
68739      return function () {
68740          watcher.teardown();
68741      };
68742  }
68743
68744  function provide(key, value) {
68745      if (!currentInstance) {
68746          {
68747              warn$2("provide() can only be used inside setup().");
68748          }
68749      }
68750      else {
68751          // TS doesn't allow symbol as index type
68752          resolveProvided(currentInstance)[key] = value;
68753      }
68754  }
68755  function resolveProvided(vm) {
68756      // by default an instance inherits its parent's provides object
68757      // but when it needs to provide values of its own, it creates its
68758      // own provides object using parent provides object as prototype.
68759      // this way in `inject` we can simply look up injections from direct
68760      // parent and let the prototype chain do the work.
68761      var existing = vm._provided;
68762      var parentProvides = vm.$parent && vm.$parent._provided;
68763      if (parentProvides === existing) {
68764          return (vm._provided = Object.create(parentProvides));
68765      }
68766      else {
68767          return existing;
68768      }
68769  }
68770  function inject(key, defaultValue, treatDefaultAsFactory) {
68771      if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }
68772      // fallback to `currentRenderingInstance` so that this can be called in
68773      // a functional component
68774      var instance = currentInstance;
68775      if (instance) {
68776          // #2400
68777          // to support `app.use` plugins,
68778          // fallback to appContext's `provides` if the instance is at root
68779          var provides = instance.$parent && instance.$parent._provided;
68780          if (provides && key in provides) {
68781              // TS doesn't allow symbol as index type
68782              return provides[key];
68783          }
68784          else if (arguments.length > 1) {
68785              return treatDefaultAsFactory && isFunction(defaultValue)
68786                  ? defaultValue.call(instance)
68787                  : defaultValue;
68788          }
68789          else {
68790              warn$2("injection \"".concat(String(key), "\" not found."));
68791          }
68792      }
68793      else {
68794          warn$2("inject() can only be used inside setup() or functional components.");
68795      }
68796  }
68797
68798  /**
68799   * @internal this function needs manual public type declaration because it relies
68800   * on previously manually authored types from Vue 2
68801   */
68802  function h(type, props, children) {
68803      if (!currentInstance) {
68804          warn$2("globally imported h() can only be invoked when there is an active " +
68805                  "component instance, e.g. synchronously in a component's render or setup function.");
68806      }
68807      return createElement$1(currentInstance, type, props, children, 2, true);
68808  }
68809
68810  function handleError(err, vm, info) {
68811      // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
68812      // See: https://github.com/vuejs/vuex/issues/1505
68813      pushTarget();
68814      try {
68815          if (vm) {
68816              var cur = vm;
68817              while ((cur = cur.$parent)) {
68818                  var hooks = cur.$options.errorCaptured;
68819                  if (hooks) {
68820                      for (var i = 0; i < hooks.length; i++) {
68821                          try {
68822                              var capture = hooks[i].call(cur, err, vm, info) === false;
68823                              if (capture)
68824                                  return;
68825                          }
68826                          catch (e) {
68827                              globalHandleError(e, cur, 'errorCaptured hook');
68828                          }
68829                      }
68830                  }
68831              }
68832          }
68833          globalHandleError(err, vm, info);
68834      }
68835      finally {
68836          popTarget();
68837      }
68838  }
68839  function invokeWithErrorHandling(handler, context, args, vm, info) {
68840      var res;
68841      try {
68842          res = args ? handler.apply(context, args) : handler.call(context);
68843          if (res && !res._isVue && isPromise(res) && !res._handled) {
68844              res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
68845              res._handled = true;
68846          }
68847      }
68848      catch (e) {
68849          handleError(e, vm, info);
68850      }
68851      return res;
68852  }
68853  function globalHandleError(err, vm, info) {
68854      if (config.errorHandler) {
68855          try {
68856              return config.errorHandler.call(null, err, vm, info);
68857          }
68858          catch (e) {
68859              // if the user intentionally throws the original error in the handler,
68860              // do not log it twice
68861              if (e !== err) {
68862                  logError(e, null, 'config.errorHandler');
68863              }
68864          }
68865      }
68866      logError(err, vm, info);
68867  }
68868  function logError(err, vm, info) {
68869      {
68870          warn$2("Error in ".concat(info, ": \"").concat(err.toString(), "\""), vm);
68871      }
68872      /* istanbul ignore else */
68873      if (inBrowser && typeof console !== 'undefined') {
68874          console.error(err);
68875      }
68876      else {
68877          throw err;
68878      }
68879  }
68880
68881  /* globals MutationObserver */
68882  var isUsingMicroTask = false;
68883  var callbacks = [];
68884  var pending = false;
68885  function flushCallbacks() {
68886      pending = false;
68887      var copies = callbacks.slice(0);
68888      callbacks.length = 0;
68889      for (var i = 0; i < copies.length; i++) {
68890          copies[i]();
68891      }
68892  }
68893  // Here we have async deferring wrappers using microtasks.
68894  // In 2.5 we used (macro) tasks (in combination with microtasks).
68895  // However, it has subtle problems when state is changed right before repaint
68896  // (e.g. #6813, out-in transitions).
68897  // Also, using (macro) tasks in event handler would cause some weird behaviors
68898  // that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
68899  // So we now use microtasks everywhere, again.
68900  // A major drawback of this tradeoff is that there are some scenarios
68901  // where microtasks have too high a priority and fire in between supposedly
68902  // sequential events (e.g. #4521, #6690, which have workarounds)
68903  // or even between bubbling of the same event (#6566).
68904  var timerFunc;
68905  // The nextTick behavior leverages the microtask queue, which can be accessed
68906  // via either native Promise.then or MutationObserver.
68907  // MutationObserver has wider support, however it is seriously bugged in
68908  // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
68909  // completely stops working after triggering a few times... so, if native
68910  // Promise is available, we will use it:
68911  /* istanbul ignore next, $flow-disable-line */
68912  if (typeof Promise !== 'undefined' && isNative(Promise)) {
68913      var p_1 = Promise.resolve();
68914      timerFunc = function () {
68915          p_1.then(flushCallbacks);
68916          // In problematic UIWebViews, Promise.then doesn't completely break, but
68917          // it can get stuck in a weird state where callbacks are pushed into the
68918          // microtask queue but the queue isn't being flushed, until the browser
68919          // needs to do some other work, e.g. handle a timer. Therefore we can
68920          // "force" the microtask queue to be flushed by adding an empty timer.
68921          if (isIOS)
68922              setTimeout(noop);
68923      };
68924      isUsingMicroTask = true;
68925  }
68926  else if (!isIE &&
68927      typeof MutationObserver !== 'undefined' &&
68928      (isNative(MutationObserver) ||
68929          // PhantomJS and iOS 7.x
68930          MutationObserver.toString() === '[object MutationObserverConstructor]')) {
68931      // Use MutationObserver where native Promise is not available,
68932      // e.g. PhantomJS, iOS7, Android 4.4
68933      // (#6466 MutationObserver is unreliable in IE11)
68934      var counter_1 = 1;
68935      var observer = new MutationObserver(flushCallbacks);
68936      var textNode_1 = document.createTextNode(String(counter_1));
68937      observer.observe(textNode_1, {
68938          characterData: true
68939      });
68940      timerFunc = function () {
68941          counter_1 = (counter_1 + 1) % 2;
68942          textNode_1.data = String(counter_1);
68943      };
68944      isUsingMicroTask = true;
68945  }
68946  else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
68947      // Fallback to setImmediate.
68948      // Technically it leverages the (macro) task queue,
68949      // but it is still a better choice than setTimeout.
68950      timerFunc = function () {
68951          setImmediate(flushCallbacks);
68952      };
68953  }
68954  else {
68955      // Fallback to setTimeout.
68956      timerFunc = function () {
68957          setTimeout(flushCallbacks, 0);
68958      };
68959  }
68960  /**
68961   * @internal
68962   */
68963  function nextTick(cb, ctx) {
68964      var _resolve;
68965      callbacks.push(function () {
68966          if (cb) {
68967              try {
68968                  cb.call(ctx);
68969              }
68970              catch (e) {
68971                  handleError(e, ctx, 'nextTick');
68972              }
68973          }
68974          else if (_resolve) {
68975              _resolve(ctx);
68976          }
68977      });
68978      if (!pending) {
68979          pending = true;
68980          timerFunc();
68981      }
68982      // $flow-disable-line
68983      if (!cb && typeof Promise !== 'undefined') {
68984          return new Promise(function (resolve) {
68985              _resolve = resolve;
68986          });
68987      }
68988  }
68989
68990  function useCssModule(name) {
68991      /* istanbul ignore else */
68992      {
68993          {
68994              warn$2("useCssModule() is not supported in the global build.");
68995          }
68996          return emptyObject;
68997      }
68998  }
68999
69000  /**
69001   * Runtime helper for SFC's CSS variable injection feature.
69002   * @private
69003   */
69004  function useCssVars(getter) {
69005      if (!inBrowser && !false)
69006          return;
69007      var instance = currentInstance;
69008      if (!instance) {
69009          warn$2("useCssVars is called without current active component instance.");
69010          return;
69011      }
69012      watchPostEffect(function () {
69013          var el = instance.$el;
69014          var vars = getter(instance, instance._setupProxy);
69015          if (el && el.nodeType === 1) {
69016              var style = el.style;
69017              for (var key in vars) {
69018                  style.setProperty("--".concat(key), vars[key]);
69019              }
69020          }
69021      });
69022  }
69023
69024  /**
69025   * v3-compatible async component API.
69026   * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts
69027   * because it relies on existing manual types
69028   */
69029  function defineAsyncComponent(source) {
69030      if (isFunction(source)) {
69031          source = { loader: source };
69032      }
69033      var loader = source.loader, loadingComponent = source.loadingComponent, errorComponent = source.errorComponent, _a = source.delay, delay = _a === void 0 ? 200 : _a, timeout = source.timeout, // undefined = never times out
69034      _b = source.suspensible, // undefined = never times out
69035      suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true
69036      userOnError = source.onError;
69037      if (suspensible) {
69038          warn$2("The suspensible option for async components is not supported in Vue2. It is ignored.");
69039      }
69040      var pendingRequest = null;
69041      var retries = 0;
69042      var retry = function () {
69043          retries++;
69044          pendingRequest = null;
69045          return load();
69046      };
69047      var load = function () {
69048          var thisRequest;
69049          return (pendingRequest ||
69050              (thisRequest = pendingRequest =
69051                  loader()
69052                      .catch(function (err) {
69053                      err = err instanceof Error ? err : new Error(String(err));
69054                      if (userOnError) {
69055                          return new Promise(function (resolve, reject) {
69056                              var userRetry = function () { return resolve(retry()); };
69057                              var userFail = function () { return reject(err); };
69058                              userOnError(err, userRetry, userFail, retries + 1);
69059                          });
69060                      }
69061                      else {
69062                          throw err;
69063                      }
69064                  })
69065                      .then(function (comp) {
69066                      if (thisRequest !== pendingRequest && pendingRequest) {
69067                          return pendingRequest;
69068                      }
69069                      if (!comp) {
69070                          warn$2("Async component loader resolved to undefined. " +
69071                              "If you are using retry(), make sure to return its return value.");
69072                      }
69073                      // interop module default
69074                      if (comp &&
69075                          (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {
69076                          comp = comp.default;
69077                      }
69078                      if (comp && !isObject(comp) && !isFunction(comp)) {
69079                          throw new Error("Invalid async component load result: ".concat(comp));
69080                      }
69081                      return comp;
69082                  })));
69083      };
69084      return function () {
69085          var component = load();
69086          return {
69087              component: component,
69088              delay: delay,
69089              timeout: timeout,
69090              error: errorComponent,
69091              loading: loadingComponent
69092          };
69093      };
69094  }
69095
69096  function createLifeCycle(hookName) {
69097      return function (fn, target) {
69098          if (target === void 0) { target = currentInstance; }
69099          if (!target) {
69100              warn$2("".concat(formatName(hookName), " is called when there is no active component instance to be ") +
69101                      "associated with. " +
69102                      "Lifecycle injection APIs can only be used during execution of setup().");
69103              return;
69104          }
69105          return injectHook(target, hookName, fn);
69106      };
69107  }
69108  function formatName(name) {
69109      if (name === 'beforeDestroy') {
69110          name = 'beforeUnmount';
69111      }
69112      else if (name === 'destroyed') {
69113          name = 'unmounted';
69114      }
69115      return "on".concat(name[0].toUpperCase() + name.slice(1));
69116  }
69117  function injectHook(instance, hookName, fn) {
69118      var options = instance.$options;
69119      options[hookName] = mergeLifecycleHook(options[hookName], fn);
69120  }
69121  var onBeforeMount = createLifeCycle('beforeMount');
69122  var onMounted = createLifeCycle('mounted');
69123  var onBeforeUpdate = createLifeCycle('beforeUpdate');
69124  var onUpdated = createLifeCycle('updated');
69125  var onBeforeUnmount = createLifeCycle('beforeDestroy');
69126  var onUnmounted = createLifeCycle('destroyed');
69127  var onActivated = createLifeCycle('activated');
69128  var onDeactivated = createLifeCycle('deactivated');
69129  var onServerPrefetch = createLifeCycle('serverPrefetch');
69130  var onRenderTracked = createLifeCycle('renderTracked');
69131  var onRenderTriggered = createLifeCycle('renderTriggered');
69132  var injectErrorCapturedHook = createLifeCycle('errorCaptured');
69133  function onErrorCaptured(hook, target) {
69134      if (target === void 0) { target = currentInstance; }
69135      injectErrorCapturedHook(hook, target);
69136  }
69137
69138  /**
69139   * Note: also update dist/vue.runtime.mjs when adding new exports to this file.
69140   */
69141  var version = '2.7.16';
69142  /**
69143   * @internal type is manually declared in <root>/types/v3-define-component.d.ts
69144   */
69145  function defineComponent(options) {
69146      return options;
69147  }
69148
69149  var vca = /*#__PURE__*/Object.freeze({
69150    __proto__: null,
69151    version: version,
69152    defineComponent: defineComponent,
69153    ref: ref$1,
69154    shallowRef: shallowRef,
69155    isRef: isRef,
69156    toRef: toRef,
69157    toRefs: toRefs,
69158    unref: unref,
69159    proxyRefs: proxyRefs,
69160    customRef: customRef,
69161    triggerRef: triggerRef,
69162    reactive: reactive,
69163    isReactive: isReactive,
69164    isReadonly: isReadonly,
69165    isShallow: isShallow,
69166    isProxy: isProxy,
69167    shallowReactive: shallowReactive,
69168    markRaw: markRaw,
69169    toRaw: toRaw,
69170    readonly: readonly,
69171    shallowReadonly: shallowReadonly,
69172    computed: computed,
69173    watch: watch,
69174    watchEffect: watchEffect,
69175    watchPostEffect: watchPostEffect,
69176    watchSyncEffect: watchSyncEffect,
69177    EffectScope: EffectScope,
69178    effectScope: effectScope,
69179    onScopeDispose: onScopeDispose,
69180    getCurrentScope: getCurrentScope,
69181    provide: provide,
69182    inject: inject,
69183    h: h,
69184    getCurrentInstance: getCurrentInstance,
69185    useSlots: useSlots,
69186    useAttrs: useAttrs,
69187    useListeners: useListeners,
69188    mergeDefaults: mergeDefaults,
69189    nextTick: nextTick,
69190    set: set,
69191    del: del,
69192    useCssModule: useCssModule,
69193    useCssVars: useCssVars,
69194    defineAsyncComponent: defineAsyncComponent,
69195    onBeforeMount: onBeforeMount,
69196    onMounted: onMounted,
69197    onBeforeUpdate: onBeforeUpdate,
69198    onUpdated: onUpdated,
69199    onBeforeUnmount: onBeforeUnmount,
69200    onUnmounted: onUnmounted,
69201    onActivated: onActivated,
69202    onDeactivated: onDeactivated,
69203    onServerPrefetch: onServerPrefetch,
69204    onRenderTracked: onRenderTracked,
69205    onRenderTriggered: onRenderTriggered,
69206    onErrorCaptured: onErrorCaptured
69207  });
69208
69209  var seenObjects = new _Set();
69210  /**
69211   * Recursively traverse an object to evoke all converted
69212   * getters, so that every nested property inside the object
69213   * is collected as a "deep" dependency.
69214   */
69215  function traverse(val) {
69216      _traverse(val, seenObjects);
69217      seenObjects.clear();
69218      return val;
69219  }
69220  function _traverse(val, seen) {
69221      var i, keys;
69222      var isA = isArray(val);
69223      if ((!isA && !isObject(val)) ||
69224          val.__v_skip /* ReactiveFlags.SKIP */ ||
69225          Object.isFrozen(val) ||
69226          val instanceof VNode) {
69227          return;
69228      }
69229      if (val.__ob__) {
69230          var depId = val.__ob__.dep.id;
69231          if (seen.has(depId)) {
69232              return;
69233          }
69234          seen.add(depId);
69235      }
69236      if (isA) {
69237          i = val.length;
69238          while (i--)
69239              _traverse(val[i], seen);
69240      }
69241      else if (isRef(val)) {
69242          _traverse(val.value, seen);
69243      }
69244      else {
69245          keys = Object.keys(val);
69246          i = keys.length;
69247          while (i--)
69248              _traverse(val[keys[i]], seen);
69249      }
69250  }
69251
69252  var uid$1 = 0;
69253  /**
69254   * A watcher parses an expression, collects dependencies,
69255   * and fires callback when the expression value changes.
69256   * This is used for both the $watch() api and directives.
69257   * @internal
69258   */
69259  var Watcher = /** @class */ (function () {
69260      function Watcher(vm, expOrFn, cb, options, isRenderWatcher) {
69261          recordEffectScope(this, 
69262          // if the active effect scope is manually created (not a component scope),
69263          // prioritize it
69264          activeEffectScope && !activeEffectScope._vm
69265              ? activeEffectScope
69266              : vm
69267                  ? vm._scope
69268                  : undefined);
69269          if ((this.vm = vm) && isRenderWatcher) {
69270              vm._watcher = this;
69271          }
69272          // options
69273          if (options) {
69274              this.deep = !!options.deep;
69275              this.user = !!options.user;
69276              this.lazy = !!options.lazy;
69277              this.sync = !!options.sync;
69278              this.before = options.before;
69279              {
69280                  this.onTrack = options.onTrack;
69281                  this.onTrigger = options.onTrigger;
69282              }
69283          }
69284          else {
69285              this.deep = this.user = this.lazy = this.sync = false;
69286          }
69287          this.cb = cb;
69288          this.id = ++uid$1; // uid for batching
69289          this.active = true;
69290          this.post = false;
69291          this.dirty = this.lazy; // for lazy watchers
69292          this.deps = [];
69293          this.newDeps = [];
69294          this.depIds = new _Set();
69295          this.newDepIds = new _Set();
69296          this.expression = expOrFn.toString() ;
69297          // parse expression for getter
69298          if (isFunction(expOrFn)) {
69299              this.getter = expOrFn;
69300          }
69301          else {
69302              this.getter = parsePath(expOrFn);
69303              if (!this.getter) {
69304                  this.getter = noop;
69305                  warn$2("Failed watching path: \"".concat(expOrFn, "\" ") +
69306                          'Watcher only accepts simple dot-delimited paths. ' +
69307                          'For full control, use a function instead.', vm);
69308              }
69309          }
69310          this.value = this.lazy ? undefined : this.get();
69311      }
69312      /**
69313       * Evaluate the getter, and re-collect dependencies.
69314       */
69315      Watcher.prototype.get = function () {
69316          pushTarget(this);
69317          var value;
69318          var vm = this.vm;
69319          try {
69320              value = this.getter.call(vm, vm);
69321          }
69322          catch (e) {
69323              if (this.user) {
69324                  handleError(e, vm, "getter for watcher \"".concat(this.expression, "\""));
69325              }
69326              else {
69327                  throw e;
69328              }
69329          }
69330          finally {
69331              // "touch" every property so they are all tracked as
69332              // dependencies for deep watching
69333              if (this.deep) {
69334                  traverse(value);
69335              }
69336              popTarget();
69337              this.cleanupDeps();
69338          }
69339          return value;
69340      };
69341      /**
69342       * Add a dependency to this directive.
69343       */
69344      Watcher.prototype.addDep = function (dep) {
69345          var id = dep.id;
69346          if (!this.newDepIds.has(id)) {
69347              this.newDepIds.add(id);
69348              this.newDeps.push(dep);
69349              if (!this.depIds.has(id)) {
69350                  dep.addSub(this);
69351              }
69352          }
69353      };
69354      /**
69355       * Clean up for dependency collection.
69356       */
69357      Watcher.prototype.cleanupDeps = function () {
69358          var i = this.deps.length;
69359          while (i--) {
69360              var dep = this.deps[i];
69361              if (!this.newDepIds.has(dep.id)) {
69362                  dep.removeSub(this);
69363              }
69364          }
69365          var tmp = this.depIds;
69366          this.depIds = this.newDepIds;
69367          this.newDepIds = tmp;
69368          this.newDepIds.clear();
69369          tmp = this.deps;
69370          this.deps = this.newDeps;
69371          this.newDeps = tmp;
69372          this.newDeps.length = 0;
69373      };
69374      /**
69375       * Subscriber interface.
69376       * Will be called when a dependency changes.
69377       */
69378      Watcher.prototype.update = function () {
69379          /* istanbul ignore else */
69380          if (this.lazy) {
69381              this.dirty = true;
69382          }
69383          else if (this.sync) {
69384              this.run();
69385          }
69386          else {
69387              queueWatcher(this);
69388          }
69389      };
69390      /**
69391       * Scheduler job interface.
69392       * Will be called by the scheduler.
69393       */
69394      Watcher.prototype.run = function () {
69395          if (this.active) {
69396              var value = this.get();
69397              if (value !== this.value ||
69398                  // Deep watchers and watchers on Object/Arrays should fire even
69399                  // when the value is the same, because the value may
69400                  // have mutated.
69401                  isObject(value) ||
69402                  this.deep) {
69403                  // set new value
69404                  var oldValue = this.value;
69405                  this.value = value;
69406                  if (this.user) {
69407                      var info = "callback for watcher \"".concat(this.expression, "\"");
69408                      invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);
69409                  }
69410                  else {
69411                      this.cb.call(this.vm, value, oldValue);
69412                  }
69413              }
69414          }
69415      };
69416      /**
69417       * Evaluate the value of the watcher.
69418       * This only gets called for lazy watchers.
69419       */
69420      Watcher.prototype.evaluate = function () {
69421          this.value = this.get();
69422          this.dirty = false;
69423      };
69424      /**
69425       * Depend on all deps collected by this watcher.
69426       */
69427      Watcher.prototype.depend = function () {
69428          var i = this.deps.length;
69429          while (i--) {
69430              this.deps[i].depend();
69431          }
69432      };
69433      /**
69434       * Remove self from all dependencies' subscriber list.
69435       */
69436      Watcher.prototype.teardown = function () {
69437          if (this.vm && !this.vm._isBeingDestroyed) {
69438              remove$2(this.vm._scope.effects, this);
69439          }
69440          if (this.active) {
69441              var i = this.deps.length;
69442              while (i--) {
69443                  this.deps[i].removeSub(this);
69444              }
69445              this.active = false;
69446              if (this.onStop) {
69447                  this.onStop();
69448              }
69449          }
69450      };
69451      return Watcher;
69452  }());
69453
69454  var sharedPropertyDefinition = {
69455      enumerable: true,
69456      configurable: true,
69457      get: noop,
69458      set: noop
69459  };
69460  function proxy(target, sourceKey, key) {
69461      sharedPropertyDefinition.get = function proxyGetter() {
69462          return this[sourceKey][key];
69463      };
69464      sharedPropertyDefinition.set = function proxySetter(val) {
69465          this[sourceKey][key] = val;
69466      };
69467      Object.defineProperty(target, key, sharedPropertyDefinition);
69468  }
69469  function initState(vm) {
69470      var opts = vm.$options;
69471      if (opts.props)
69472          initProps$1(vm, opts.props);
69473      // Composition API
69474      initSetup(vm);
69475      if (opts.methods)
69476          initMethods(vm, opts.methods);
69477      if (opts.data) {
69478          initData(vm);
69479      }
69480      else {
69481          var ob = observe((vm._data = {}));
69482          ob && ob.vmCount++;
69483      }
69484      if (opts.computed)
69485          initComputed$1(vm, opts.computed);
69486      if (opts.watch && opts.watch !== nativeWatch) {
69487          initWatch(vm, opts.watch);
69488      }
69489  }
69490  function initProps$1(vm, propsOptions) {
69491      var propsData = vm.$options.propsData || {};
69492      var props = (vm._props = shallowReactive({}));
69493      // cache prop keys so that future props updates can iterate using Array
69494      // instead of dynamic object key enumeration.
69495      var keys = (vm.$options._propKeys = []);
69496      var isRoot = !vm.$parent;
69497      // root instance props should be converted
69498      if (!isRoot) {
69499          toggleObserving(false);
69500      }
69501      var _loop_1 = function (key) {
69502          keys.push(key);
69503          var value = validateProp(key, propsOptions, propsData, vm);
69504          /* istanbul ignore else */
69505          {
69506              var hyphenatedKey = hyphenate(key);
69507              if (isReservedAttribute(hyphenatedKey) ||
69508                  config.isReservedAttr(hyphenatedKey)) {
69509                  warn$2("\"".concat(hyphenatedKey, "\" is a reserved attribute and cannot be used as component prop."), vm);
69510              }
69511              defineReactive(props, key, value, function () {
69512                  if (!isRoot && !isUpdatingChildComponent) {
69513                      warn$2("Avoid mutating a prop directly since the value will be " +
69514                          "overwritten whenever the parent component re-renders. " +
69515                          "Instead, use a data or computed property based on the prop's " +
69516                          "value. Prop being mutated: \"".concat(key, "\""), vm);
69517                  }
69518              }, true /* shallow */);
69519          }
69520          // static props are already proxied on the component's prototype
69521          // during Vue.extend(). We only need to proxy props defined at
69522          // instantiation here.
69523          if (!(key in vm)) {
69524              proxy(vm, "_props", key);
69525          }
69526      };
69527      for (var key in propsOptions) {
69528          _loop_1(key);
69529      }
69530      toggleObserving(true);
69531  }
69532  function initData(vm) {
69533      var data = vm.$options.data;
69534      data = vm._data = isFunction(data) ? getData(data, vm) : data || {};
69535      if (!isPlainObject(data)) {
69536          data = {};
69537          warn$2('data functions should return an object:\n' +
69538                  'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);
69539      }
69540      // proxy data on instance
69541      var keys = Object.keys(data);
69542      var props = vm.$options.props;
69543      var methods = vm.$options.methods;
69544      var i = keys.length;
69545      while (i--) {
69546          var key = keys[i];
69547          {
69548              if (methods && hasOwn(methods, key)) {
69549                  warn$2("Method \"".concat(key, "\" has already been defined as a data property."), vm);
69550              }
69551          }
69552          if (props && hasOwn(props, key)) {
69553              warn$2("The data property \"".concat(key, "\" is already declared as a prop. ") +
69554                      "Use prop default value instead.", vm);
69555          }
69556          else if (!isReserved(key)) {
69557              proxy(vm, "_data", key);
69558          }
69559      }
69560      // observe data
69561      var ob = observe(data);
69562      ob && ob.vmCount++;
69563  }
69564  function getData(data, vm) {
69565      // #7573 disable dep collection when invoking data getters
69566      pushTarget();
69567      try {
69568          return data.call(vm, vm);
69569      }
69570      catch (e) {
69571          handleError(e, vm, "data()");
69572          return {};
69573      }
69574      finally {
69575          popTarget();
69576      }
69577  }
69578  var computedWatcherOptions = { lazy: true };
69579  function initComputed$1(vm, computed) {
69580      // $flow-disable-line
69581      var watchers = (vm._computedWatchers = Object.create(null));
69582      // computed properties are just getters during SSR
69583      var isSSR = isServerRendering();
69584      for (var key in computed) {
69585          var userDef = computed[key];
69586          var getter = isFunction(userDef) ? userDef : userDef.get;
69587          if (getter == null) {
69588              warn$2("Getter is missing for computed property \"".concat(key, "\"."), vm);
69589          }
69590          if (!isSSR) {
69591              // create internal watcher for the computed property.
69592              watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);
69593          }
69594          // component-defined computed properties are already defined on the
69595          // component prototype. We only need to define computed properties defined
69596          // at instantiation here.
69597          if (!(key in vm)) {
69598              defineComputed(vm, key, userDef);
69599          }
69600          else {
69601              if (key in vm.$data) {
69602                  warn$2("The computed property \"".concat(key, "\" is already defined in data."), vm);
69603              }
69604              else if (vm.$options.props && key in vm.$options.props) {
69605                  warn$2("The computed property \"".concat(key, "\" is already defined as a prop."), vm);
69606              }
69607              else if (vm.$options.methods && key in vm.$options.methods) {
69608                  warn$2("The computed property \"".concat(key, "\" is already defined as a method."), vm);
69609              }
69610          }
69611      }
69612  }
69613  function defineComputed(target, key, userDef) {
69614      var shouldCache = !isServerRendering();
69615      if (isFunction(userDef)) {
69616          sharedPropertyDefinition.get = shouldCache
69617              ? createComputedGetter(key)
69618              : createGetterInvoker(userDef);
69619          sharedPropertyDefinition.set = noop;
69620      }
69621      else {
69622          sharedPropertyDefinition.get = userDef.get
69623              ? shouldCache && userDef.cache !== false
69624                  ? createComputedGetter(key)
69625                  : createGetterInvoker(userDef.get)
69626              : noop;
69627          sharedPropertyDefinition.set = userDef.set || noop;
69628      }
69629      if (sharedPropertyDefinition.set === noop) {
69630          sharedPropertyDefinition.set = function () {
69631              warn$2("Computed property \"".concat(key, "\" was assigned to but it has no setter."), this);
69632          };
69633      }
69634      Object.defineProperty(target, key, sharedPropertyDefinition);
69635  }
69636  function createComputedGetter(key) {
69637      return function computedGetter() {
69638          var watcher = this._computedWatchers && this._computedWatchers[key];
69639          if (watcher) {
69640              if (watcher.dirty) {
69641                  watcher.evaluate();
69642              }
69643              if (Dep.target) {
69644                  if (Dep.target.onTrack) {
69645                      Dep.target.onTrack({
69646                          effect: Dep.target,
69647                          target: this,
69648                          type: "get" /* TrackOpTypes.GET */,
69649                          key: key
69650                      });
69651                  }
69652                  watcher.depend();
69653              }
69654              return watcher.value;
69655          }
69656      };
69657  }
69658  function createGetterInvoker(fn) {
69659      return function computedGetter() {
69660          return fn.call(this, this);
69661      };
69662  }
69663  function initMethods(vm, methods) {
69664      var props = vm.$options.props;
69665      for (var key in methods) {
69666          {
69667              if (typeof methods[key] !== 'function') {
69668                  warn$2("Method \"".concat(key, "\" has type \"").concat(typeof methods[key], "\" in the component definition. ") +
69669                      "Did you reference the function correctly?", vm);
69670              }
69671              if (props && hasOwn(props, key)) {
69672                  warn$2("Method \"".concat(key, "\" has already been defined as a prop."), vm);
69673              }
69674              if (key in vm && isReserved(key)) {
69675                  warn$2("Method \"".concat(key, "\" conflicts with an existing Vue instance method. ") +
69676                      "Avoid defining component methods that start with _ or $.");
69677              }
69678          }
69679          vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm);
69680      }
69681  }
69682  function initWatch(vm, watch) {
69683      for (var key in watch) {
69684          var handler = watch[key];
69685          if (isArray(handler)) {
69686              for (var i = 0; i < handler.length; i++) {
69687                  createWatcher(vm, key, handler[i]);
69688              }
69689          }
69690          else {
69691              createWatcher(vm, key, handler);
69692          }
69693      }
69694  }
69695  function createWatcher(vm, expOrFn, handler, options) {
69696      if (isPlainObject(handler)) {
69697          options = handler;
69698          handler = handler.handler;
69699      }
69700      if (typeof handler === 'string') {
69701          handler = vm[handler];
69702      }
69703      return vm.$watch(expOrFn, handler, options);
69704  }
69705  function stateMixin(Vue) {
69706      // flow somehow has problems with directly declared definition object
69707      // when using Object.defineProperty, so we have to procedurally build up
69708      // the object here.
69709      var dataDef = {};
69710      dataDef.get = function () {
69711          return this._data;
69712      };
69713      var propsDef = {};
69714      propsDef.get = function () {
69715          return this._props;
69716      };
69717      {
69718          dataDef.set = function () {
69719              warn$2('Avoid replacing instance root $data. ' +
69720                  'Use nested data properties instead.', this);
69721          };
69722          propsDef.set = function () {
69723              warn$2("$props is readonly.", this);
69724          };
69725      }
69726      Object.defineProperty(Vue.prototype, '$data', dataDef);
69727      Object.defineProperty(Vue.prototype, '$props', propsDef);
69728      Vue.prototype.$set = set;
69729      Vue.prototype.$delete = del;
69730      Vue.prototype.$watch = function (expOrFn, cb, options) {
69731          var vm = this;
69732          if (isPlainObject(cb)) {
69733              return createWatcher(vm, expOrFn, cb, options);
69734          }
69735          options = options || {};
69736          options.user = true;
69737          var watcher = new Watcher(vm, expOrFn, cb, options);
69738          if (options.immediate) {
69739              var info = "callback for immediate watcher \"".concat(watcher.expression, "\"");
69740              pushTarget();
69741              invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);
69742              popTarget();
69743          }
69744          return function unwatchFn() {
69745              watcher.teardown();
69746          };
69747      };
69748  }
69749
69750  function initProvide(vm) {
69751      var provideOption = vm.$options.provide;
69752      if (provideOption) {
69753          var provided = isFunction(provideOption)
69754              ? provideOption.call(vm)
69755              : provideOption;
69756          if (!isObject(provided)) {
69757              return;
69758          }
69759          var source = resolveProvided(vm);
69760          // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to
69761          // iterate the keys ourselves.
69762          var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);
69763          for (var i = 0; i < keys.length; i++) {
69764              var key = keys[i];
69765              Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));
69766          }
69767      }
69768  }
69769  function initInjections(vm) {
69770      var result = resolveInject(vm.$options.inject, vm);
69771      if (result) {
69772          toggleObserving(false);
69773          Object.keys(result).forEach(function (key) {
69774              /* istanbul ignore else */
69775              {
69776                  defineReactive(vm, key, result[key], function () {
69777                      warn$2("Avoid mutating an injected value directly since the changes will be " +
69778                          "overwritten whenever the provided component re-renders. " +
69779                          "injection being mutated: \"".concat(key, "\""), vm);
69780                  });
69781              }
69782          });
69783          toggleObserving(true);
69784      }
69785  }
69786  function resolveInject(inject, vm) {
69787      if (inject) {
69788          // inject is :any because flow is not smart enough to figure out cached
69789          var result = Object.create(null);
69790          var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
69791          for (var i = 0; i < keys.length; i++) {
69792              var key = keys[i];
69793              // #6574 in case the inject object is observed...
69794              if (key === '__ob__')
69795                  continue;
69796              var provideKey = inject[key].from;
69797              if (provideKey in vm._provided) {
69798                  result[key] = vm._provided[provideKey];
69799              }
69800              else if ('default' in inject[key]) {
69801                  var provideDefault = inject[key].default;
69802                  result[key] = isFunction(provideDefault)
69803                      ? provideDefault.call(vm)
69804                      : provideDefault;
69805              }
69806              else {
69807                  warn$2("Injection \"".concat(key, "\" not found"), vm);
69808              }
69809          }
69810          return result;
69811      }
69812  }
69813
69814  var uid = 0;
69815  function initMixin$1(Vue) {
69816      Vue.prototype._init = function (options) {
69817          var vm = this;
69818          // a uid
69819          vm._uid = uid++;
69820          var startTag, endTag;
69821          /* istanbul ignore if */
69822          if (config.performance && mark) {
69823              startTag = "vue-perf-start:".concat(vm._uid);
69824              endTag = "vue-perf-end:".concat(vm._uid);
69825              mark(startTag);
69826          }
69827          // a flag to mark this as a Vue instance without having to do instanceof
69828          // check
69829          vm._isVue = true;
69830          // avoid instances from being observed
69831          vm.__v_skip = true;
69832          // effect scope
69833          vm._scope = new EffectScope(true /* detached */);
69834          // #13134 edge case where a child component is manually created during the
69835          // render of a parent component
69836          vm._scope.parent = undefined;
69837          vm._scope._vm = true;
69838          // merge options
69839          if (options && options._isComponent) {
69840              // optimize internal component instantiation
69841              // since dynamic options merging is pretty slow, and none of the
69842              // internal component options needs special treatment.
69843              initInternalComponent(vm, options);
69844          }
69845          else {
69846              vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);
69847          }
69848          /* istanbul ignore else */
69849          {
69850              initProxy(vm);
69851          }
69852          // expose real self
69853          vm._self = vm;
69854          initLifecycle(vm);
69855          initEvents(vm);
69856          initRender(vm);
69857          callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);
69858          initInjections(vm); // resolve injections before data/props
69859          initState(vm);
69860          initProvide(vm); // resolve provide after data/props
69861          callHook$1(vm, 'created');
69862          /* istanbul ignore if */
69863          if (config.performance && mark) {
69864              vm._name = formatComponentName(vm, false);
69865              mark(endTag);
69866              measure("vue ".concat(vm._name, " init"), startTag, endTag);
69867          }
69868          if (vm.$options.el) {
69869              vm.$mount(vm.$options.el);
69870          }
69871      };
69872  }
69873  function initInternalComponent(vm, options) {
69874      var opts = (vm.$options = Object.create(vm.constructor.options));
69875      // doing this because it's faster than dynamic enumeration.
69876      var parentVnode = options._parentVnode;
69877      opts.parent = options.parent;
69878      opts._parentVnode = parentVnode;
69879      var vnodeComponentOptions = parentVnode.componentOptions;
69880      opts.propsData = vnodeComponentOptions.propsData;
69881      opts._parentListeners = vnodeComponentOptions.listeners;
69882      opts._renderChildren = vnodeComponentOptions.children;
69883      opts._componentTag = vnodeComponentOptions.tag;
69884      if (options.render) {
69885          opts.render = options.render;
69886          opts.staticRenderFns = options.staticRenderFns;
69887      }
69888  }
69889  function resolveConstructorOptions(Ctor) {
69890      var options = Ctor.options;
69891      if (Ctor.super) {
69892          var superOptions = resolveConstructorOptions(Ctor.super);
69893          var cachedSuperOptions = Ctor.superOptions;
69894          if (superOptions !== cachedSuperOptions) {
69895              // super option changed,
69896              // need to resolve new options.
69897              Ctor.superOptions = superOptions;
69898              // check if there are any late-modified/attached options (#4976)
69899              var modifiedOptions = resolveModifiedOptions(Ctor);
69900              // update base extend options
69901              if (modifiedOptions) {
69902                  extend(Ctor.extendOptions, modifiedOptions);
69903              }
69904              options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
69905              if (options.name) {
69906                  options.components[options.name] = Ctor;
69907              }
69908          }
69909      }
69910      return options;
69911  }
69912  function resolveModifiedOptions(Ctor) {
69913      var modified;
69914      var latest = Ctor.options;
69915      var sealed = Ctor.sealedOptions;
69916      for (var key in latest) {
69917          if (latest[key] !== sealed[key]) {
69918              if (!modified)
69919                  modified = {};
69920              modified[key] = latest[key];
69921          }
69922      }
69923      return modified;
69924  }
69925
69926  function FunctionalRenderContext(data, props, children, parent, Ctor) {
69927      var _this = this;
69928      var options = Ctor.options;
69929      // ensure the createElement function in functional components
69930      // gets a unique context - this is necessary for correct named slot check
69931      var contextVm;
69932      if (hasOwn(parent, '_uid')) {
69933          contextVm = Object.create(parent);
69934          contextVm._original = parent;
69935      }
69936      else {
69937          // the context vm passed in is a functional context as well.
69938          // in this case we want to make sure we are able to get a hold to the
69939          // real context instance.
69940          contextVm = parent;
69941          // @ts-ignore
69942          parent = parent._original;
69943      }
69944      var isCompiled = isTrue(options._compiled);
69945      var needNormalization = !isCompiled;
69946      this.data = data;
69947      this.props = props;
69948      this.children = children;
69949      this.parent = parent;
69950      this.listeners = data.on || emptyObject;
69951      this.injections = resolveInject(options.inject, parent);
69952      this.slots = function () {
69953          if (!_this.$slots) {
69954              normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent)));
69955          }
69956          return _this.$slots;
69957      };
69958      Object.defineProperty(this, 'scopedSlots', {
69959          enumerable: true,
69960          get: function () {
69961              return normalizeScopedSlots(parent, data.scopedSlots, this.slots());
69962          }
69963      });
69964      // support for compiled functional template
69965      if (isCompiled) {
69966          // exposing $options for renderStatic()
69967          this.$options = options;
69968          // pre-resolve slots for renderSlot()
69969          this.$slots = this.slots();
69970          this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);
69971      }
69972      if (options._scopeId) {
69973          this._c = function (a, b, c, d) {
69974              var vnode = createElement$1(contextVm, a, b, c, d, needNormalization);
69975              if (vnode && !isArray(vnode)) {
69976                  vnode.fnScopeId = options._scopeId;
69977                  vnode.fnContext = parent;
69978              }
69979              return vnode;
69980          };
69981      }
69982      else {
69983          this._c = function (a, b, c, d) {
69984              return createElement$1(contextVm, a, b, c, d, needNormalization);
69985          };
69986      }
69987  }
69988  installRenderHelpers(FunctionalRenderContext.prototype);
69989  function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
69990      var options = Ctor.options;
69991      var props = {};
69992      var propOptions = options.props;
69993      if (isDef(propOptions)) {
69994          for (var key in propOptions) {
69995              props[key] = validateProp(key, propOptions, propsData || emptyObject);
69996          }
69997      }
69998      else {
69999          if (isDef(data.attrs))
70000              mergeProps(props, data.attrs);
70001          if (isDef(data.props))
70002              mergeProps(props, data.props);
70003      }
70004      var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
70005      var vnode = options.render.call(null, renderContext._c, renderContext);
70006      if (vnode instanceof VNode) {
70007          return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
70008      }
70009      else if (isArray(vnode)) {
70010          var vnodes = normalizeChildren(vnode) || [];
70011          var res = new Array(vnodes.length);
70012          for (var i = 0; i < vnodes.length; i++) {
70013              res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
70014          }
70015          return res;
70016      }
70017  }
70018  function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
70019      // #7817 clone node before setting fnContext, otherwise if the node is reused
70020      // (e.g. it was from a cached normal slot) the fnContext causes named slots
70021      // that should not be matched to match.
70022      var clone = cloneVNode(vnode);
70023      clone.fnContext = contextVm;
70024      clone.fnOptions = options;
70025      {
70026          (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =
70027              renderContext;
70028      }
70029      if (data.slot) {
70030          (clone.data || (clone.data = {})).slot = data.slot;
70031      }
70032      return clone;
70033  }
70034  function mergeProps(to, from) {
70035      for (var key in from) {
70036          to[camelize(key)] = from[key];
70037      }
70038  }
70039
70040  function getComponentName(options) {
70041      return options.name || options.__name || options._componentTag;
70042  }
70043  // inline hooks to be invoked on component VNodes during patch
70044  var componentVNodeHooks = {
70045      init: function (vnode, hydrating) {
70046          if (vnode.componentInstance &&
70047              !vnode.componentInstance._isDestroyed &&
70048              vnode.data.keepAlive) {
70049              // kept-alive components, treat as a patch
70050              var mountedNode = vnode; // work around flow
70051              componentVNodeHooks.prepatch(mountedNode, mountedNode);
70052          }
70053          else {
70054              var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));
70055              child.$mount(hydrating ? vnode.elm : undefined, hydrating);
70056          }
70057      },
70058      prepatch: function (oldVnode, vnode) {
70059          var options = vnode.componentOptions;
70060          var child = (vnode.componentInstance = oldVnode.componentInstance);
70061          updateChildComponent(child, options.propsData, // updated props
70062          options.listeners, // updated listeners
70063          vnode, // new parent vnode
70064          options.children // new children
70065          );
70066      },
70067      insert: function (vnode) {
70068          var context = vnode.context, componentInstance = vnode.componentInstance;
70069          if (!componentInstance._isMounted) {
70070              componentInstance._isMounted = true;
70071              callHook$1(componentInstance, 'mounted');
70072          }
70073          if (vnode.data.keepAlive) {
70074              if (context._isMounted) {
70075                  // vue-router#1212
70076                  // During updates, a kept-alive component's child components may
70077                  // change, so directly walking the tree here may call activated hooks
70078                  // on incorrect children. Instead we push them into a queue which will
70079                  // be processed after the whole patch process ended.
70080                  queueActivatedComponent(componentInstance);
70081              }
70082              else {
70083                  activateChildComponent(componentInstance, true /* direct */);
70084              }
70085          }
70086      },
70087      destroy: function (vnode) {
70088          var componentInstance = vnode.componentInstance;
70089          if (!componentInstance._isDestroyed) {
70090              if (!vnode.data.keepAlive) {
70091                  componentInstance.$destroy();
70092              }
70093              else {
70094                  deactivateChildComponent(componentInstance, true /* direct */);
70095              }
70096          }
70097      }
70098  };
70099  var hooksToMerge = Object.keys(componentVNodeHooks);
70100  function createComponent(Ctor, data, context, children, tag) {
70101      if (isUndef(Ctor)) {
70102          return;
70103      }
70104      var baseCtor = context.$options._base;
70105      // plain options object: turn it into a constructor
70106      if (isObject(Ctor)) {
70107          Ctor = baseCtor.extend(Ctor);
70108      }
70109      // if at this stage it's not a constructor or an async component factory,
70110      // reject.
70111      if (typeof Ctor !== 'function') {
70112          {
70113              warn$2("Invalid Component definition: ".concat(String(Ctor)), context);
70114          }
70115          return;
70116      }
70117      // async component
70118      var asyncFactory;
70119      // @ts-expect-error
70120      if (isUndef(Ctor.cid)) {
70121          asyncFactory = Ctor;
70122          Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
70123          if (Ctor === undefined) {
70124              // return a placeholder node for async component, which is rendered
70125              // as a comment node but preserves all the raw information for the node.
70126              // the information will be used for async server-rendering and hydration.
70127              return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
70128          }
70129      }
70130      data = data || {};
70131      // resolve constructor options in case global mixins are applied after
70132      // component constructor creation
70133      resolveConstructorOptions(Ctor);
70134      // transform component v-model data into props & events
70135      if (isDef(data.model)) {
70136          // @ts-expect-error
70137          transformModel(Ctor.options, data);
70138      }
70139      // extract props
70140      // @ts-expect-error
70141      var propsData = extractPropsFromVNodeData(data, Ctor, tag);
70142      // functional component
70143      // @ts-expect-error
70144      if (isTrue(Ctor.options.functional)) {
70145          return createFunctionalComponent(Ctor, propsData, data, context, children);
70146      }
70147      // extract listeners, since these needs to be treated as
70148      // child component listeners instead of DOM listeners
70149      var listeners = data.on;
70150      // replace with listeners with .native modifier
70151      // so it gets processed during parent component patch.
70152      data.on = data.nativeOn;
70153      // @ts-expect-error
70154      if (isTrue(Ctor.options.abstract)) {
70155          // abstract components do not keep anything
70156          // other than props & listeners & slot
70157          // work around flow
70158          var slot = data.slot;
70159          data = {};
70160          if (slot) {
70161              data.slot = slot;
70162          }
70163      }
70164      // install component management hooks onto the placeholder node
70165      installComponentHooks(data);
70166      // return a placeholder vnode
70167      // @ts-expect-error
70168      var name = getComponentName(Ctor.options) || tag;
70169      var vnode = new VNode(
70170      // @ts-expect-error
70171      "vue-component-".concat(Ctor.cid).concat(name ? "-".concat(name) : ''), data, undefined, undefined, undefined, context, 
70172      // @ts-expect-error
70173      { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory);
70174      return vnode;
70175  }
70176  function createComponentInstanceForVnode(
70177  // we know it's MountedComponentVNode but flow doesn't
70178  vnode, 
70179  // activeInstance in lifecycle state
70180  parent) {
70181      var options = {
70182          _isComponent: true,
70183          _parentVnode: vnode,
70184          parent: parent
70185      };
70186      // check inline-template render functions
70187      var inlineTemplate = vnode.data.inlineTemplate;
70188      if (isDef(inlineTemplate)) {
70189          options.render = inlineTemplate.render;
70190          options.staticRenderFns = inlineTemplate.staticRenderFns;
70191      }
70192      return new vnode.componentOptions.Ctor(options);
70193  }
70194  function installComponentHooks(data) {
70195      var hooks = data.hook || (data.hook = {});
70196      for (var i = 0; i < hooksToMerge.length; i++) {
70197          var key = hooksToMerge[i];
70198          var existing = hooks[key];
70199          var toMerge = componentVNodeHooks[key];
70200          // @ts-expect-error
70201          if (existing !== toMerge && !(existing && existing._merged)) {
70202              hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
70203          }
70204      }
70205  }
70206  function mergeHook(f1, f2) {
70207      var merged = function (a, b) {
70208          // flow complains about extra args which is why we use any
70209          f1(a, b);
70210          f2(a, b);
70211      };
70212      merged._merged = true;
70213      return merged;
70214  }
70215  // transform component v-model info (value and callback) into
70216  // prop and event handler respectively.
70217  function transformModel(options, data) {
70218      var prop = (options.model && options.model.prop) || 'value';
70219      var event = (options.model && options.model.event) || 'input';
70220      (data.attrs || (data.attrs = {}))[prop] = data.model.value;
70221      var on = data.on || (data.on = {});
70222      var existing = on[event];
70223      var callback = data.model.callback;
70224      if (isDef(existing)) {
70225          if (isArray(existing)
70226              ? existing.indexOf(callback) === -1
70227              : existing !== callback) {
70228              on[event] = [callback].concat(existing);
70229          }
70230      }
70231      else {
70232          on[event] = callback;
70233      }
70234  }
70235
70236  var warn$2 = noop;
70237  var tip = noop;
70238  var generateComponentTrace; // work around flow check
70239  var formatComponentName;
70240  {
70241      var hasConsole_1 = typeof console !== 'undefined';
70242      var classifyRE_1 = /(?:^|[-_])(\w)/g;
70243      var classify_1 = function (str) {
70244          return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, '');
70245      };
70246      warn$2 = function (msg, vm) {
70247          if (vm === void 0) { vm = currentInstance; }
70248          var trace = vm ? generateComponentTrace(vm) : '';
70249          if (config.warnHandler) {
70250              config.warnHandler.call(null, msg, vm, trace);
70251          }
70252          else if (hasConsole_1 && !config.silent) {
70253              console.error("[Vue warn]: ".concat(msg).concat(trace));
70254          }
70255      };
70256      tip = function (msg, vm) {
70257          if (hasConsole_1 && !config.silent) {
70258              console.warn("[Vue tip]: ".concat(msg) + (vm ? generateComponentTrace(vm) : ''));
70259          }
70260      };
70261      formatComponentName = function (vm, includeFile) {
70262          if (vm.$root === vm) {
70263              return '<Root>';
70264          }
70265          var options = isFunction(vm) && vm.cid != null
70266              ? vm.options
70267              : vm._isVue
70268                  ? vm.$options || vm.constructor.options
70269                  : vm;
70270          var name = getComponentName(options);
70271          var file = options.__file;
70272          if (!name && file) {
70273              var match = file.match(/([^/\\]+)\.vue$/);
70274              name = match && match[1];
70275          }
70276          return ((name ? "<".concat(classify_1(name), ">") : "<Anonymous>") +
70277              (file && includeFile !== false ? " at ".concat(file) : ''));
70278      };
70279      var repeat_1 = function (str, n) {
70280          var res = '';
70281          while (n) {
70282              if (n % 2 === 1)
70283                  res += str;
70284              if (n > 1)
70285                  str += str;
70286              n >>= 1;
70287          }
70288          return res;
70289      };
70290      generateComponentTrace = function (vm) {
70291          if (vm._isVue && vm.$parent) {
70292              var tree = [];
70293              var currentRecursiveSequence = 0;
70294              while (vm) {
70295                  if (tree.length > 0) {
70296                      var last = tree[tree.length - 1];
70297                      if (last.constructor === vm.constructor) {
70298                          currentRecursiveSequence++;
70299                          vm = vm.$parent;
70300                          continue;
70301                      }
70302                      else if (currentRecursiveSequence > 0) {
70303                          tree[tree.length - 1] = [last, currentRecursiveSequence];
70304                          currentRecursiveSequence = 0;
70305                      }
70306                  }
70307                  tree.push(vm);
70308                  vm = vm.$parent;
70309              }
70310              return ('\n\nfound in\n\n' +
70311                  tree
70312                      .map(function (vm, i) {
70313                      return "".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm)
70314                          ? "".concat(formatComponentName(vm[0]), "... (").concat(vm[1], " recursive calls)")
70315                          : formatComponentName(vm));
70316                  })
70317                      .join('\n'));
70318          }
70319          else {
70320              return "\n\n(found in ".concat(formatComponentName(vm), ")");
70321          }
70322      };
70323  }
70324
70325  /**
70326   * Option overwriting strategies are functions that handle
70327   * how to merge a parent option value and a child option
70328   * value into the final value.
70329   */
70330  var strats = config.optionMergeStrategies;
70331  /**
70332   * Options with restrictions
70333   */
70334  {
70335      strats.el = strats.propsData = function (parent, child, vm, key) {
70336          if (!vm) {
70337              warn$2("option \"".concat(key, "\" can only be used during instance ") +
70338                  'creation with the `new` keyword.');
70339          }
70340          return defaultStrat(parent, child);
70341      };
70342  }
70343  /**
70344   * Helper that recursively merges two data objects together.
70345   */
70346  function mergeData(to, from, recursive) {
70347      if (recursive === void 0) { recursive = true; }
70348      if (!from)
70349          return to;
70350      var key, toVal, fromVal;
70351      var keys = hasSymbol
70352          ? Reflect.ownKeys(from)
70353          : Object.keys(from);
70354      for (var i = 0; i < keys.length; i++) {
70355          key = keys[i];
70356          // in case the object is already observed...
70357          if (key === '__ob__')
70358              continue;
70359          toVal = to[key];
70360          fromVal = from[key];
70361          if (!recursive || !hasOwn(to, key)) {
70362              set(to, key, fromVal);
70363          }
70364          else if (toVal !== fromVal &&
70365              isPlainObject(toVal) &&
70366              isPlainObject(fromVal)) {
70367              mergeData(toVal, fromVal);
70368          }
70369      }
70370      return to;
70371  }
70372  /**
70373   * Data
70374   */
70375  function mergeDataOrFn(parentVal, childVal, vm) {
70376      if (!vm) {
70377          // in a Vue.extend merge, both should be functions
70378          if (!childVal) {
70379              return parentVal;
70380          }
70381          if (!parentVal) {
70382              return childVal;
70383          }
70384          // when parentVal & childVal are both present,
70385          // we need to return a function that returns the
70386          // merged result of both functions... no need to
70387          // check if parentVal is a function here because
70388          // it has to be a function to pass previous merges.
70389          return function mergedDataFn() {
70390              return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);
70391          };
70392      }
70393      else {
70394          return function mergedInstanceDataFn() {
70395              // instance merge
70396              var instanceData = isFunction(childVal)
70397                  ? childVal.call(vm, vm)
70398                  : childVal;
70399              var defaultData = isFunction(parentVal)
70400                  ? parentVal.call(vm, vm)
70401                  : parentVal;
70402              if (instanceData) {
70403                  return mergeData(instanceData, defaultData);
70404              }
70405              else {
70406                  return defaultData;
70407              }
70408          };
70409      }
70410  }
70411  strats.data = function (parentVal, childVal, vm) {
70412      if (!vm) {
70413          if (childVal && typeof childVal !== 'function') {
70414              warn$2('The "data" option should be a function ' +
70415                      'that returns a per-instance value in component ' +
70416                      'definitions.', vm);
70417              return parentVal;
70418          }
70419          return mergeDataOrFn(parentVal, childVal);
70420      }
70421      return mergeDataOrFn(parentVal, childVal, vm);
70422  };
70423  /**
70424   * Hooks and props are merged as arrays.
70425   */
70426  function mergeLifecycleHook(parentVal, childVal) {
70427      var res = childVal
70428          ? parentVal
70429              ? parentVal.concat(childVal)
70430              : isArray(childVal)
70431                  ? childVal
70432                  : [childVal]
70433          : parentVal;
70434      return res ? dedupeHooks(res) : res;
70435  }
70436  function dedupeHooks(hooks) {
70437      var res = [];
70438      for (var i = 0; i < hooks.length; i++) {
70439          if (res.indexOf(hooks[i]) === -1) {
70440              res.push(hooks[i]);
70441          }
70442      }
70443      return res;
70444  }
70445  LIFECYCLE_HOOKS.forEach(function (hook) {
70446      strats[hook] = mergeLifecycleHook;
70447  });
70448  /**
70449   * Assets
70450   *
70451   * When a vm is present (instance creation), we need to do
70452   * a three-way merge between constructor options, instance
70453   * options and parent options.
70454   */
70455  function mergeAssets(parentVal, childVal, vm, key) {
70456      var res = Object.create(parentVal || null);
70457      if (childVal) {
70458          assertObjectType(key, childVal, vm);
70459          return extend(res, childVal);
70460      }
70461      else {
70462          return res;
70463      }
70464  }
70465  ASSET_TYPES.forEach(function (type) {
70466      strats[type + 's'] = mergeAssets;
70467  });
70468  /**
70469   * Watchers.
70470   *
70471   * Watchers hashes should not overwrite one
70472   * another, so we merge them as arrays.
70473   */
70474  strats.watch = function (parentVal, childVal, vm, key) {
70475      // work around Firefox's Object.prototype.watch...
70476      //@ts-expect-error work around
70477      if (parentVal === nativeWatch)
70478          parentVal = undefined;
70479      //@ts-expect-error work around
70480      if (childVal === nativeWatch)
70481          childVal = undefined;
70482      /* istanbul ignore if */
70483      if (!childVal)
70484          return Object.create(parentVal || null);
70485      {
70486          assertObjectType(key, childVal, vm);
70487      }
70488      if (!parentVal)
70489          return childVal;
70490      var ret = {};
70491      extend(ret, parentVal);
70492      for (var key_1 in childVal) {
70493          var parent_1 = ret[key_1];
70494          var child = childVal[key_1];
70495          if (parent_1 && !isArray(parent_1)) {
70496              parent_1 = [parent_1];
70497          }
70498          ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child];
70499      }
70500      return ret;
70501  };
70502  /**
70503   * Other object hashes.
70504   */
70505  strats.props =
70506      strats.methods =
70507          strats.inject =
70508              strats.computed =
70509                  function (parentVal, childVal, vm, key) {
70510                      if (childVal && true) {
70511                          assertObjectType(key, childVal, vm);
70512                      }
70513                      if (!parentVal)
70514                          return childVal;
70515                      var ret = Object.create(null);
70516                      extend(ret, parentVal);
70517                      if (childVal)
70518                          extend(ret, childVal);
70519                      return ret;
70520                  };
70521  strats.provide = function (parentVal, childVal) {
70522      if (!parentVal)
70523          return childVal;
70524      return function () {
70525          var ret = Object.create(null);
70526          mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);
70527          if (childVal) {
70528              mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive
70529              );
70530          }
70531          return ret;
70532      };
70533  };
70534  /**
70535   * Default strategy.
70536   */
70537  var defaultStrat = function (parentVal, childVal) {
70538      return childVal === undefined ? parentVal : childVal;
70539  };
70540  /**
70541   * Validate component names
70542   */
70543  function checkComponents(options) {
70544      for (var key in options.components) {
70545          validateComponentName(key);
70546      }
70547  }
70548  function validateComponentName(name) {
70549      if (!new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(unicodeRegExp.source, "]*$")).test(name)) {
70550          warn$2('Invalid component name: "' +
70551              name +
70552              '". Component names ' +
70553              'should conform to valid custom element name in html5 specification.');
70554      }
70555      if (isBuiltInTag(name) || config.isReservedTag(name)) {
70556          warn$2('Do not use built-in or reserved HTML elements as component ' +
70557              'id: ' +
70558              name);
70559      }
70560  }
70561  /**
70562   * Ensure all props option syntax are normalized into the
70563   * Object-based format.
70564   */
70565  function normalizeProps(options, vm) {
70566      var props = options.props;
70567      if (!props)
70568          return;
70569      var res = {};
70570      var i, val, name;
70571      if (isArray(props)) {
70572          i = props.length;
70573          while (i--) {
70574              val = props[i];
70575              if (typeof val === 'string') {
70576                  name = camelize(val);
70577                  res[name] = { type: null };
70578              }
70579              else {
70580                  warn$2('props must be strings when using array syntax.');
70581              }
70582          }
70583      }
70584      else if (isPlainObject(props)) {
70585          for (var key in props) {
70586              val = props[key];
70587              name = camelize(key);
70588              res[name] = isPlainObject(val) ? val : { type: val };
70589          }
70590      }
70591      else {
70592          warn$2("Invalid value for option \"props\": expected an Array or an Object, " +
70593              "but got ".concat(toRawType(props), "."), vm);
70594      }
70595      options.props = res;
70596  }
70597  /**
70598   * Normalize all injections into Object-based format
70599   */
70600  function normalizeInject(options, vm) {
70601      var inject = options.inject;
70602      if (!inject)
70603          return;
70604      var normalized = (options.inject = {});
70605      if (isArray(inject)) {
70606          for (var i = 0; i < inject.length; i++) {
70607              normalized[inject[i]] = { from: inject[i] };
70608          }
70609      }
70610      else if (isPlainObject(inject)) {
70611          for (var key in inject) {
70612              var val = inject[key];
70613              normalized[key] = isPlainObject(val)
70614                  ? extend({ from: key }, val)
70615                  : { from: val };
70616          }
70617      }
70618      else {
70619          warn$2("Invalid value for option \"inject\": expected an Array or an Object, " +
70620              "but got ".concat(toRawType(inject), "."), vm);
70621      }
70622  }
70623  /**
70624   * Normalize raw function directives into object format.
70625   */
70626  function normalizeDirectives$1(options) {
70627      var dirs = options.directives;
70628      if (dirs) {
70629          for (var key in dirs) {
70630              var def = dirs[key];
70631              if (isFunction(def)) {
70632                  dirs[key] = { bind: def, update: def };
70633              }
70634          }
70635      }
70636  }
70637  function assertObjectType(name, value, vm) {
70638      if (!isPlainObject(value)) {
70639          warn$2("Invalid value for option \"".concat(name, "\": expected an Object, ") +
70640              "but got ".concat(toRawType(value), "."), vm);
70641      }
70642  }
70643  /**
70644   * Merge two option objects into a new one.
70645   * Core utility used in both instantiation and inheritance.
70646   */
70647  function mergeOptions(parent, child, vm) {
70648      {
70649          checkComponents(child);
70650      }
70651      if (isFunction(child)) {
70652          // @ts-expect-error
70653          child = child.options;
70654      }
70655      normalizeProps(child, vm);
70656      normalizeInject(child, vm);
70657      normalizeDirectives$1(child);
70658      // Apply extends and mixins on the child options,
70659      // but only if it is a raw options object that isn't
70660      // the result of another mergeOptions call.
70661      // Only merged options has the _base property.
70662      if (!child._base) {
70663          if (child.extends) {
70664              parent = mergeOptions(parent, child.extends, vm);
70665          }
70666          if (child.mixins) {
70667              for (var i = 0, l = child.mixins.length; i < l; i++) {
70668                  parent = mergeOptions(parent, child.mixins[i], vm);
70669              }
70670          }
70671      }
70672      var options = {};
70673      var key;
70674      for (key in parent) {
70675          mergeField(key);
70676      }
70677      for (key in child) {
70678          if (!hasOwn(parent, key)) {
70679              mergeField(key);
70680          }
70681      }
70682      function mergeField(key) {
70683          var strat = strats[key] || defaultStrat;
70684          options[key] = strat(parent[key], child[key], vm, key);
70685      }
70686      return options;
70687  }
70688  /**
70689   * Resolve an asset.
70690   * This function is used because child instances need access
70691   * to assets defined in its ancestor chain.
70692   */
70693  function resolveAsset(options, type, id, warnMissing) {
70694      /* istanbul ignore if */
70695      if (typeof id !== 'string') {
70696          return;
70697      }
70698      var assets = options[type];
70699      // check local registration variations first
70700      if (hasOwn(assets, id))
70701          return assets[id];
70702      var camelizedId = camelize(id);
70703      if (hasOwn(assets, camelizedId))
70704          return assets[camelizedId];
70705      var PascalCaseId = capitalize(camelizedId);
70706      if (hasOwn(assets, PascalCaseId))
70707          return assets[PascalCaseId];
70708      // fallback to prototype chain
70709      var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
70710      if (warnMissing && !res) {
70711          warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id);
70712      }
70713      return res;
70714  }
70715
70716  function validateProp(key, propOptions, propsData, vm) {
70717      var prop = propOptions[key];
70718      var absent = !hasOwn(propsData, key);
70719      var value = propsData[key];
70720      // boolean casting
70721      var booleanIndex = getTypeIndex(Boolean, prop.type);
70722      if (booleanIndex > -1) {
70723          if (absent && !hasOwn(prop, 'default')) {
70724              value = false;
70725          }
70726          else if (value === '' || value === hyphenate(key)) {
70727              // only cast empty string / same name to boolean if
70728              // boolean has higher priority
70729              var stringIndex = getTypeIndex(String, prop.type);
70730              if (stringIndex < 0 || booleanIndex < stringIndex) {
70731                  value = true;
70732              }
70733          }
70734      }
70735      // check default value
70736      if (value === undefined) {
70737          value = getPropDefaultValue(vm, prop, key);
70738          // since the default value is a fresh copy,
70739          // make sure to observe it.
70740          var prevShouldObserve = shouldObserve;
70741          toggleObserving(true);
70742          observe(value);
70743          toggleObserving(prevShouldObserve);
70744      }
70745      {
70746          assertProp(prop, key, value, vm, absent);
70747      }
70748      return value;
70749  }
70750  /**
70751   * Get the default value of a prop.
70752   */
70753  function getPropDefaultValue(vm, prop, key) {
70754      // no default, return undefined
70755      if (!hasOwn(prop, 'default')) {
70756          return undefined;
70757      }
70758      var def = prop.default;
70759      // warn against non-factory defaults for Object & Array
70760      if (isObject(def)) {
70761          warn$2('Invalid default value for prop "' +
70762              key +
70763              '": ' +
70764              'Props with type Object/Array must use a factory function ' +
70765              'to return the default value.', vm);
70766      }
70767      // the raw prop value was also undefined from previous render,
70768      // return previous default value to avoid unnecessary watcher trigger
70769      if (vm &&
70770          vm.$options.propsData &&
70771          vm.$options.propsData[key] === undefined &&
70772          vm._props[key] !== undefined) {
70773          return vm._props[key];
70774      }
70775      // call factory function for non-Function types
70776      // a value is Function if its prototype is function even across different execution context
70777      return isFunction(def) && getType(prop.type) !== 'Function'
70778          ? def.call(vm)
70779          : def;
70780  }
70781  /**
70782   * Assert whether a prop is valid.
70783   */
70784  function assertProp(prop, name, value, vm, absent) {
70785      if (prop.required && absent) {
70786          warn$2('Missing required prop: "' + name + '"', vm);
70787          return;
70788      }
70789      if (value == null && !prop.required) {
70790          return;
70791      }
70792      var type = prop.type;
70793      var valid = !type || type === true;
70794      var expectedTypes = [];
70795      if (type) {
70796          if (!isArray(type)) {
70797              type = [type];
70798          }
70799          for (var i = 0; i < type.length && !valid; i++) {
70800              var assertedType = assertType(value, type[i], vm);
70801              expectedTypes.push(assertedType.expectedType || '');
70802              valid = assertedType.valid;
70803          }
70804      }
70805      var haveExpectedTypes = expectedTypes.some(function (t) { return t; });
70806      if (!valid && haveExpectedTypes) {
70807          warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm);
70808          return;
70809      }
70810      var validator = prop.validator;
70811      if (validator) {
70812          if (!validator(value)) {
70813              warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
70814          }
70815      }
70816  }
70817  var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
70818  function assertType(value, type, vm) {
70819      var valid;
70820      var expectedType = getType(type);
70821      if (simpleCheckRE.test(expectedType)) {
70822          var t = typeof value;
70823          valid = t === expectedType.toLowerCase();
70824          // for primitive wrapper objects
70825          if (!valid && t === 'object') {
70826              valid = value instanceof type;
70827          }
70828      }
70829      else if (expectedType === 'Object') {
70830          valid = isPlainObject(value);
70831      }
70832      else if (expectedType === 'Array') {
70833          valid = isArray(value);
70834      }
70835      else {
70836          try {
70837              valid = value instanceof type;
70838          }
70839          catch (e) {
70840              warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
70841              valid = false;
70842          }
70843      }
70844      return {
70845          valid: valid,
70846          expectedType: expectedType
70847      };
70848  }
70849  var functionTypeCheckRE = /^\s*function (\w+)/;
70850  /**
70851   * Use function string name to check built-in types,
70852   * because a simple equality check will fail when running
70853   * across different vms / iframes.
70854   */
70855  function getType(fn) {
70856      var match = fn && fn.toString().match(functionTypeCheckRE);
70857      return match ? match[1] : '';
70858  }
70859  function isSameType(a, b) {
70860      return getType(a) === getType(b);
70861  }
70862  function getTypeIndex(type, expectedTypes) {
70863      if (!isArray(expectedTypes)) {
70864          return isSameType(expectedTypes, type) ? 0 : -1;
70865      }
70866      for (var i = 0, len = expectedTypes.length; i < len; i++) {
70867          if (isSameType(expectedTypes[i], type)) {
70868              return i;
70869          }
70870      }
70871      return -1;
70872  }
70873  function getInvalidTypeMessage(name, value, expectedTypes) {
70874      var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") +
70875          " Expected ".concat(expectedTypes.map(capitalize).join(', '));
70876      var expectedType = expectedTypes[0];
70877      var receivedType = toRawType(value);
70878      // check if we need to specify expected value
70879      if (expectedTypes.length === 1 &&
70880          isExplicable(expectedType) &&
70881          isExplicable(typeof value) &&
70882          !isBoolean(expectedType, receivedType)) {
70883          message += " with value ".concat(styleValue(value, expectedType));
70884      }
70885      message += ", got ".concat(receivedType, " ");
70886      // check if we need to specify received value
70887      if (isExplicable(receivedType)) {
70888          message += "with value ".concat(styleValue(value, receivedType), ".");
70889      }
70890      return message;
70891  }
70892  function styleValue(value, type) {
70893      if (type === 'String') {
70894          return "\"".concat(value, "\"");
70895      }
70896      else if (type === 'Number') {
70897          return "".concat(Number(value));
70898      }
70899      else {
70900          return "".concat(value);
70901      }
70902  }
70903  var EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
70904  function isExplicable(value) {
70905      return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; });
70906  }
70907  function isBoolean() {
70908      var args = [];
70909      for (var _i = 0; _i < arguments.length; _i++) {
70910          args[_i] = arguments[_i];
70911      }
70912      return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; });
70913  }
70914
70915  function Vue(options) {
70916      if (!(this instanceof Vue)) {
70917          warn$2('Vue is a constructor and should be called with the `new` keyword');
70918      }
70919      this._init(options);
70920  }
70921  //@ts-expect-error Vue has function type
70922  initMixin$1(Vue);
70923  //@ts-expect-error Vue has function type
70924  stateMixin(Vue);
70925  //@ts-expect-error Vue has function type
70926  eventsMixin(Vue);
70927  //@ts-expect-error Vue has function type
70928  lifecycleMixin(Vue);
70929  //@ts-expect-error Vue has function type
70930  renderMixin(Vue);
70931
70932  function initUse(Vue) {
70933      Vue.use = function (plugin) {
70934          var installedPlugins = this._installedPlugins || (this._installedPlugins = []);
70935          if (installedPlugins.indexOf(plugin) > -1) {
70936              return this;
70937          }
70938          // additional parameters
70939          var args = toArray(arguments, 1);
70940          args.unshift(this);
70941          if (isFunction(plugin.install)) {
70942              plugin.install.apply(plugin, args);
70943          }
70944          else if (isFunction(plugin)) {
70945              plugin.apply(null, args);
70946          }
70947          installedPlugins.push(plugin);
70948          return this;
70949      };
70950  }
70951
70952  function initMixin(Vue) {
70953      Vue.mixin = function (mixin) {
70954          this.options = mergeOptions(this.options, mixin);
70955          return this;
70956      };
70957  }
70958
70959  function initExtend(Vue) {
70960      /**
70961       * Each instance constructor, including Vue, has a unique
70962       * cid. This enables us to create wrapped "child
70963       * constructors" for prototypal inheritance and cache them.
70964       */
70965      Vue.cid = 0;
70966      var cid = 1;
70967      /**
70968       * Class inheritance
70969       */
70970      Vue.extend = function (extendOptions) {
70971          extendOptions = extendOptions || {};
70972          var Super = this;
70973          var SuperId = Super.cid;
70974          var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
70975          if (cachedCtors[SuperId]) {
70976              return cachedCtors[SuperId];
70977          }
70978          var name = getComponentName(extendOptions) || getComponentName(Super.options);
70979          if (name) {
70980              validateComponentName(name);
70981          }
70982          var Sub = function VueComponent(options) {
70983              this._init(options);
70984          };
70985          Sub.prototype = Object.create(Super.prototype);
70986          Sub.prototype.constructor = Sub;
70987          Sub.cid = cid++;
70988          Sub.options = mergeOptions(Super.options, extendOptions);
70989          Sub['super'] = Super;
70990          // For props and computed properties, we define the proxy getters on
70991          // the Vue instances at extension time, on the extended prototype. This
70992          // avoids Object.defineProperty calls for each instance created.
70993          if (Sub.options.props) {
70994              initProps(Sub);
70995          }
70996          if (Sub.options.computed) {
70997              initComputed(Sub);
70998          }
70999          // allow further extension/mixin/plugin usage
71000          Sub.extend = Super.extend;
71001          Sub.mixin = Super.mixin;
71002          Sub.use = Super.use;
71003          // create asset registers, so extended classes
71004          // can have their private assets too.
71005          ASSET_TYPES.forEach(function (type) {
71006              Sub[type] = Super[type];
71007          });
71008          // enable recursive self-lookup
71009          if (name) {
71010              Sub.options.components[name] = Sub;
71011          }
71012          // keep a reference to the super options at extension time.
71013          // later at instantiation we can check if Super's options have
71014          // been updated.
71015          Sub.superOptions = Super.options;
71016          Sub.extendOptions = extendOptions;
71017          Sub.sealedOptions = extend({}, Sub.options);
71018          // cache constructor
71019          cachedCtors[SuperId] = Sub;
71020          return Sub;
71021      };
71022  }
71023  function initProps(Comp) {
71024      var props = Comp.options.props;
71025      for (var key in props) {
71026          proxy(Comp.prototype, "_props", key);
71027      }
71028  }
71029  function initComputed(Comp) {
71030      var computed = Comp.options.computed;
71031      for (var key in computed) {
71032          defineComputed(Comp.prototype, key, computed[key]);
71033      }
71034  }
71035
71036  function initAssetRegisters(Vue) {
71037      /**
71038       * Create asset registration methods.
71039       */
71040      ASSET_TYPES.forEach(function (type) {
71041          // @ts-expect-error function is not exact same type
71042          Vue[type] = function (id, definition) {
71043              if (!definition) {
71044                  return this.options[type + 's'][id];
71045              }
71046              else {
71047                  /* istanbul ignore if */
71048                  if (type === 'component') {
71049                      validateComponentName(id);
71050                  }
71051                  if (type === 'component' && isPlainObject(definition)) {
71052                      // @ts-expect-error
71053                      definition.name = definition.name || id;
71054                      definition = this.options._base.extend(definition);
71055                  }
71056                  if (type === 'directive' && isFunction(definition)) {
71057                      definition = { bind: definition, update: definition };
71058                  }
71059                  this.options[type + 's'][id] = definition;
71060                  return definition;
71061              }
71062          };
71063      });
71064  }
71065
71066  function _getComponentName(opts) {
71067      return opts && (getComponentName(opts.Ctor.options) || opts.tag);
71068  }
71069  function matches(pattern, name) {
71070      if (isArray(pattern)) {
71071          return pattern.indexOf(name) > -1;
71072      }
71073      else if (typeof pattern === 'string') {
71074          return pattern.split(',').indexOf(name) > -1;
71075      }
71076      else if (isRegExp(pattern)) {
71077          return pattern.test(name);
71078      }
71079      /* istanbul ignore next */
71080      return false;
71081  }
71082  function pruneCache(keepAliveInstance, filter) {
71083      var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode, $vnode = keepAliveInstance.$vnode;
71084      for (var key in cache) {
71085          var entry = cache[key];
71086          if (entry) {
71087              var name_1 = entry.name;
71088              if (name_1 && !filter(name_1)) {
71089                  pruneCacheEntry(cache, key, keys, _vnode);
71090              }
71091          }
71092      }
71093      $vnode.componentOptions.children = undefined;
71094  }
71095  function pruneCacheEntry(cache, key, keys, current) {
71096      var entry = cache[key];
71097      if (entry && (!current || entry.tag !== current.tag)) {
71098          // @ts-expect-error can be undefined
71099          entry.componentInstance.$destroy();
71100      }
71101      cache[key] = null;
71102      remove$2(keys, key);
71103  }
71104  var patternTypes = [String, RegExp, Array];
71105  // TODO defineComponent
71106  var KeepAlive = {
71107      name: 'keep-alive',
71108      abstract: true,
71109      props: {
71110          include: patternTypes,
71111          exclude: patternTypes,
71112          max: [String, Number]
71113      },
71114      methods: {
71115          cacheVNode: function () {
71116              var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache;
71117              if (vnodeToCache) {
71118                  var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions;
71119                  cache[keyToCache] = {
71120                      name: _getComponentName(componentOptions),
71121                      tag: tag,
71122                      componentInstance: componentInstance
71123                  };
71124                  keys.push(keyToCache);
71125                  // prune oldest entry
71126                  if (this.max && keys.length > parseInt(this.max)) {
71127                      pruneCacheEntry(cache, keys[0], keys, this._vnode);
71128                  }
71129                  this.vnodeToCache = null;
71130              }
71131          }
71132      },
71133      created: function () {
71134          this.cache = Object.create(null);
71135          this.keys = [];
71136      },
71137      destroyed: function () {
71138          for (var key in this.cache) {
71139              pruneCacheEntry(this.cache, key, this.keys);
71140          }
71141      },
71142      mounted: function () {
71143          var _this = this;
71144          this.cacheVNode();
71145          this.$watch('include', function (val) {
71146              pruneCache(_this, function (name) { return matches(val, name); });
71147          });
71148          this.$watch('exclude', function (val) {
71149              pruneCache(_this, function (name) { return !matches(val, name); });
71150          });
71151      },
71152      updated: function () {
71153          this.cacheVNode();
71154      },
71155      render: function () {
71156          var slot = this.$slots.default;
71157          var vnode = getFirstComponentChild(slot);
71158          var componentOptions = vnode && vnode.componentOptions;
71159          if (componentOptions) {
71160              // check pattern
71161              var name_2 = _getComponentName(componentOptions);
71162              var _a = this, include = _a.include, exclude = _a.exclude;
71163              if (
71164              // not included
71165              (include && (!name_2 || !matches(include, name_2))) ||
71166                  // excluded
71167                  (exclude && name_2 && matches(exclude, name_2))) {
71168                  return vnode;
71169              }
71170              var _b = this, cache = _b.cache, keys = _b.keys;
71171              var key = vnode.key == null
71172                  ? // same constructor may get registered as different local components
71173                      // so cid alone is not enough (#3269)
71174                      componentOptions.Ctor.cid +
71175                          (componentOptions.tag ? "::".concat(componentOptions.tag) : '')
71176                  : vnode.key;
71177              if (cache[key]) {
71178                  vnode.componentInstance = cache[key].componentInstance;
71179                  // make current key freshest
71180                  remove$2(keys, key);
71181                  keys.push(key);
71182              }
71183              else {
71184                  // delay setting the cache until update
71185                  this.vnodeToCache = vnode;
71186                  this.keyToCache = key;
71187              }
71188              // @ts-expect-error can vnode.data can be undefined
71189              vnode.data.keepAlive = true;
71190          }
71191          return vnode || (slot && slot[0]);
71192      }
71193  };
71194
71195  var builtInComponents = {
71196      KeepAlive: KeepAlive
71197  };
71198
71199  function initGlobalAPI(Vue) {
71200      // config
71201      var configDef = {};
71202      configDef.get = function () { return config; };
71203      {
71204          configDef.set = function () {
71205              warn$2('Do not replace the Vue.config object, set individual fields instead.');
71206          };
71207      }
71208      Object.defineProperty(Vue, 'config', configDef);
71209      // exposed util methods.
71210      // NOTE: these are not considered part of the public API - avoid relying on
71211      // them unless you are aware of the risk.
71212      Vue.util = {
71213          warn: warn$2,
71214          extend: extend,
71215          mergeOptions: mergeOptions,
71216          defineReactive: defineReactive
71217      };
71218      Vue.set = set;
71219      Vue.delete = del;
71220      Vue.nextTick = nextTick;
71221      // 2.6 explicit observable API
71222      Vue.observable = function (obj) {
71223          observe(obj);
71224          return obj;
71225      };
71226      Vue.options = Object.create(null);
71227      ASSET_TYPES.forEach(function (type) {
71228          Vue.options[type + 's'] = Object.create(null);
71229      });
71230      // this is used to identify the "base" constructor to extend all plain-object
71231      // components with in Weex's multi-instance scenarios.
71232      Vue.options._base = Vue;
71233      extend(Vue.options.components, builtInComponents);
71234      initUse(Vue);
71235      initMixin(Vue);
71236      initExtend(Vue);
71237      initAssetRegisters(Vue);
71238  }
71239
71240  initGlobalAPI(Vue);
71241  Object.defineProperty(Vue.prototype, '$isServer', {
71242      get: isServerRendering
71243  });
71244  Object.defineProperty(Vue.prototype, '$ssrContext', {
71245      get: function () {
71246          /* istanbul ignore next */
71247          return this.$vnode && this.$vnode.ssrContext;
71248      }
71249  });
71250  // expose FunctionalRenderContext for ssr runtime helper installation
71251  Object.defineProperty(Vue, 'FunctionalRenderContext', {
71252      value: FunctionalRenderContext
71253  });
71254  Vue.version = version;
71255
71256  // these are reserved for web because they are directly compiled away
71257  // during template compilation
71258  var isReservedAttr = makeMap('style,class');
71259  // attributes that should be using props for binding
71260  var acceptValue = makeMap('input,textarea,option,select,progress');
71261  var mustUseProp = function (tag, type, attr) {
71262      return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||
71263          (attr === 'selected' && tag === 'option') ||
71264          (attr === 'checked' && tag === 'input') ||
71265          (attr === 'muted' && tag === 'video'));
71266  };
71267  var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
71268  var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
71269  var convertEnumeratedValue = function (key, value) {
71270      return isFalsyAttrValue(value) || value === 'false'
71271          ? 'false'
71272          : // allow arbitrary string value for contenteditable
71273              key === 'contenteditable' && isValidContentEditableValue(value)
71274                  ? value
71275                  : 'true';
71276  };
71277  var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
71278      'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
71279      'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
71280      'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
71281      'required,reversed,scoped,seamless,selected,sortable,' +
71282      'truespeed,typemustmatch,visible');
71283  var xlinkNS = 'http://www.w3.org/1999/xlink';
71284  var isXlink = function (name) {
71285      return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';
71286  };
71287  var getXlinkProp = function (name) {
71288      return isXlink(name) ? name.slice(6, name.length) : '';
71289  };
71290  var isFalsyAttrValue = function (val) {
71291      return val == null || val === false;
71292  };
71293
71294  function genClassForVnode(vnode) {
71295      var data = vnode.data;
71296      var parentNode = vnode;
71297      var childNode = vnode;
71298      while (isDef(childNode.componentInstance)) {
71299          childNode = childNode.componentInstance._vnode;
71300          if (childNode && childNode.data) {
71301              data = mergeClassData(childNode.data, data);
71302          }
71303      }
71304      // @ts-expect-error parentNode.parent not VNodeWithData
71305      while (isDef((parentNode = parentNode.parent))) {
71306          if (parentNode && parentNode.data) {
71307              data = mergeClassData(data, parentNode.data);
71308          }
71309      }
71310      return renderClass(data.staticClass, data.class);
71311  }
71312  function mergeClassData(child, parent) {
71313      return {
71314          staticClass: concat(child.staticClass, parent.staticClass),
71315          class: isDef(child.class) ? [child.class, parent.class] : parent.class
71316      };
71317  }
71318  function renderClass(staticClass, dynamicClass) {
71319      if (isDef(staticClass) || isDef(dynamicClass)) {
71320          return concat(staticClass, stringifyClass(dynamicClass));
71321      }
71322      /* istanbul ignore next */
71323      return '';
71324  }
71325  function concat(a, b) {
71326      return a ? (b ? a + ' ' + b : a) : b || '';
71327  }
71328  function stringifyClass(value) {
71329      if (Array.isArray(value)) {
71330          return stringifyArray(value);
71331      }
71332      if (isObject(value)) {
71333          return stringifyObject(value);
71334      }
71335      if (typeof value === 'string') {
71336          return value;
71337      }
71338      /* istanbul ignore next */
71339      return '';
71340  }
71341  function stringifyArray(value) {
71342      var res = '';
71343      var stringified;
71344      for (var i = 0, l = value.length; i < l; i++) {
71345          if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {
71346              if (res)
71347                  res += ' ';
71348              res += stringified;
71349          }
71350      }
71351      return res;
71352  }
71353  function stringifyObject(value) {
71354      var res = '';
71355      for (var key in value) {
71356          if (value[key]) {
71357              if (res)
71358                  res += ' ';
71359              res += key;
71360          }
71361      }
71362      return res;
71363  }
71364
71365  var namespaceMap = {
71366      svg: 'http://www.w3.org/2000/svg',
71367      math: 'http://www.w3.org/1998/Math/MathML'
71368  };
71369  var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +
71370      'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
71371      'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
71372      'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
71373      's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
71374      'embed,object,param,source,canvas,script,noscript,del,ins,' +
71375      'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
71376      'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
71377      'output,progress,select,textarea,' +
71378      'details,dialog,menu,menuitem,summary,' +
71379      'content,element,shadow,template,blockquote,iframe,tfoot');
71380  // this map is intentionally selective, only covering SVG elements that may
71381  // contain child elements.
71382  var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
71383      'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
71384      'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
71385  var isPreTag = function (tag) { return tag === 'pre'; };
71386  var isReservedTag = function (tag) {
71387      return isHTMLTag(tag) || isSVG(tag);
71388  };
71389  function getTagNamespace(tag) {
71390      if (isSVG(tag)) {
71391          return 'svg';
71392      }
71393      // basic support for MathML
71394      // note it doesn't support other MathML elements being component roots
71395      if (tag === 'math') {
71396          return 'math';
71397      }
71398  }
71399  var unknownElementCache = Object.create(null);
71400  function isUnknownElement(tag) {
71401      /* istanbul ignore if */
71402      if (!inBrowser) {
71403          return true;
71404      }
71405      if (isReservedTag(tag)) {
71406          return false;
71407      }
71408      tag = tag.toLowerCase();
71409      /* istanbul ignore if */
71410      if (unknownElementCache[tag] != null) {
71411          return unknownElementCache[tag];
71412      }
71413      var el = document.createElement(tag);
71414      if (tag.indexOf('-') > -1) {
71415          // https://stackoverflow.com/a/28210364/1070244
71416          return (unknownElementCache[tag] =
71417              el.constructor === window.HTMLUnknownElement ||
71418                  el.constructor === window.HTMLElement);
71419      }
71420      else {
71421          return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()));
71422      }
71423  }
71424  var isTextInputType = makeMap('text,number,password,search,email,tel,url');
71425
71426  /**
71427   * Query an element selector if it's not an element already.
71428   */
71429  function query(el) {
71430      if (typeof el === 'string') {
71431          var selected = document.querySelector(el);
71432          if (!selected) {
71433              warn$2('Cannot find element: ' + el);
71434              return document.createElement('div');
71435          }
71436          return selected;
71437      }
71438      else {
71439          return el;
71440      }
71441  }
71442
71443  function createElement(tagName, vnode) {
71444      var elm = document.createElement(tagName);
71445      if (tagName !== 'select') {
71446          return elm;
71447      }
71448      // false or null will remove the attribute but undefined will not
71449      if (vnode.data &&
71450          vnode.data.attrs &&
71451          vnode.data.attrs.multiple !== undefined) {
71452          elm.setAttribute('multiple', 'multiple');
71453      }
71454      return elm;
71455  }
71456  function createElementNS(namespace, tagName) {
71457      return document.createElementNS(namespaceMap[namespace], tagName);
71458  }
71459  function createTextNode(text) {
71460      return document.createTextNode(text);
71461  }
71462  function createComment(text) {
71463      return document.createComment(text);
71464  }
71465  function insertBefore(parentNode, newNode, referenceNode) {
71466      parentNode.insertBefore(newNode, referenceNode);
71467  }
71468  function removeChild(node, child) {
71469      node.removeChild(child);
71470  }
71471  function appendChild(node, child) {
71472      node.appendChild(child);
71473  }
71474  function parentNode(node) {
71475      return node.parentNode;
71476  }
71477  function nextSibling(node) {
71478      return node.nextSibling;
71479  }
71480  function tagName(node) {
71481      return node.tagName;
71482  }
71483  function setTextContent(node, text) {
71484      node.textContent = text;
71485  }
71486  function setStyleScope(node, scopeId) {
71487      node.setAttribute(scopeId, '');
71488  }
71489
71490  var nodeOps = /*#__PURE__*/Object.freeze({
71491    __proto__: null,
71492    createElement: createElement,
71493    createElementNS: createElementNS,
71494    createTextNode: createTextNode,
71495    createComment: createComment,
71496    insertBefore: insertBefore,
71497    removeChild: removeChild,
71498    appendChild: appendChild,
71499    parentNode: parentNode,
71500    nextSibling: nextSibling,
71501    tagName: tagName,
71502    setTextContent: setTextContent,
71503    setStyleScope: setStyleScope
71504  });
71505
71506  var ref = {
71507      create: function (_, vnode) {
71508          registerRef(vnode);
71509      },
71510      update: function (oldVnode, vnode) {
71511          if (oldVnode.data.ref !== vnode.data.ref) {
71512              registerRef(oldVnode, true);
71513              registerRef(vnode);
71514          }
71515      },
71516      destroy: function (vnode) {
71517          registerRef(vnode, true);
71518      }
71519  };
71520  function registerRef(vnode, isRemoval) {
71521      var ref = vnode.data.ref;
71522      if (!isDef(ref))
71523          return;
71524      var vm = vnode.context;
71525      var refValue = vnode.componentInstance || vnode.elm;
71526      var value = isRemoval ? null : refValue;
71527      var $refsValue = isRemoval ? undefined : refValue;
71528      if (isFunction(ref)) {
71529          invokeWithErrorHandling(ref, vm, [value], vm, "template ref function");
71530          return;
71531      }
71532      var isFor = vnode.data.refInFor;
71533      var _isString = typeof ref === 'string' || typeof ref === 'number';
71534      var _isRef = isRef(ref);
71535      var refs = vm.$refs;
71536      if (_isString || _isRef) {
71537          if (isFor) {
71538              var existing = _isString ? refs[ref] : ref.value;
71539              if (isRemoval) {
71540                  isArray(existing) && remove$2(existing, refValue);
71541              }
71542              else {
71543                  if (!isArray(existing)) {
71544                      if (_isString) {
71545                          refs[ref] = [refValue];
71546                          setSetupRef(vm, ref, refs[ref]);
71547                      }
71548                      else {
71549                          ref.value = [refValue];
71550                      }
71551                  }
71552                  else if (!existing.includes(refValue)) {
71553                      existing.push(refValue);
71554                  }
71555              }
71556          }
71557          else if (_isString) {
71558              if (isRemoval && refs[ref] !== refValue) {
71559                  return;
71560              }
71561              refs[ref] = $refsValue;
71562              setSetupRef(vm, ref, value);
71563          }
71564          else if (_isRef) {
71565              if (isRemoval && ref.value !== refValue) {
71566                  return;
71567              }
71568              ref.value = value;
71569          }
71570          else {
71571              warn$2("Invalid template ref type: ".concat(typeof ref));
71572          }
71573      }
71574  }
71575  function setSetupRef(_a, key, val) {
71576      var _setupState = _a._setupState;
71577      if (_setupState && hasOwn(_setupState, key)) {
71578          if (isRef(_setupState[key])) {
71579              _setupState[key].value = val;
71580          }
71581          else {
71582              _setupState[key] = val;
71583          }
71584      }
71585  }
71586
71587  /**
71588   * Virtual DOM patching algorithm based on Snabbdom by
71589   * Simon Friis Vindum (@paldepind)
71590   * Licensed under the MIT License
71591   * https://github.com/paldepind/snabbdom/blob/master/LICENSE
71592   *
71593   * modified by Evan You (@yyx990803)
71594   *
71595   * Not type-checking this because this file is perf-critical and the cost
71596   * of making flow understand it is not worth it.
71597   */
71598  var emptyNode = new VNode('', {}, []);
71599  var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
71600  function sameVnode(a, b) {
71601      return (a.key === b.key &&
71602          a.asyncFactory === b.asyncFactory &&
71603          ((a.tag === b.tag &&
71604              a.isComment === b.isComment &&
71605              isDef(a.data) === isDef(b.data) &&
71606              sameInputType(a, b)) ||
71607              (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error))));
71608  }
71609  function sameInputType(a, b) {
71610      if (a.tag !== 'input')
71611          return true;
71612      var i;
71613      var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type;
71614      var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type;
71615      return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB));
71616  }
71617  function createKeyToOldIdx(children, beginIdx, endIdx) {
71618      var i, key;
71619      var map = {};
71620      for (i = beginIdx; i <= endIdx; ++i) {
71621          key = children[i].key;
71622          if (isDef(key))
71623              map[key] = i;
71624      }
71625      return map;
71626  }
71627  function createPatchFunction(backend) {
71628      var i, j;
71629      var cbs = {};
71630      var modules = backend.modules, nodeOps = backend.nodeOps;
71631      for (i = 0; i < hooks.length; ++i) {
71632          cbs[hooks[i]] = [];
71633          for (j = 0; j < modules.length; ++j) {
71634              if (isDef(modules[j][hooks[i]])) {
71635                  cbs[hooks[i]].push(modules[j][hooks[i]]);
71636              }
71637          }
71638      }
71639      function emptyNodeAt(elm) {
71640          return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);
71641      }
71642      function createRmCb(childElm, listeners) {
71643          function remove() {
71644              if (--remove.listeners === 0) {
71645                  removeNode(childElm);
71646              }
71647          }
71648          remove.listeners = listeners;
71649          return remove;
71650      }
71651      function removeNode(el) {
71652          var parent = nodeOps.parentNode(el);
71653          // element may have already been removed due to v-html / v-text
71654          if (isDef(parent)) {
71655              nodeOps.removeChild(parent, el);
71656          }
71657      }
71658      function isUnknownElement(vnode, inVPre) {
71659          return (!inVPre &&
71660              !vnode.ns &&
71661              !(config.ignoredElements.length &&
71662                  config.ignoredElements.some(function (ignore) {
71663                      return isRegExp(ignore)
71664                          ? ignore.test(vnode.tag)
71665                          : ignore === vnode.tag;
71666                  })) &&
71667              config.isUnknownElement(vnode.tag));
71668      }
71669      var creatingElmInVPre = 0;
71670      function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {
71671          if (isDef(vnode.elm) && isDef(ownerArray)) {
71672              // This vnode was used in a previous render!
71673              // now it's used as a new node, overwriting its elm would cause
71674              // potential patch errors down the road when it's used as an insertion
71675              // reference node. Instead, we clone the node on-demand before creating
71676              // associated DOM element for it.
71677              vnode = ownerArray[index] = cloneVNode(vnode);
71678          }
71679          vnode.isRootInsert = !nested; // for transition enter check
71680          if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
71681              return;
71682          }
71683          var data = vnode.data;
71684          var children = vnode.children;
71685          var tag = vnode.tag;
71686          if (isDef(tag)) {
71687              {
71688                  if (data && data.pre) {
71689                      creatingElmInVPre++;
71690                  }
71691                  if (isUnknownElement(vnode, creatingElmInVPre)) {
71692                      warn$2('Unknown custom element: <' +
71693                          tag +
71694                          '> - did you ' +
71695                          'register the component correctly? For recursive components, ' +
71696                          'make sure to provide the "name" option.', vnode.context);
71697                  }
71698              }
71699              vnode.elm = vnode.ns
71700                  ? nodeOps.createElementNS(vnode.ns, tag)
71701                  : nodeOps.createElement(tag, vnode);
71702              setScope(vnode);
71703              createChildren(vnode, children, insertedVnodeQueue);
71704              if (isDef(data)) {
71705                  invokeCreateHooks(vnode, insertedVnodeQueue);
71706              }
71707              insert(parentElm, vnode.elm, refElm);
71708              if (data && data.pre) {
71709                  creatingElmInVPre--;
71710              }
71711          }
71712          else if (isTrue(vnode.isComment)) {
71713              vnode.elm = nodeOps.createComment(vnode.text);
71714              insert(parentElm, vnode.elm, refElm);
71715          }
71716          else {
71717              vnode.elm = nodeOps.createTextNode(vnode.text);
71718              insert(parentElm, vnode.elm, refElm);
71719          }
71720      }
71721      function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
71722          var i = vnode.data;
71723          if (isDef(i)) {
71724              var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
71725              if (isDef((i = i.hook)) && isDef((i = i.init))) {
71726                  i(vnode, false /* hydrating */);
71727              }
71728              // after calling the init hook, if the vnode is a child component
71729              // it should've created a child instance and mounted it. the child
71730              // component also has set the placeholder vnode's elm.
71731              // in that case we can just return the element and be done.
71732              if (isDef(vnode.componentInstance)) {
71733                  initComponent(vnode, insertedVnodeQueue);
71734                  insert(parentElm, vnode.elm, refElm);
71735                  if (isTrue(isReactivated)) {
71736                      reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
71737                  }
71738                  return true;
71739              }
71740          }
71741      }
71742      function initComponent(vnode, insertedVnodeQueue) {
71743          if (isDef(vnode.data.pendingInsert)) {
71744              insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
71745              vnode.data.pendingInsert = null;
71746          }
71747          vnode.elm = vnode.componentInstance.$el;
71748          if (isPatchable(vnode)) {
71749              invokeCreateHooks(vnode, insertedVnodeQueue);
71750              setScope(vnode);
71751          }
71752          else {
71753              // empty component root.
71754              // skip all element-related modules except for ref (#3455)
71755              registerRef(vnode);
71756              // make sure to invoke the insert hook
71757              insertedVnodeQueue.push(vnode);
71758          }
71759      }
71760      function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
71761          var i;
71762          // hack for #4339: a reactivated component with inner transition
71763          // does not trigger because the inner node's created hooks are not called
71764          // again. It's not ideal to involve module-specific logic in here but
71765          // there doesn't seem to be a better way to do it.
71766          var innerNode = vnode;
71767          while (innerNode.componentInstance) {
71768              innerNode = innerNode.componentInstance._vnode;
71769              if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {
71770                  for (i = 0; i < cbs.activate.length; ++i) {
71771                      cbs.activate[i](emptyNode, innerNode);
71772                  }
71773                  insertedVnodeQueue.push(innerNode);
71774                  break;
71775              }
71776          }
71777          // unlike a newly created component,
71778          // a reactivated keep-alive component doesn't insert itself
71779          insert(parentElm, vnode.elm, refElm);
71780      }
71781      function insert(parent, elm, ref) {
71782          if (isDef(parent)) {
71783              if (isDef(ref)) {
71784                  if (nodeOps.parentNode(ref) === parent) {
71785                      nodeOps.insertBefore(parent, elm, ref);
71786                  }
71787              }
71788              else {
71789                  nodeOps.appendChild(parent, elm);
71790              }
71791          }
71792      }
71793      function createChildren(vnode, children, insertedVnodeQueue) {
71794          if (isArray(children)) {
71795              {
71796                  checkDuplicateKeys(children);
71797              }
71798              for (var i_1 = 0; i_1 < children.length; ++i_1) {
71799                  createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1);
71800              }
71801          }
71802          else if (isPrimitive(vnode.text)) {
71803              nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
71804          }
71805      }
71806      function isPatchable(vnode) {
71807          while (vnode.componentInstance) {
71808              vnode = vnode.componentInstance._vnode;
71809          }
71810          return isDef(vnode.tag);
71811      }
71812      function invokeCreateHooks(vnode, insertedVnodeQueue) {
71813          for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) {
71814              cbs.create[i_2](emptyNode, vnode);
71815          }
71816          i = vnode.data.hook; // Reuse variable
71817          if (isDef(i)) {
71818              if (isDef(i.create))
71819                  i.create(emptyNode, vnode);
71820              if (isDef(i.insert))
71821                  insertedVnodeQueue.push(vnode);
71822          }
71823      }
71824      // set scope id attribute for scoped CSS.
71825      // this is implemented as a special case to avoid the overhead
71826      // of going through the normal attribute patching process.
71827      function setScope(vnode) {
71828          var i;
71829          if (isDef((i = vnode.fnScopeId))) {
71830              nodeOps.setStyleScope(vnode.elm, i);
71831          }
71832          else {
71833              var ancestor = vnode;
71834              while (ancestor) {
71835                  if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {
71836                      nodeOps.setStyleScope(vnode.elm, i);
71837                  }
71838                  ancestor = ancestor.parent;
71839              }
71840          }
71841          // for slot content they should also get the scopeId from the host instance.
71842          if (isDef((i = activeInstance)) &&
71843              i !== vnode.context &&
71844              i !== vnode.fnContext &&
71845              isDef((i = i.$options._scopeId))) {
71846              nodeOps.setStyleScope(vnode.elm, i);
71847          }
71848      }
71849      function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
71850          for (; startIdx <= endIdx; ++startIdx) {
71851              createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
71852          }
71853      }
71854      function invokeDestroyHook(vnode) {
71855          var i, j;
71856          var data = vnode.data;
71857          if (isDef(data)) {
71858              if (isDef((i = data.hook)) && isDef((i = i.destroy)))
71859                  i(vnode);
71860              for (i = 0; i < cbs.destroy.length; ++i)
71861                  cbs.destroy[i](vnode);
71862          }
71863          if (isDef((i = vnode.children))) {
71864              for (j = 0; j < vnode.children.length; ++j) {
71865                  invokeDestroyHook(vnode.children[j]);
71866              }
71867          }
71868      }
71869      function removeVnodes(vnodes, startIdx, endIdx) {
71870          for (; startIdx <= endIdx; ++startIdx) {
71871              var ch = vnodes[startIdx];
71872              if (isDef(ch)) {
71873                  if (isDef(ch.tag)) {
71874                      removeAndInvokeRemoveHook(ch);
71875                      invokeDestroyHook(ch);
71876                  }
71877                  else {
71878                      // Text node
71879                      removeNode(ch.elm);
71880                  }
71881              }
71882          }
71883      }
71884      function removeAndInvokeRemoveHook(vnode, rm) {
71885          if (isDef(rm) || isDef(vnode.data)) {
71886              var i_3;
71887              var listeners = cbs.remove.length + 1;
71888              if (isDef(rm)) {
71889                  // we have a recursively passed down rm callback
71890                  // increase the listeners count
71891                  rm.listeners += listeners;
71892              }
71893              else {
71894                  // directly removing
71895                  rm = createRmCb(vnode.elm, listeners);
71896              }
71897              // recursively invoke hooks on child component root node
71898              if (isDef((i_3 = vnode.componentInstance)) &&
71899                  isDef((i_3 = i_3._vnode)) &&
71900                  isDef(i_3.data)) {
71901                  removeAndInvokeRemoveHook(i_3, rm);
71902              }
71903              for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) {
71904                  cbs.remove[i_3](vnode, rm);
71905              }
71906              if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) {
71907                  i_3(vnode, rm);
71908              }
71909              else {
71910                  rm();
71911              }
71912          }
71913          else {
71914              removeNode(vnode.elm);
71915          }
71916      }
71917      function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
71918          var oldStartIdx = 0;
71919          var newStartIdx = 0;
71920          var oldEndIdx = oldCh.length - 1;
71921          var oldStartVnode = oldCh[0];
71922          var oldEndVnode = oldCh[oldEndIdx];
71923          var newEndIdx = newCh.length - 1;
71924          var newStartVnode = newCh[0];
71925          var newEndVnode = newCh[newEndIdx];
71926          var oldKeyToIdx, idxInOld, vnodeToMove, refElm;
71927          // removeOnly is a special flag used only by <transition-group>
71928          // to ensure removed elements stay in correct relative positions
71929          // during leaving transitions
71930          var canMove = !removeOnly;
71931          {
71932              checkDuplicateKeys(newCh);
71933          }
71934          while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
71935              if (isUndef(oldStartVnode)) {
71936                  oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
71937              }
71938              else if (isUndef(oldEndVnode)) {
71939                  oldEndVnode = oldCh[--oldEndIdx];
71940              }
71941              else if (sameVnode(oldStartVnode, newStartVnode)) {
71942                  patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
71943                  oldStartVnode = oldCh[++oldStartIdx];
71944                  newStartVnode = newCh[++newStartIdx];
71945              }
71946              else if (sameVnode(oldEndVnode, newEndVnode)) {
71947                  patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
71948                  oldEndVnode = oldCh[--oldEndIdx];
71949                  newEndVnode = newCh[--newEndIdx];
71950              }
71951              else if (sameVnode(oldStartVnode, newEndVnode)) {
71952                  // Vnode moved right
71953                  patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
71954                  canMove &&
71955                      nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
71956                  oldStartVnode = oldCh[++oldStartIdx];
71957                  newEndVnode = newCh[--newEndIdx];
71958              }
71959              else if (sameVnode(oldEndVnode, newStartVnode)) {
71960                  // Vnode moved left
71961                  patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
71962                  canMove &&
71963                      nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
71964                  oldEndVnode = oldCh[--oldEndIdx];
71965                  newStartVnode = newCh[++newStartIdx];
71966              }
71967              else {
71968                  if (isUndef(oldKeyToIdx))
71969                      oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);
71970                  idxInOld = isDef(newStartVnode.key)
71971                      ? oldKeyToIdx[newStartVnode.key]
71972                      : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
71973                  if (isUndef(idxInOld)) {
71974                      // New element
71975                      createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
71976                  }
71977                  else {
71978                      vnodeToMove = oldCh[idxInOld];
71979                      if (sameVnode(vnodeToMove, newStartVnode)) {
71980                          patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
71981                          oldCh[idxInOld] = undefined;
71982                          canMove &&
71983                              nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
71984                      }
71985                      else {
71986                          // same key but different element. treat as new element
71987                          createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
71988                      }
71989                  }
71990                  newStartVnode = newCh[++newStartIdx];
71991              }
71992          }
71993          if (oldStartIdx > oldEndIdx) {
71994              refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
71995              addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
71996          }
71997          else if (newStartIdx > newEndIdx) {
71998              removeVnodes(oldCh, oldStartIdx, oldEndIdx);
71999          }
72000      }
72001      function checkDuplicateKeys(children) {
72002          var seenKeys = {};
72003          for (var i_4 = 0; i_4 < children.length; i_4++) {
72004              var vnode = children[i_4];
72005              var key = vnode.key;
72006              if (isDef(key)) {
72007                  if (seenKeys[key]) {
72008                      warn$2("Duplicate keys detected: '".concat(key, "'. This may cause an update error."), vnode.context);
72009                  }
72010                  else {
72011                      seenKeys[key] = true;
72012                  }
72013              }
72014          }
72015      }
72016      function findIdxInOld(node, oldCh, start, end) {
72017          for (var i_5 = start; i_5 < end; i_5++) {
72018              var c = oldCh[i_5];
72019              if (isDef(c) && sameVnode(node, c))
72020                  return i_5;
72021          }
72022      }
72023      function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {
72024          if (oldVnode === vnode) {
72025              return;
72026          }
72027          if (isDef(vnode.elm) && isDef(ownerArray)) {
72028              // clone reused vnode
72029              vnode = ownerArray[index] = cloneVNode(vnode);
72030          }
72031          var elm = (vnode.elm = oldVnode.elm);
72032          if (isTrue(oldVnode.isAsyncPlaceholder)) {
72033              if (isDef(vnode.asyncFactory.resolved)) {
72034                  hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
72035              }
72036              else {
72037                  vnode.isAsyncPlaceholder = true;
72038              }
72039              return;
72040          }
72041          // reuse element for static trees.
72042          // note we only do this if the vnode is cloned -
72043          // if the new node is not cloned it means the render functions have been
72044          // reset by the hot-reload-api and we need to do a proper re-render.
72045          if (isTrue(vnode.isStatic) &&
72046              isTrue(oldVnode.isStatic) &&
72047              vnode.key === oldVnode.key &&
72048              (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {
72049              vnode.componentInstance = oldVnode.componentInstance;
72050              return;
72051          }
72052          var i;
72053          var data = vnode.data;
72054          if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {
72055              i(oldVnode, vnode);
72056          }
72057          var oldCh = oldVnode.children;
72058          var ch = vnode.children;
72059          if (isDef(data) && isPatchable(vnode)) {
72060              for (i = 0; i < cbs.update.length; ++i)
72061                  cbs.update[i](oldVnode, vnode);
72062              if (isDef((i = data.hook)) && isDef((i = i.update)))
72063                  i(oldVnode, vnode);
72064          }
72065          if (isUndef(vnode.text)) {
72066              if (isDef(oldCh) && isDef(ch)) {
72067                  if (oldCh !== ch)
72068                      updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);
72069              }
72070              else if (isDef(ch)) {
72071                  {
72072                      checkDuplicateKeys(ch);
72073                  }
72074                  if (isDef(oldVnode.text))
72075                      nodeOps.setTextContent(elm, '');
72076                  addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
72077              }
72078              else if (isDef(oldCh)) {
72079                  removeVnodes(oldCh, 0, oldCh.length - 1);
72080              }
72081              else if (isDef(oldVnode.text)) {
72082                  nodeOps.setTextContent(elm, '');
72083              }
72084          }
72085          else if (oldVnode.text !== vnode.text) {
72086              nodeOps.setTextContent(elm, vnode.text);
72087          }
72088          if (isDef(data)) {
72089              if (isDef((i = data.hook)) && isDef((i = i.postpatch)))
72090                  i(oldVnode, vnode);
72091          }
72092      }
72093      function invokeInsertHook(vnode, queue, initial) {
72094          // delay insert hooks for component root nodes, invoke them after the
72095          // element is really inserted
72096          if (isTrue(initial) && isDef(vnode.parent)) {
72097              vnode.parent.data.pendingInsert = queue;
72098          }
72099          else {
72100              for (var i_6 = 0; i_6 < queue.length; ++i_6) {
72101                  queue[i_6].data.hook.insert(queue[i_6]);
72102              }
72103          }
72104      }
72105      var hydrationBailed = false;
72106      // list of modules that can skip create hook during hydration because they
72107      // are already rendered on the client or has no need for initialization
72108      // Note: style is excluded because it relies on initial clone for future
72109      // deep updates (#7063).
72110      var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
72111      // Note: this is a browser-only function so we can assume elms are DOM nodes.
72112      function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {
72113          var i;
72114          var tag = vnode.tag, data = vnode.data, children = vnode.children;
72115          inVPre = inVPre || (data && data.pre);
72116          vnode.elm = elm;
72117          if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
72118              vnode.isAsyncPlaceholder = true;
72119              return true;
72120          }
72121          // assert node match
72122          {
72123              if (!assertNodeMatch(elm, vnode, inVPre)) {
72124                  return false;
72125              }
72126          }
72127          if (isDef(data)) {
72128              if (isDef((i = data.hook)) && isDef((i = i.init)))
72129                  i(vnode, true /* hydrating */);
72130              if (isDef((i = vnode.componentInstance))) {
72131                  // child component. it should have hydrated its own tree.
72132                  initComponent(vnode, insertedVnodeQueue);
72133                  return true;
72134              }
72135          }
72136          if (isDef(tag)) {
72137              if (isDef(children)) {
72138                  // empty element, allow client to pick up and populate children
72139                  if (!elm.hasChildNodes()) {
72140                      createChildren(vnode, children, insertedVnodeQueue);
72141                  }
72142                  else {
72143                      // v-html and domProps: innerHTML
72144                      if (isDef((i = data)) &&
72145                          isDef((i = i.domProps)) &&
72146                          isDef((i = i.innerHTML))) {
72147                          if (i !== elm.innerHTML) {
72148                              /* istanbul ignore if */
72149                              if (typeof console !== 'undefined' &&
72150                                  !hydrationBailed) {
72151                                  hydrationBailed = true;
72152                                  console.warn('Parent: ', elm);
72153                                  console.warn('server innerHTML: ', i);
72154                                  console.warn('client innerHTML: ', elm.innerHTML);
72155                              }
72156                              return false;
72157                          }
72158                      }
72159                      else {
72160                          // iterate and compare children lists
72161                          var childrenMatch = true;
72162                          var childNode = elm.firstChild;
72163                          for (var i_7 = 0; i_7 < children.length; i_7++) {
72164                              if (!childNode ||
72165                                  !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) {
72166                                  childrenMatch = false;
72167                                  break;
72168                              }
72169                              childNode = childNode.nextSibling;
72170                          }
72171                          // if childNode is not null, it means the actual childNodes list is
72172                          // longer than the virtual children list.
72173                          if (!childrenMatch || childNode) {
72174                              /* istanbul ignore if */
72175                              if (typeof console !== 'undefined' &&
72176                                  !hydrationBailed) {
72177                                  hydrationBailed = true;
72178                                  console.warn('Parent: ', elm);
72179                                  console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
72180                              }
72181                              return false;
72182                          }
72183                      }
72184                  }
72185              }
72186              if (isDef(data)) {
72187                  var fullInvoke = false;
72188                  for (var key in data) {
72189                      if (!isRenderedModule(key)) {
72190                          fullInvoke = true;
72191                          invokeCreateHooks(vnode, insertedVnodeQueue);
72192                          break;
72193                      }
72194                  }
72195                  if (!fullInvoke && data['class']) {
72196                      // ensure collecting deps for deep class bindings for future updates
72197                      traverse(data['class']);
72198                  }
72199              }
72200          }
72201          else if (elm.data !== vnode.text) {
72202              elm.data = vnode.text;
72203          }
72204          return true;
72205      }
72206      function assertNodeMatch(node, vnode, inVPre) {
72207          if (isDef(vnode.tag)) {
72208              return (vnode.tag.indexOf('vue-component') === 0 ||
72209                  (!isUnknownElement(vnode, inVPre) &&
72210                      vnode.tag.toLowerCase() ===
72211                          (node.tagName && node.tagName.toLowerCase())));
72212          }
72213          else {
72214              return node.nodeType === (vnode.isComment ? 8 : 3);
72215          }
72216      }
72217      return function patch(oldVnode, vnode, hydrating, removeOnly) {
72218          if (isUndef(vnode)) {
72219              if (isDef(oldVnode))
72220                  invokeDestroyHook(oldVnode);
72221              return;
72222          }
72223          var isInitialPatch = false;
72224          var insertedVnodeQueue = [];
72225          if (isUndef(oldVnode)) {
72226              // empty mount (likely as component), create new root element
72227              isInitialPatch = true;
72228              createElm(vnode, insertedVnodeQueue);
72229          }
72230          else {
72231              var isRealElement = isDef(oldVnode.nodeType);
72232              if (!isRealElement && sameVnode(oldVnode, vnode)) {
72233                  // patch existing root node
72234                  patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);
72235              }
72236              else {
72237                  if (isRealElement) {
72238                      // mounting to a real element
72239                      // check if this is server-rendered content and if we can perform
72240                      // a successful hydration.
72241                      if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
72242                          oldVnode.removeAttribute(SSR_ATTR);
72243                          hydrating = true;
72244                      }
72245                      if (isTrue(hydrating)) {
72246                          if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
72247                              invokeInsertHook(vnode, insertedVnodeQueue, true);
72248                              return oldVnode;
72249                          }
72250                          else {
72251                              warn$2('The client-side rendered virtual DOM tree is not matching ' +
72252                                  'server-rendered content. This is likely caused by incorrect ' +
72253                                  'HTML markup, for example nesting block-level elements inside ' +
72254                                  '<p>, or missing <tbody>. Bailing hydration and performing ' +
72255                                  'full client-side render.');
72256                          }
72257                      }
72258                      // either not server-rendered, or hydration failed.
72259                      // create an empty node and replace it
72260                      oldVnode = emptyNodeAt(oldVnode);
72261                  }
72262                  // replacing existing element
72263                  var oldElm = oldVnode.elm;
72264                  var parentElm = nodeOps.parentNode(oldElm);
72265                  // create new node
72266                  createElm(vnode, insertedVnodeQueue, 
72267                  // extremely rare edge case: do not insert if old element is in a
72268                  // leaving transition. Only happens when combining transition +
72269                  // keep-alive + HOCs. (#4590)
72270                  oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));
72271                  // update parent placeholder node element, recursively
72272                  if (isDef(vnode.parent)) {
72273                      var ancestor = vnode.parent;
72274                      var patchable = isPatchable(vnode);
72275                      while (ancestor) {
72276                          for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) {
72277                              cbs.destroy[i_8](ancestor);
72278                          }
72279                          ancestor.elm = vnode.elm;
72280                          if (patchable) {
72281                              for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) {
72282                                  cbs.create[i_9](emptyNode, ancestor);
72283                              }
72284                              // #6513
72285                              // invoke insert hooks that may have been merged by create hooks.
72286                              // e.g. for directives that uses the "inserted" hook.
72287                              var insert_1 = ancestor.data.hook.insert;
72288                              if (insert_1.merged) {
72289                                  // start at index 1 to avoid re-invoking component mounted hook
72290                                  // clone insert hooks to avoid being mutated during iteration.
72291                                  // e.g. for customed directives under transition group.
72292                                  var cloned = insert_1.fns.slice(1);
72293                                  for (var i_10 = 0; i_10 < cloned.length; i_10++) {
72294                                      cloned[i_10]();
72295                                  }
72296                              }
72297                          }
72298                          else {
72299                              registerRef(ancestor);
72300                          }
72301                          ancestor = ancestor.parent;
72302                      }
72303                  }
72304                  // destroy old node
72305                  if (isDef(parentElm)) {
72306                      removeVnodes([oldVnode], 0, 0);
72307                  }
72308                  else if (isDef(oldVnode.tag)) {
72309                      invokeDestroyHook(oldVnode);
72310                  }
72311              }
72312          }
72313          invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
72314          return vnode.elm;
72315      };
72316  }
72317
72318  var directives$1 = {
72319      create: updateDirectives,
72320      update: updateDirectives,
72321      destroy: function unbindDirectives(vnode) {
72322          // @ts-expect-error emptyNode is not VNodeWithData
72323          updateDirectives(vnode, emptyNode);
72324      }
72325  };
72326  function updateDirectives(oldVnode, vnode) {
72327      if (oldVnode.data.directives || vnode.data.directives) {
72328          _update(oldVnode, vnode);
72329      }
72330  }
72331  function _update(oldVnode, vnode) {
72332      var isCreate = oldVnode === emptyNode;
72333      var isDestroy = vnode === emptyNode;
72334      var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);
72335      var newDirs = normalizeDirectives(vnode.data.directives, vnode.context);
72336      var dirsWithInsert = [];
72337      var dirsWithPostpatch = [];
72338      var key, oldDir, dir;
72339      for (key in newDirs) {
72340          oldDir = oldDirs[key];
72341          dir = newDirs[key];
72342          if (!oldDir) {
72343              // new directive, bind
72344              callHook(dir, 'bind', vnode, oldVnode);
72345              if (dir.def && dir.def.inserted) {
72346                  dirsWithInsert.push(dir);
72347              }
72348          }
72349          else {
72350              // existing directive, update
72351              dir.oldValue = oldDir.value;
72352              dir.oldArg = oldDir.arg;
72353              callHook(dir, 'update', vnode, oldVnode);
72354              if (dir.def && dir.def.componentUpdated) {
72355                  dirsWithPostpatch.push(dir);
72356              }
72357          }
72358      }
72359      if (dirsWithInsert.length) {
72360          var callInsert = function () {
72361              for (var i = 0; i < dirsWithInsert.length; i++) {
72362                  callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);
72363              }
72364          };
72365          if (isCreate) {
72366              mergeVNodeHook(vnode, 'insert', callInsert);
72367          }
72368          else {
72369              callInsert();
72370          }
72371      }
72372      if (dirsWithPostpatch.length) {
72373          mergeVNodeHook(vnode, 'postpatch', function () {
72374              for (var i = 0; i < dirsWithPostpatch.length; i++) {
72375                  callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
72376              }
72377          });
72378      }
72379      if (!isCreate) {
72380          for (key in oldDirs) {
72381              if (!newDirs[key]) {
72382                  // no longer present, unbind
72383                  callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
72384              }
72385          }
72386      }
72387  }
72388  var emptyModifiers = Object.create(null);
72389  function normalizeDirectives(dirs, vm) {
72390      var res = Object.create(null);
72391      if (!dirs) {
72392          // $flow-disable-line
72393          return res;
72394      }
72395      var i, dir;
72396      for (i = 0; i < dirs.length; i++) {
72397          dir = dirs[i];
72398          if (!dir.modifiers) {
72399              // $flow-disable-line
72400              dir.modifiers = emptyModifiers;
72401          }
72402          res[getRawDirName(dir)] = dir;
72403          if (vm._setupState && vm._setupState.__sfc) {
72404              var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);
72405              if (typeof setupDef === 'function') {
72406                  dir.def = {
72407                      bind: setupDef,
72408                      update: setupDef,
72409                  };
72410              }
72411              else {
72412                  dir.def = setupDef;
72413              }
72414          }
72415          dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);
72416      }
72417      // $flow-disable-line
72418      return res;
72419  }
72420  function getRawDirName(dir) {
72421      return (dir.rawName || "".concat(dir.name, ".").concat(Object.keys(dir.modifiers || {}).join('.')));
72422  }
72423  function callHook(dir, hook, vnode, oldVnode, isDestroy) {
72424      var fn = dir.def && dir.def[hook];
72425      if (fn) {
72426          try {
72427              fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
72428          }
72429          catch (e) {
72430              handleError(e, vnode.context, "directive ".concat(dir.name, " ").concat(hook, " hook"));
72431          }
72432      }
72433  }
72434
72435  var baseModules = [ref, directives$1];
72436
72437  function updateAttrs(oldVnode, vnode) {
72438      var opts = vnode.componentOptions;
72439      if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
72440          return;
72441      }
72442      if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
72443          return;
72444      }
72445      var key, cur, old;
72446      var elm = vnode.elm;
72447      var oldAttrs = oldVnode.data.attrs || {};
72448      var attrs = vnode.data.attrs || {};
72449      // clone observed objects, as the user probably wants to mutate it
72450      if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {
72451          attrs = vnode.data.attrs = extend({}, attrs);
72452      }
72453      for (key in attrs) {
72454          cur = attrs[key];
72455          old = oldAttrs[key];
72456          if (old !== cur) {
72457              setAttr(elm, key, cur, vnode.data.pre);
72458          }
72459      }
72460      // #4391: in IE9, setting type can reset value for input[type=radio]
72461      // #6666: IE/Edge forces progress value down to 1 before setting a max
72462      /* istanbul ignore if */
72463      if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
72464          setAttr(elm, 'value', attrs.value);
72465      }
72466      for (key in oldAttrs) {
72467          if (isUndef(attrs[key])) {
72468              if (isXlink(key)) {
72469                  elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
72470              }
72471              else if (!isEnumeratedAttr(key)) {
72472                  elm.removeAttribute(key);
72473              }
72474          }
72475      }
72476  }
72477  function setAttr(el, key, value, isInPre) {
72478      if (isInPre || el.tagName.indexOf('-') > -1) {
72479          baseSetAttr(el, key, value);
72480      }
72481      else if (isBooleanAttr(key)) {
72482          // set attribute for blank value
72483          // e.g. <option disabled>Select one</option>
72484          if (isFalsyAttrValue(value)) {
72485              el.removeAttribute(key);
72486          }
72487          else {
72488              // technically allowfullscreen is a boolean attribute for <iframe>,
72489              // but Flash expects a value of "true" when used on <embed> tag
72490              value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;
72491              el.setAttribute(key, value);
72492          }
72493      }
72494      else if (isEnumeratedAttr(key)) {
72495          el.setAttribute(key, convertEnumeratedValue(key, value));
72496      }
72497      else if (isXlink(key)) {
72498          if (isFalsyAttrValue(value)) {
72499              el.removeAttributeNS(xlinkNS, getXlinkProp(key));
72500          }
72501          else {
72502              el.setAttributeNS(xlinkNS, key, value);
72503          }
72504      }
72505      else {
72506          baseSetAttr(el, key, value);
72507      }
72508  }
72509  function baseSetAttr(el, key, value) {
72510      if (isFalsyAttrValue(value)) {
72511          el.removeAttribute(key);
72512      }
72513      else {
72514          // #7138: IE10 & 11 fires input event when setting placeholder on
72515          // <textarea>... block the first input event and remove the blocker
72516          // immediately.
72517          /* istanbul ignore if */
72518          if (isIE &&
72519              !isIE9 &&
72520              el.tagName === 'TEXTAREA' &&
72521              key === 'placeholder' &&
72522              value !== '' &&
72523              !el.__ieph) {
72524              var blocker_1 = function (e) {
72525                  e.stopImmediatePropagation();
72526                  el.removeEventListener('input', blocker_1);
72527              };
72528              el.addEventListener('input', blocker_1);
72529              // $flow-disable-line
72530              el.__ieph = true; /* IE placeholder patched */
72531          }
72532          el.setAttribute(key, value);
72533      }
72534  }
72535  var attrs = {
72536      create: updateAttrs,
72537      update: updateAttrs
72538  };
72539
72540  function updateClass(oldVnode, vnode) {
72541      var el = vnode.elm;
72542      var data = vnode.data;
72543      var oldData = oldVnode.data;
72544      if (isUndef(data.staticClass) &&
72545          isUndef(data.class) &&
72546          (isUndef(oldData) ||
72547              (isUndef(oldData.staticClass) && isUndef(oldData.class)))) {
72548          return;
72549      }
72550      var cls = genClassForVnode(vnode);
72551      // handle transition classes
72552      var transitionClass = el._transitionClasses;
72553      if (isDef(transitionClass)) {
72554          cls = concat(cls, stringifyClass(transitionClass));
72555      }
72556      // set the class
72557      if (cls !== el._prevClass) {
72558          el.setAttribute('class', cls);
72559          el._prevClass = cls;
72560      }
72561  }
72562  var klass$1 = {
72563      create: updateClass,
72564      update: updateClass
72565  };
72566
72567  var validDivisionCharRE = /[\w).+\-_$\]]/;
72568  function parseFilters(exp) {
72569      var inSingle = false;
72570      var inDouble = false;
72571      var inTemplateString = false;
72572      var inRegex = false;
72573      var curly = 0;
72574      var square = 0;
72575      var paren = 0;
72576      var lastFilterIndex = 0;
72577      var c, prev, i, expression, filters;
72578      for (i = 0; i < exp.length; i++) {
72579          prev = c;
72580          c = exp.charCodeAt(i);
72581          if (inSingle) {
72582              if (c === 0x27 && prev !== 0x5c)
72583                  inSingle = false;
72584          }
72585          else if (inDouble) {
72586              if (c === 0x22 && prev !== 0x5c)
72587                  inDouble = false;
72588          }
72589          else if (inTemplateString) {
72590              if (c === 0x60 && prev !== 0x5c)
72591                  inTemplateString = false;
72592          }
72593          else if (inRegex) {
72594              if (c === 0x2f && prev !== 0x5c)
72595                  inRegex = false;
72596          }
72597          else if (c === 0x7c && // pipe
72598              exp.charCodeAt(i + 1) !== 0x7c &&
72599              exp.charCodeAt(i - 1) !== 0x7c &&
72600              !curly &&
72601              !square &&
72602              !paren) {
72603              if (expression === undefined) {
72604                  // first filter, end of expression
72605                  lastFilterIndex = i + 1;
72606                  expression = exp.slice(0, i).trim();
72607              }
72608              else {
72609                  pushFilter();
72610              }
72611          }
72612          else {
72613              switch (c) {
72614                  case 0x22:
72615                      inDouble = true;
72616                      break; // "
72617                  case 0x27:
72618                      inSingle = true;
72619                      break; // '
72620                  case 0x60:
72621                      inTemplateString = true;
72622                      break; // `
72623                  case 0x28:
72624                      paren++;
72625                      break; // (
72626                  case 0x29:
72627                      paren--;
72628                      break; // )
72629                  case 0x5b:
72630                      square++;
72631                      break; // [
72632                  case 0x5d:
72633                      square--;
72634                      break; // ]
72635                  case 0x7b:
72636                      curly++;
72637                      break; // {
72638                  case 0x7d:
72639                      curly--;
72640                      break; // }
72641              }
72642              if (c === 0x2f) {
72643                  // /
72644                  var j = i - 1;
72645                  var p 
72646                  // find first non-whitespace prev char
72647                  = void 0;
72648                  // find first non-whitespace prev char
72649                  for (; j >= 0; j--) {
72650                      p = exp.charAt(j);
72651                      if (p !== ' ')
72652                          break;
72653                  }
72654                  if (!p || !validDivisionCharRE.test(p)) {
72655                      inRegex = true;
72656                  }
72657              }
72658          }
72659      }
72660      if (expression === undefined) {
72661          expression = exp.slice(0, i).trim();
72662      }
72663      else if (lastFilterIndex !== 0) {
72664          pushFilter();
72665      }
72666      function pushFilter() {
72667          (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
72668          lastFilterIndex = i + 1;
72669      }
72670      if (filters) {
72671          for (i = 0; i < filters.length; i++) {
72672              expression = wrapFilter(expression, filters[i]);
72673          }
72674      }
72675      return expression;
72676  }
72677  function wrapFilter(exp, filter) {
72678      var i = filter.indexOf('(');
72679      if (i < 0) {
72680          // _f: resolveFilter
72681          return "_f(\"".concat(filter, "\")(").concat(exp, ")");
72682      }
72683      else {
72684          var name_1 = filter.slice(0, i);
72685          var args = filter.slice(i + 1);
72686          return "_f(\"".concat(name_1, "\")(").concat(exp).concat(args !== ')' ? ',' + args : args);
72687      }
72688  }
72689
72690  /* eslint-disable no-unused-vars */
72691  function baseWarn(msg, range) {
72692      console.error("[Vue compiler]: ".concat(msg));
72693  }
72694  /* eslint-enable no-unused-vars */
72695  function pluckModuleFunction(modules, key) {
72696      return modules ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) : [];
72697  }
72698  function addProp(el, name, value, range, dynamic) {
72699      (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
72700      el.plain = false;
72701  }
72702  function addAttr(el, name, value, range, dynamic) {
72703      var attrs = dynamic
72704          ? el.dynamicAttrs || (el.dynamicAttrs = [])
72705          : el.attrs || (el.attrs = []);
72706      attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
72707      el.plain = false;
72708  }
72709  // add a raw attr (use this in preTransforms)
72710  function addRawAttr(el, name, value, range) {
72711      el.attrsMap[name] = value;
72712      el.attrsList.push(rangeSetItem({ name: name, value: value }, range));
72713  }
72714  function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {
72715      (el.directives || (el.directives = [])).push(rangeSetItem({
72716          name: name,
72717          rawName: rawName,
72718          value: value,
72719          arg: arg,
72720          isDynamicArg: isDynamicArg,
72721          modifiers: modifiers
72722      }, range));
72723      el.plain = false;
72724  }
72725  function prependModifierMarker(symbol, name, dynamic) {
72726      return dynamic ? "_p(".concat(name, ",\"").concat(symbol, "\")") : symbol + name; // mark the event as captured
72727  }
72728  function addHandler(el, name, value, modifiers, important, warn, range, dynamic) {
72729      modifiers = modifiers || emptyObject;
72730      // warn prevent and passive modifier
72731      /* istanbul ignore if */
72732      if (warn && modifiers.prevent && modifiers.passive) {
72733          warn("passive and prevent can't be used together. " +
72734              "Passive handler can't prevent default event.", range);
72735      }
72736      // normalize click.right and click.middle since they don't actually fire
72737      // this is technically browser-specific, but at least for now browsers are
72738      // the only target envs that have right/middle clicks.
72739      if (modifiers.right) {
72740          if (dynamic) {
72741              name = "(".concat(name, ")==='click'?'contextmenu':(").concat(name, ")");
72742          }
72743          else if (name === 'click') {
72744              name = 'contextmenu';
72745              delete modifiers.right;
72746          }
72747      }
72748      else if (modifiers.middle) {
72749          if (dynamic) {
72750              name = "(".concat(name, ")==='click'?'mouseup':(").concat(name, ")");
72751          }
72752          else if (name === 'click') {
72753              name = 'mouseup';
72754          }
72755      }
72756      // check capture modifier
72757      if (modifiers.capture) {
72758          delete modifiers.capture;
72759          name = prependModifierMarker('!', name, dynamic);
72760      }
72761      if (modifiers.once) {
72762          delete modifiers.once;
72763          name = prependModifierMarker('~', name, dynamic);
72764      }
72765      /* istanbul ignore if */
72766      if (modifiers.passive) {
72767          delete modifiers.passive;
72768          name = prependModifierMarker('&', name, dynamic);
72769      }
72770      var events;
72771      if (modifiers.native) {
72772          delete modifiers.native;
72773          events = el.nativeEvents || (el.nativeEvents = {});
72774      }
72775      else {
72776          events = el.events || (el.events = {});
72777      }
72778      var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);
72779      if (modifiers !== emptyObject) {
72780          newHandler.modifiers = modifiers;
72781      }
72782      var handlers = events[name];
72783      /* istanbul ignore if */
72784      if (Array.isArray(handlers)) {
72785          important ? handlers.unshift(newHandler) : handlers.push(newHandler);
72786      }
72787      else if (handlers) {
72788          events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
72789      }
72790      else {
72791          events[name] = newHandler;
72792      }
72793      el.plain = false;
72794  }
72795  function getRawBindingAttr(el, name) {
72796      return (el.rawAttrsMap[':' + name] ||
72797          el.rawAttrsMap['v-bind:' + name] ||
72798          el.rawAttrsMap[name]);
72799  }
72800  function getBindingAttr(el, name, getStatic) {
72801      var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);
72802      if (dynamicValue != null) {
72803          return parseFilters(dynamicValue);
72804      }
72805      else if (getStatic !== false) {
72806          var staticValue = getAndRemoveAttr(el, name);
72807          if (staticValue != null) {
72808              return JSON.stringify(staticValue);
72809          }
72810      }
72811  }
72812  // note: this only removes the attr from the Array (attrsList) so that it
72813  // doesn't get processed by processAttrs.
72814  // By default it does NOT remove it from the map (attrsMap) because the map is
72815  // needed during codegen.
72816  function getAndRemoveAttr(el, name, removeFromMap) {
72817      var val;
72818      if ((val = el.attrsMap[name]) != null) {
72819          var list = el.attrsList;
72820          for (var i = 0, l = list.length; i < l; i++) {
72821              if (list[i].name === name) {
72822                  list.splice(i, 1);
72823                  break;
72824              }
72825          }
72826      }
72827      if (removeFromMap) {
72828          delete el.attrsMap[name];
72829      }
72830      return val;
72831  }
72832  function getAndRemoveAttrByRegex(el, name) {
72833      var list = el.attrsList;
72834      for (var i = 0, l = list.length; i < l; i++) {
72835          var attr = list[i];
72836          if (name.test(attr.name)) {
72837              list.splice(i, 1);
72838              return attr;
72839          }
72840      }
72841  }
72842  function rangeSetItem(item, range) {
72843      if (range) {
72844          if (range.start != null) {
72845              item.start = range.start;
72846          }
72847          if (range.end != null) {
72848              item.end = range.end;
72849          }
72850      }
72851      return item;
72852  }
72853
72854  /**
72855   * Cross-platform code generation for component v-model
72856   */
72857  function genComponentModel(el, value, modifiers) {
72858      var _a = modifiers || {}, number = _a.number, trim = _a.trim;
72859      var baseValueExpression = '$$v';
72860      var valueExpression = baseValueExpression;
72861      if (trim) {
72862          valueExpression =
72863              "(typeof ".concat(baseValueExpression, " === 'string'") +
72864                  "? ".concat(baseValueExpression, ".trim()") +
72865                  ": ".concat(baseValueExpression, ")");
72866      }
72867      if (number) {
72868          valueExpression = "_n(".concat(valueExpression, ")");
72869      }
72870      var assignment = genAssignmentCode(value, valueExpression);
72871      el.model = {
72872          value: "(".concat(value, ")"),
72873          expression: JSON.stringify(value),
72874          callback: "function (".concat(baseValueExpression, ") {").concat(assignment, "}")
72875      };
72876  }
72877  /**
72878   * Cross-platform codegen helper for generating v-model value assignment code.
72879   */
72880  function genAssignmentCode(value, assignment) {
72881      var res = parseModel(value);
72882      if (res.key === null) {
72883          return "".concat(value, "=").concat(assignment);
72884      }
72885      else {
72886          return "$set(".concat(res.exp, ", ").concat(res.key, ", ").concat(assignment, ")");
72887      }
72888  }
72889  /**
72890   * Parse a v-model expression into a base path and a final key segment.
72891   * Handles both dot-path and possible square brackets.
72892   *
72893   * Possible cases:
72894   *
72895   * - test
72896   * - test[key]
72897   * - test[test1[key]]
72898   * - test["a"][key]
72899   * - xxx.test[a[a].test1[key]]
72900   * - test.xxx.a["asa"][test1[key]]
72901   *
72902   */
72903  var len, str, chr, index, expressionPos, expressionEndPos;
72904  function parseModel(val) {
72905      // Fix https://github.com/vuejs/vue/pull/7730
72906      // allow v-model="obj.val " (trailing whitespace)
72907      val = val.trim();
72908      len = val.length;
72909      if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
72910          index = val.lastIndexOf('.');
72911          if (index > -1) {
72912              return {
72913                  exp: val.slice(0, index),
72914                  key: '"' + val.slice(index + 1) + '"'
72915              };
72916          }
72917          else {
72918              return {
72919                  exp: val,
72920                  key: null
72921              };
72922          }
72923      }
72924      str = val;
72925      index = expressionPos = expressionEndPos = 0;
72926      while (!eof()) {
72927          chr = next();
72928          /* istanbul ignore if */
72929          if (isStringStart(chr)) {
72930              parseString(chr);
72931          }
72932          else if (chr === 0x5b) {
72933              parseBracket(chr);
72934          }
72935      }
72936      return {
72937          exp: val.slice(0, expressionPos),
72938          key: val.slice(expressionPos + 1, expressionEndPos)
72939      };
72940  }
72941  function next() {
72942      return str.charCodeAt(++index);
72943  }
72944  function eof() {
72945      return index >= len;
72946  }
72947  function isStringStart(chr) {
72948      return chr === 0x22 || chr === 0x27;
72949  }
72950  function parseBracket(chr) {
72951      var inBracket = 1;
72952      expressionPos = index;
72953      while (!eof()) {
72954          chr = next();
72955          if (isStringStart(chr)) {
72956              parseString(chr);
72957              continue;
72958          }
72959          if (chr === 0x5b)
72960              inBracket++;
72961          if (chr === 0x5d)
72962              inBracket--;
72963          if (inBracket === 0) {
72964              expressionEndPos = index;
72965              break;
72966          }
72967      }
72968  }
72969  function parseString(chr) {
72970      var stringQuote = chr;
72971      while (!eof()) {
72972          chr = next();
72973          if (chr === stringQuote) {
72974              break;
72975          }
72976      }
72977  }
72978
72979  var warn$1;
72980  // in some cases, the event used has to be determined at runtime
72981  // so we used some reserved tokens during compile.
72982  var RANGE_TOKEN = '__r';
72983  var CHECKBOX_RADIO_TOKEN = '__c';
72984  function model$1(el, dir, _warn) {
72985      warn$1 = _warn;
72986      var value = dir.value;
72987      var modifiers = dir.modifiers;
72988      var tag = el.tag;
72989      var type = el.attrsMap.type;
72990      {
72991          // inputs with type="file" are read only and setting the input's
72992          // value will throw an error.
72993          if (tag === 'input' && type === 'file') {
72994              warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\" type=\"file\">:\n") +
72995                  "File inputs are read only. Use a v-on:change listener instead.", el.rawAttrsMap['v-model']);
72996          }
72997      }
72998      if (el.component) {
72999          genComponentModel(el, value, modifiers);
73000          // component v-model doesn't need extra runtime
73001          return false;
73002      }
73003      else if (tag === 'select') {
73004          genSelect(el, value, modifiers);
73005      }
73006      else if (tag === 'input' && type === 'checkbox') {
73007          genCheckboxModel(el, value, modifiers);
73008      }
73009      else if (tag === 'input' && type === 'radio') {
73010          genRadioModel(el, value, modifiers);
73011      }
73012      else if (tag === 'input' || tag === 'textarea') {
73013          genDefaultModel(el, value, modifiers);
73014      }
73015      else if (!config.isReservedTag(tag)) {
73016          genComponentModel(el, value, modifiers);
73017          // component v-model doesn't need extra runtime
73018          return false;
73019      }
73020      else {
73021          warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") +
73022              "v-model is not supported on this element type. " +
73023              "If you are working with contenteditable, it's recommended to " +
73024              'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']);
73025      }
73026      // ensure runtime directive metadata
73027      return true;
73028  }
73029  function genCheckboxModel(el, value, modifiers) {
73030      var number = modifiers && modifiers.number;
73031      var valueBinding = getBindingAttr(el, 'value') || 'null';
73032      var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
73033      var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
73034      addProp(el, 'checked', "Array.isArray(".concat(value, ")") +
73035          "?_i(".concat(value, ",").concat(valueBinding, ")>-1") +
73036          (trueValueBinding === 'true'
73037              ? ":(".concat(value, ")")
73038              : ":_q(".concat(value, ",").concat(trueValueBinding, ")")));
73039      addHandler(el, 'change', "var $$a=".concat(value, ",") +
73040          '$$el=$event.target,' +
73041          "$$c=$$el.checked?(".concat(trueValueBinding, "):(").concat(falseValueBinding, ");") +
73042          'if(Array.isArray($$a)){' +
73043          "var $$v=".concat(number ? '_n(' + valueBinding + ')' : valueBinding, ",") +
73044          '$$i=_i($$a,$$v);' +
73045          "if($$el.checked){$$i<0&&(".concat(genAssignmentCode(value, '$$a.concat([$$v])'), ")}") +
73046          "else{$$i>-1&&(".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), ")}") +
73047          "}else{".concat(genAssignmentCode(value, '$$c'), "}"), null, true);
73048  }
73049  function genRadioModel(el, value, modifiers) {
73050      var number = modifiers && modifiers.number;
73051      var valueBinding = getBindingAttr(el, 'value') || 'null';
73052      valueBinding = number ? "_n(".concat(valueBinding, ")") : valueBinding;
73053      addProp(el, 'checked', "_q(".concat(value, ",").concat(valueBinding, ")"));
73054      addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
73055  }
73056  function genSelect(el, value, modifiers) {
73057      var number = modifiers && modifiers.number;
73058      var selectedVal = "Array.prototype.filter" +
73059          ".call($event.target.options,function(o){return o.selected})" +
73060          ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" +
73061          "return ".concat(number ? '_n(val)' : 'val', "})");
73062      var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
73063      var code = "var $$selectedVal = ".concat(selectedVal, ";");
73064      code = "".concat(code, " ").concat(genAssignmentCode(value, assignment));
73065      addHandler(el, 'change', code, null, true);
73066  }
73067  function genDefaultModel(el, value, modifiers) {
73068      var type = el.attrsMap.type;
73069      // warn if v-bind:value conflicts with v-model
73070      // except for inputs with v-bind:type
73071      {
73072          var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
73073          var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
73074          if (value_1 && !typeBinding) {
73075              var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
73076              warn$1("".concat(binding, "=\"").concat(value_1, "\" conflicts with v-model on the same element ") +
73077                  'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);
73078          }
73079      }
73080      var _a = modifiers || {}, lazy = _a.lazy, number = _a.number, trim = _a.trim;
73081      var needCompositionGuard = !lazy && type !== 'range';
73082      var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';
73083      var valueExpression = '$event.target.value';
73084      if (trim) {
73085          valueExpression = "$event.target.value.trim()";
73086      }
73087      if (number) {
73088          valueExpression = "_n(".concat(valueExpression, ")");
73089      }
73090      var code = genAssignmentCode(value, valueExpression);
73091      if (needCompositionGuard) {
73092          code = "if($event.target.composing)return;".concat(code);
73093      }
73094      addProp(el, 'value', "(".concat(value, ")"));
73095      addHandler(el, event, code, null, true);
73096      if (trim || number) {
73097          addHandler(el, 'blur', '$forceUpdate()');
73098      }
73099  }
73100
73101  // normalize v-model event tokens that can only be determined at runtime.
73102  // it's important to place the event as the first in the array because
73103  // the whole point is ensuring the v-model callback gets called before
73104  // user-attached handlers.
73105  function normalizeEvents(on) {
73106      /* istanbul ignore if */
73107      if (isDef(on[RANGE_TOKEN])) {
73108          // IE input[type=range] only supports `change` event
73109          var event_1 = isIE ? 'change' : 'input';
73110          on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []);
73111          delete on[RANGE_TOKEN];
73112      }
73113      // This was originally intended to fix #4521 but no longer necessary
73114      // after 2.5. Keeping it for backwards compat with generated code from < 2.4
73115      /* istanbul ignore if */
73116      if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
73117          on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
73118          delete on[CHECKBOX_RADIO_TOKEN];
73119      }
73120  }
73121  var target;
73122  function createOnceHandler(event, handler, capture) {
73123      var _target = target; // save current target element in closure
73124      return function onceHandler() {
73125          var res = handler.apply(null, arguments);
73126          if (res !== null) {
73127              remove(event, onceHandler, capture, _target);
73128          }
73129      };
73130  }
73131  // #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
73132  // implementation and does not fire microtasks in between event propagation, so
73133  // safe to exclude.
73134  var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);
73135  function add(name, handler, capture, passive) {
73136      // async edge case #6566: inner click event triggers patch, event handler
73137      // attached to outer element during patch, and triggered again. This
73138      // happens because browsers fire microtask ticks between event propagation.
73139      // the solution is simple: we save the timestamp when a handler is attached,
73140      // and the handler would only fire if the event passed to it was fired
73141      // AFTER it was attached.
73142      if (useMicrotaskFix) {
73143          var attachedTimestamp_1 = currentFlushTimestamp;
73144          var original_1 = handler;
73145          //@ts-expect-error
73146          handler = original_1._wrapper = function (e) {
73147              if (
73148              // no bubbling, should always fire.
73149              // this is just a safety net in case event.timeStamp is unreliable in
73150              // certain weird environments...
73151              e.target === e.currentTarget ||
73152                  // event is fired after handler attachment
73153                  e.timeStamp >= attachedTimestamp_1 ||
73154                  // bail for environments that have buggy event.timeStamp implementations
73155                  // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState
73156                  // #9681 QtWebEngine event.timeStamp is negative value
73157                  e.timeStamp <= 0 ||
73158                  // #9448 bail if event is fired in another document in a multi-page
73159                  // electron/nw.js app, since event.timeStamp will be using a different
73160                  // starting reference
73161                  e.target.ownerDocument !== document) {
73162                  return original_1.apply(this, arguments);
73163              }
73164          };
73165      }
73166      target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture);
73167  }
73168  function remove(name, handler, capture, _target) {
73169      (_target || target).removeEventListener(name, 
73170      //@ts-expect-error
73171      handler._wrapper || handler, capture);
73172  }
73173  function updateDOMListeners(oldVnode, vnode) {
73174      if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
73175          return;
73176      }
73177      var on = vnode.data.on || {};
73178      var oldOn = oldVnode.data.on || {};
73179      // vnode is empty when removing all listeners,
73180      // and use old vnode dom element
73181      target = vnode.elm || oldVnode.elm;
73182      normalizeEvents(on);
73183      updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);
73184      target = undefined;
73185  }
73186  var events = {
73187      create: updateDOMListeners,
73188      update: updateDOMListeners,
73189      // @ts-expect-error emptyNode has actually data
73190      destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); }
73191  };
73192
73193  var svgContainer;
73194  function updateDOMProps(oldVnode, vnode) {
73195      if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
73196          return;
73197      }
73198      var key, cur;
73199      var elm = vnode.elm;
73200      var oldProps = oldVnode.data.domProps || {};
73201      var props = vnode.data.domProps || {};
73202      // clone observed objects, as the user probably wants to mutate it
73203      if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {
73204          props = vnode.data.domProps = extend({}, props);
73205      }
73206      for (key in oldProps) {
73207          if (!(key in props)) {
73208              elm[key] = '';
73209          }
73210      }
73211      for (key in props) {
73212          cur = props[key];
73213          // ignore children if the node has textContent or innerHTML,
73214          // as these will throw away existing DOM nodes and cause removal errors
73215          // on subsequent patches (#3360)
73216          if (key === 'textContent' || key === 'innerHTML') {
73217              if (vnode.children)
73218                  vnode.children.length = 0;
73219              if (cur === oldProps[key])
73220                  continue;
73221              // #6601 work around Chrome version <= 55 bug where single textNode
73222              // replaced by innerHTML/textContent retains its parentNode property
73223              if (elm.childNodes.length === 1) {
73224                  elm.removeChild(elm.childNodes[0]);
73225              }
73226          }
73227          if (key === 'value' && elm.tagName !== 'PROGRESS') {
73228              // store value as _value as well since
73229              // non-string values will be stringified
73230              elm._value = cur;
73231              // avoid resetting cursor position when value is the same
73232              var strCur = isUndef(cur) ? '' : String(cur);
73233              if (shouldUpdateValue(elm, strCur)) {
73234                  elm.value = strCur;
73235              }
73236          }
73237          else if (key === 'innerHTML' &&
73238              isSVG(elm.tagName) &&
73239              isUndef(elm.innerHTML)) {
73240              // IE doesn't support innerHTML for SVG elements
73241              svgContainer = svgContainer || document.createElement('div');
73242              svgContainer.innerHTML = "<svg>".concat(cur, "</svg>");
73243              var svg = svgContainer.firstChild;
73244              while (elm.firstChild) {
73245                  elm.removeChild(elm.firstChild);
73246              }
73247              while (svg.firstChild) {
73248                  elm.appendChild(svg.firstChild);
73249              }
73250          }
73251          else if (
73252          // skip the update if old and new VDOM state is the same.
73253          // `value` is handled separately because the DOM value may be temporarily
73254          // out of sync with VDOM state due to focus, composition and modifiers.
73255          // This  #4521 by skipping the unnecessary `checked` update.
73256          cur !== oldProps[key]) {
73257              // some property updates can throw
73258              // e.g. `value` on <progress> w/ non-finite value
73259              try {
73260                  elm[key] = cur;
73261              }
73262              catch (e) { }
73263          }
73264      }
73265  }
73266  function shouldUpdateValue(elm, checkVal) {
73267      return (
73268      //@ts-expect-error
73269      !elm.composing &&
73270          (elm.tagName === 'OPTION' ||
73271              isNotInFocusAndDirty(elm, checkVal) ||
73272              isDirtyWithModifiers(elm, checkVal)));
73273  }
73274  function isNotInFocusAndDirty(elm, checkVal) {
73275      // return true when textbox (.number and .trim) loses focus and its value is
73276      // not equal to the updated value
73277      var notInFocus = true;
73278      // #6157
73279      // work around IE bug when accessing document.activeElement in an iframe
73280      try {
73281          notInFocus = document.activeElement !== elm;
73282      }
73283      catch (e) { }
73284      return notInFocus && elm.value !== checkVal;
73285  }
73286  function isDirtyWithModifiers(elm, newVal) {
73287      var value = elm.value;
73288      var modifiers = elm._vModifiers; // injected by v-model runtime
73289      if (isDef(modifiers)) {
73290          if (modifiers.number) {
73291              return toNumber(value) !== toNumber(newVal);
73292          }
73293          if (modifiers.trim) {
73294              return value.trim() !== newVal.trim();
73295          }
73296      }
73297      return value !== newVal;
73298  }
73299  var domProps = {
73300      create: updateDOMProps,
73301      update: updateDOMProps
73302  };
73303
73304  var parseStyleText = cached(function (cssText) {
73305      var res = {};
73306      var listDelimiter = /;(?![^(]*\))/g;
73307      var propertyDelimiter = /:(.+)/;
73308      cssText.split(listDelimiter).forEach(function (item) {
73309          if (item) {
73310              var tmp = item.split(propertyDelimiter);
73311              tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
73312          }
73313      });
73314      return res;
73315  });
73316  // merge static and dynamic style data on the same vnode
73317  function normalizeStyleData(data) {
73318      var style = normalizeStyleBinding(data.style);
73319      // static style is pre-processed into an object during compilation
73320      // and is always a fresh object, so it's safe to merge into it
73321      return data.staticStyle ? extend(data.staticStyle, style) : style;
73322  }
73323  // normalize possible array / string values into Object
73324  function normalizeStyleBinding(bindingStyle) {
73325      if (Array.isArray(bindingStyle)) {
73326          return toObject(bindingStyle);
73327      }
73328      if (typeof bindingStyle === 'string') {
73329          return parseStyleText(bindingStyle);
73330      }
73331      return bindingStyle;
73332  }
73333  /**
73334   * parent component style should be after child's
73335   * so that parent component's style could override it
73336   */
73337  function getStyle(vnode, checkChild) {
73338      var res = {};
73339      var styleData;
73340      if (checkChild) {
73341          var childNode = vnode;
73342          while (childNode.componentInstance) {
73343              childNode = childNode.componentInstance._vnode;
73344              if (childNode &&
73345                  childNode.data &&
73346                  (styleData = normalizeStyleData(childNode.data))) {
73347                  extend(res, styleData);
73348              }
73349          }
73350      }
73351      if ((styleData = normalizeStyleData(vnode.data))) {
73352          extend(res, styleData);
73353      }
73354      var parentNode = vnode;
73355      // @ts-expect-error parentNode.parent not VNodeWithData
73356      while ((parentNode = parentNode.parent)) {
73357          if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
73358              extend(res, styleData);
73359          }
73360      }
73361      return res;
73362  }
73363
73364  var cssVarRE = /^--/;
73365  var importantRE = /\s*!important$/;
73366  var setProp = function (el, name, val) {
73367      /* istanbul ignore if */
73368      if (cssVarRE.test(name)) {
73369          el.style.setProperty(name, val);
73370      }
73371      else if (importantRE.test(val)) {
73372          el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');
73373      }
73374      else {
73375          var normalizedName = normalize(name);
73376          if (Array.isArray(val)) {
73377              // Support values array created by autoprefixer, e.g.
73378              // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
73379              // Set them one by one, and the browser will only set those it can recognize
73380              for (var i = 0, len = val.length; i < len; i++) {
73381                  el.style[normalizedName] = val[i];
73382              }
73383          }
73384          else {
73385              el.style[normalizedName] = val;
73386          }
73387      }
73388  };
73389  var vendorNames = ['Webkit', 'Moz', 'ms'];
73390  var emptyStyle;
73391  var normalize = cached(function (prop) {
73392      emptyStyle = emptyStyle || document.createElement('div').style;
73393      prop = camelize(prop);
73394      if (prop !== 'filter' && prop in emptyStyle) {
73395          return prop;
73396      }
73397      var capName = prop.charAt(0).toUpperCase() + prop.slice(1);
73398      for (var i = 0; i < vendorNames.length; i++) {
73399          var name_1 = vendorNames[i] + capName;
73400          if (name_1 in emptyStyle) {
73401              return name_1;
73402          }
73403      }
73404  });
73405  function updateStyle(oldVnode, vnode) {
73406      var data = vnode.data;
73407      var oldData = oldVnode.data;
73408      if (isUndef(data.staticStyle) &&
73409          isUndef(data.style) &&
73410          isUndef(oldData.staticStyle) &&
73411          isUndef(oldData.style)) {
73412          return;
73413      }
73414      var cur, name;
73415      var el = vnode.elm;
73416      var oldStaticStyle = oldData.staticStyle;
73417      var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
73418      // if static style exists, stylebinding already merged into it when doing normalizeStyleData
73419      var oldStyle = oldStaticStyle || oldStyleBinding;
73420      var style = normalizeStyleBinding(vnode.data.style) || {};
73421      // store normalized style under a different key for next diff
73422      // make sure to clone it if it's reactive, since the user likely wants
73423      // to mutate it.
73424      vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;
73425      var newStyle = getStyle(vnode, true);
73426      for (name in oldStyle) {
73427          if (isUndef(newStyle[name])) {
73428              setProp(el, name, '');
73429          }
73430      }
73431      for (name in newStyle) {
73432          cur = newStyle[name];
73433          // ie9 setting to null has no effect, must use empty string
73434          setProp(el, name, cur == null ? '' : cur);
73435      }
73436  }
73437  var style$1 = {
73438      create: updateStyle,
73439      update: updateStyle
73440  };
73441
73442  var whitespaceRE$1 = /\s+/;
73443  /**
73444   * Add class with compatibility for SVG since classList is not supported on
73445   * SVG elements in IE
73446   */
73447  function addClass(el, cls) {
73448      /* istanbul ignore if */
73449      if (!cls || !(cls = cls.trim())) {
73450          return;
73451      }
73452      /* istanbul ignore else */
73453      if (el.classList) {
73454          if (cls.indexOf(' ') > -1) {
73455              cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.add(c); });
73456          }
73457          else {
73458              el.classList.add(cls);
73459          }
73460      }
73461      else {
73462          var cur = " ".concat(el.getAttribute('class') || '', " ");
73463          if (cur.indexOf(' ' + cls + ' ') < 0) {
73464              el.setAttribute('class', (cur + cls).trim());
73465          }
73466      }
73467  }
73468  /**
73469   * Remove class with compatibility for SVG since classList is not supported on
73470   * SVG elements in IE
73471   */
73472  function removeClass(el, cls) {
73473      /* istanbul ignore if */
73474      if (!cls || !(cls = cls.trim())) {
73475          return;
73476      }
73477      /* istanbul ignore else */
73478      if (el.classList) {
73479          if (cls.indexOf(' ') > -1) {
73480              cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.remove(c); });
73481          }
73482          else {
73483              el.classList.remove(cls);
73484          }
73485          if (!el.classList.length) {
73486              el.removeAttribute('class');
73487          }
73488      }
73489      else {
73490          var cur = " ".concat(el.getAttribute('class') || '', " ");
73491          var tar = ' ' + cls + ' ';
73492          while (cur.indexOf(tar) >= 0) {
73493              cur = cur.replace(tar, ' ');
73494          }
73495          cur = cur.trim();
73496          if (cur) {
73497              el.setAttribute('class', cur);
73498          }
73499          else {
73500              el.removeAttribute('class');
73501          }
73502      }
73503  }
73504
73505  function resolveTransition(def) {
73506      if (!def) {
73507          return;
73508      }
73509      /* istanbul ignore else */
73510      if (typeof def === 'object') {
73511          var res = {};
73512          if (def.css !== false) {
73513              extend(res, autoCssTransition(def.name || 'v'));
73514          }
73515          extend(res, def);
73516          return res;
73517      }
73518      else if (typeof def === 'string') {
73519          return autoCssTransition(def);
73520      }
73521  }
73522  var autoCssTransition = cached(function (name) {
73523      return {
73524          enterClass: "".concat(name, "-enter"),
73525          enterToClass: "".concat(name, "-enter-to"),
73526          enterActiveClass: "".concat(name, "-enter-active"),
73527          leaveClass: "".concat(name, "-leave"),
73528          leaveToClass: "".concat(name, "-leave-to"),
73529          leaveActiveClass: "".concat(name, "-leave-active")
73530      };
73531  });
73532  var hasTransition = inBrowser && !isIE9;
73533  var TRANSITION = 'transition';
73534  var ANIMATION = 'animation';
73535  // Transition property/event sniffing
73536  var transitionProp = 'transition';
73537  var transitionEndEvent = 'transitionend';
73538  var animationProp = 'animation';
73539  var animationEndEvent = 'animationend';
73540  if (hasTransition) {
73541      /* istanbul ignore if */
73542      if (window.ontransitionend === undefined &&
73543          window.onwebkittransitionend !== undefined) {
73544          transitionProp = 'WebkitTransition';
73545          transitionEndEvent = 'webkitTransitionEnd';
73546      }
73547      if (window.onanimationend === undefined &&
73548          window.onwebkitanimationend !== undefined) {
73549          animationProp = 'WebkitAnimation';
73550          animationEndEvent = 'webkitAnimationEnd';
73551      }
73552  }
73553  // binding to window is necessary to make hot reload work in IE in strict mode
73554  var raf = inBrowser
73555      ? window.requestAnimationFrame
73556          ? window.requestAnimationFrame.bind(window)
73557          : setTimeout
73558      : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); };
73559  function nextFrame(fn) {
73560      raf(function () {
73561          // @ts-expect-error
73562          raf(fn);
73563      });
73564  }
73565  function addTransitionClass(el, cls) {
73566      var transitionClasses = el._transitionClasses || (el._transitionClasses = []);
73567      if (transitionClasses.indexOf(cls) < 0) {
73568          transitionClasses.push(cls);
73569          addClass(el, cls);
73570      }
73571  }
73572  function removeTransitionClass(el, cls) {
73573      if (el._transitionClasses) {
73574          remove$2(el._transitionClasses, cls);
73575      }
73576      removeClass(el, cls);
73577  }
73578  function whenTransitionEnds(el, expectedType, cb) {
73579      var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount;
73580      if (!type)
73581          return cb();
73582      var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
73583      var ended = 0;
73584      var end = function () {
73585          el.removeEventListener(event, onEnd);
73586          cb();
73587      };
73588      var onEnd = function (e) {
73589          if (e.target === el) {
73590              if (++ended >= propCount) {
73591                  end();
73592              }
73593          }
73594      };
73595      setTimeout(function () {
73596          if (ended < propCount) {
73597              end();
73598          }
73599      }, timeout + 1);
73600      el.addEventListener(event, onEnd);
73601  }
73602  var transformRE = /\b(transform|all)(,|$)/;
73603  function getTransitionInfo(el, expectedType) {
73604      var styles = window.getComputedStyle(el);
73605      // JSDOM may return undefined for transition properties
73606      var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');
73607      var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');
73608      var transitionTimeout = getTimeout(transitionDelays, transitionDurations);
73609      var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');
73610      var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');
73611      var animationTimeout = getTimeout(animationDelays, animationDurations);
73612      var type;
73613      var timeout = 0;
73614      var propCount = 0;
73615      /* istanbul ignore if */
73616      if (expectedType === TRANSITION) {
73617          if (transitionTimeout > 0) {
73618              type = TRANSITION;
73619              timeout = transitionTimeout;
73620              propCount = transitionDurations.length;
73621          }
73622      }
73623      else if (expectedType === ANIMATION) {
73624          if (animationTimeout > 0) {
73625              type = ANIMATION;
73626              timeout = animationTimeout;
73627              propCount = animationDurations.length;
73628          }
73629      }
73630      else {
73631          timeout = Math.max(transitionTimeout, animationTimeout);
73632          type =
73633              timeout > 0
73634                  ? transitionTimeout > animationTimeout
73635                      ? TRANSITION
73636                      : ANIMATION
73637                  : null;
73638          propCount = type
73639              ? type === TRANSITION
73640                  ? transitionDurations.length
73641                  : animationDurations.length
73642              : 0;
73643      }
73644      var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);
73645      return {
73646          type: type,
73647          timeout: timeout,
73648          propCount: propCount,
73649          hasTransform: hasTransform
73650      };
73651  }
73652  function getTimeout(delays, durations) {
73653      /* istanbul ignore next */
73654      while (delays.length < durations.length) {
73655          delays = delays.concat(delays);
73656      }
73657      return Math.max.apply(null, durations.map(function (d, i) {
73658          return toMs(d) + toMs(delays[i]);
73659      }));
73660  }
73661  // Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
73662  // in a locale-dependent way, using a comma instead of a dot.
73663  // If comma is not replaced with a dot, the input will be rounded down (i.e. acting
73664  // as a floor function) causing unexpected behaviors
73665  function toMs(s) {
73666      return Number(s.slice(0, -1).replace(',', '.')) * 1000;
73667  }
73668
73669  function enter(vnode, toggleDisplay) {
73670      var el = vnode.elm;
73671      // call leave callback now
73672      if (isDef(el._leaveCb)) {
73673          el._leaveCb.cancelled = true;
73674          el._leaveCb();
73675      }
73676      var data = resolveTransition(vnode.data.transition);
73677      if (isUndef(data)) {
73678          return;
73679      }
73680      /* istanbul ignore if */
73681      if (isDef(el._enterCb) || el.nodeType !== 1) {
73682          return;
73683      }
73684      var css = data.css, type = data.type, enterClass = data.enterClass, enterToClass = data.enterToClass, enterActiveClass = data.enterActiveClass, appearClass = data.appearClass, appearToClass = data.appearToClass, appearActiveClass = data.appearActiveClass, beforeEnter = data.beforeEnter, enter = data.enter, afterEnter = data.afterEnter, enterCancelled = data.enterCancelled, beforeAppear = data.beforeAppear, appear = data.appear, afterAppear = data.afterAppear, appearCancelled = data.appearCancelled, duration = data.duration;
73685      // activeInstance will always be the <transition> component managing this
73686      // transition. One edge case to check is when the <transition> is placed
73687      // as the root node of a child component. In that case we need to check
73688      // <transition>'s parent for appear check.
73689      var context = activeInstance;
73690      var transitionNode = activeInstance.$vnode;
73691      while (transitionNode && transitionNode.parent) {
73692          context = transitionNode.context;
73693          transitionNode = transitionNode.parent;
73694      }
73695      var isAppear = !context._isMounted || !vnode.isRootInsert;
73696      if (isAppear && !appear && appear !== '') {
73697          return;
73698      }
73699      var startClass = isAppear && appearClass ? appearClass : enterClass;
73700      var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;
73701      var toClass = isAppear && appearToClass ? appearToClass : enterToClass;
73702      var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;
73703      var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter;
73704      var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;
73705      var enterCancelledHook = isAppear
73706          ? appearCancelled || enterCancelled
73707          : enterCancelled;
73708      var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);
73709      if (explicitEnterDuration != null) {
73710          checkDuration(explicitEnterDuration, 'enter', vnode);
73711      }
73712      var expectsCSS = css !== false && !isIE9;
73713      var userWantsControl = getHookArgumentsLength(enterHook);
73714      var cb = (el._enterCb = once(function () {
73715          if (expectsCSS) {
73716              removeTransitionClass(el, toClass);
73717              removeTransitionClass(el, activeClass);
73718          }
73719          // @ts-expect-error
73720          if (cb.cancelled) {
73721              if (expectsCSS) {
73722                  removeTransitionClass(el, startClass);
73723              }
73724              enterCancelledHook && enterCancelledHook(el);
73725          }
73726          else {
73727              afterEnterHook && afterEnterHook(el);
73728          }
73729          el._enterCb = null;
73730      }));
73731      if (!vnode.data.show) {
73732          // remove pending leave element on enter by injecting an insert hook
73733          mergeVNodeHook(vnode, 'insert', function () {
73734              var parent = el.parentNode;
73735              var pendingNode = parent && parent._pending && parent._pending[vnode.key];
73736              if (pendingNode &&
73737                  pendingNode.tag === vnode.tag &&
73738                  pendingNode.elm._leaveCb) {
73739                  pendingNode.elm._leaveCb();
73740              }
73741              enterHook && enterHook(el, cb);
73742          });
73743      }
73744      // start enter transition
73745      beforeEnterHook && beforeEnterHook(el);
73746      if (expectsCSS) {
73747          addTransitionClass(el, startClass);
73748          addTransitionClass(el, activeClass);
73749          nextFrame(function () {
73750              removeTransitionClass(el, startClass);
73751              // @ts-expect-error
73752              if (!cb.cancelled) {
73753                  addTransitionClass(el, toClass);
73754                  if (!userWantsControl) {
73755                      if (isValidDuration(explicitEnterDuration)) {
73756                          setTimeout(cb, explicitEnterDuration);
73757                      }
73758                      else {
73759                          whenTransitionEnds(el, type, cb);
73760                      }
73761                  }
73762              }
73763          });
73764      }
73765      if (vnode.data.show) {
73766          toggleDisplay && toggleDisplay();
73767          enterHook && enterHook(el, cb);
73768      }
73769      if (!expectsCSS && !userWantsControl) {
73770          cb();
73771      }
73772  }
73773  function leave(vnode, rm) {
73774      var el = vnode.elm;
73775      // call enter callback now
73776      if (isDef(el._enterCb)) {
73777          el._enterCb.cancelled = true;
73778          el._enterCb();
73779      }
73780      var data = resolveTransition(vnode.data.transition);
73781      if (isUndef(data) || el.nodeType !== 1) {
73782          return rm();
73783      }
73784      /* istanbul ignore if */
73785      if (isDef(el._leaveCb)) {
73786          return;
73787      }
73788      var css = data.css, type = data.type, leaveClass = data.leaveClass, leaveToClass = data.leaveToClass, leaveActiveClass = data.leaveActiveClass, beforeLeave = data.beforeLeave, leave = data.leave, afterLeave = data.afterLeave, leaveCancelled = data.leaveCancelled, delayLeave = data.delayLeave, duration = data.duration;
73789      var expectsCSS = css !== false && !isIE9;
73790      var userWantsControl = getHookArgumentsLength(leave);
73791      var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);
73792      if (isDef(explicitLeaveDuration)) {
73793          checkDuration(explicitLeaveDuration, 'leave', vnode);
73794      }
73795      var cb = (el._leaveCb = once(function () {
73796          if (el.parentNode && el.parentNode._pending) {
73797              el.parentNode._pending[vnode.key] = null;
73798          }
73799          if (expectsCSS) {
73800              removeTransitionClass(el, leaveToClass);
73801              removeTransitionClass(el, leaveActiveClass);
73802          }
73803          // @ts-expect-error
73804          if (cb.cancelled) {
73805              if (expectsCSS) {
73806                  removeTransitionClass(el, leaveClass);
73807              }
73808              leaveCancelled && leaveCancelled(el);
73809          }
73810          else {
73811              rm();
73812              afterLeave && afterLeave(el);
73813          }
73814          el._leaveCb = null;
73815      }));
73816      if (delayLeave) {
73817          delayLeave(performLeave);
73818      }
73819      else {
73820          performLeave();
73821      }
73822      function performLeave() {
73823          // the delayed leave may have already been cancelled
73824          // @ts-expect-error
73825          if (cb.cancelled) {
73826              return;
73827          }
73828          // record leaving element
73829          if (!vnode.data.show && el.parentNode) {
73830              (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] =
73831                  vnode;
73832          }
73833          beforeLeave && beforeLeave(el);
73834          if (expectsCSS) {
73835              addTransitionClass(el, leaveClass);
73836              addTransitionClass(el, leaveActiveClass);
73837              nextFrame(function () {
73838                  removeTransitionClass(el, leaveClass);
73839                  // @ts-expect-error
73840                  if (!cb.cancelled) {
73841                      addTransitionClass(el, leaveToClass);
73842                      if (!userWantsControl) {
73843                          if (isValidDuration(explicitLeaveDuration)) {
73844                              setTimeout(cb, explicitLeaveDuration);
73845                          }
73846                          else {
73847                              whenTransitionEnds(el, type, cb);
73848                          }
73849                      }
73850                  }
73851              });
73852          }
73853          leave && leave(el, cb);
73854          if (!expectsCSS && !userWantsControl) {
73855              cb();
73856          }
73857      }
73858  }
73859  // only used in dev mode
73860  function checkDuration(val, name, vnode) {
73861      if (typeof val !== 'number') {
73862          warn$2("<transition> explicit ".concat(name, " duration is not a valid number - ") +
73863              "got ".concat(JSON.stringify(val), "."), vnode.context);
73864      }
73865      else if (isNaN(val)) {
73866          warn$2("<transition> explicit ".concat(name, " duration is NaN - ") +
73867              'the duration expression might be incorrect.', vnode.context);
73868      }
73869  }
73870  function isValidDuration(val) {
73871      return typeof val === 'number' && !isNaN(val);
73872  }
73873  /**
73874   * Normalize a transition hook's argument length. The hook may be:
73875   * - a merged hook (invoker) with the original in .fns
73876   * - a wrapped component method (check ._length)
73877   * - a plain function (.length)
73878   */
73879  function getHookArgumentsLength(fn) {
73880      if (isUndef(fn)) {
73881          return false;
73882      }
73883      // @ts-expect-error
73884      var invokerFns = fn.fns;
73885      if (isDef(invokerFns)) {
73886          // invoker
73887          return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);
73888      }
73889      else {
73890          // @ts-expect-error
73891          return (fn._length || fn.length) > 1;
73892      }
73893  }
73894  function _enter(_, vnode) {
73895      if (vnode.data.show !== true) {
73896          enter(vnode);
73897      }
73898  }
73899  var transition = inBrowser
73900      ? {
73901          create: _enter,
73902          activate: _enter,
73903          remove: function (vnode, rm) {
73904              /* istanbul ignore else */
73905              if (vnode.data.show !== true) {
73906                  // @ts-expect-error
73907                  leave(vnode, rm);
73908              }
73909              else {
73910                  rm();
73911              }
73912          }
73913      }
73914      : {};
73915
73916  var platformModules = [attrs, klass$1, events, domProps, style$1, transition];
73917
73918  // the directive module should be applied last, after all
73919  // built-in modules have been applied.
73920  var modules$1 = platformModules.concat(baseModules);
73921  var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules$1 });
73922
73923  /**
73924   * Not type checking this file because flow doesn't like attaching
73925   * properties to Elements.
73926   */
73927  /* istanbul ignore if */
73928  if (isIE9) {
73929      // http://www.matts411.com/post/internet-explorer-9-oninput/
73930      document.addEventListener('selectionchange', function () {
73931          var el = document.activeElement;
73932          // @ts-expect-error
73933          if (el && el.vmodel) {
73934              trigger(el, 'input');
73935          }
73936      });
73937  }
73938  var directive = {
73939      inserted: function (el, binding, vnode, oldVnode) {
73940          if (vnode.tag === 'select') {
73941              // #6903
73942              if (oldVnode.elm && !oldVnode.elm._vOptions) {
73943                  mergeVNodeHook(vnode, 'postpatch', function () {
73944                      directive.componentUpdated(el, binding, vnode);
73945                  });
73946              }
73947              else {
73948                  setSelected(el, binding, vnode.context);
73949              }
73950              el._vOptions = [].map.call(el.options, getValue);
73951          }
73952          else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
73953              el._vModifiers = binding.modifiers;
73954              if (!binding.modifiers.lazy) {
73955                  el.addEventListener('compositionstart', onCompositionStart);
73956                  el.addEventListener('compositionend', onCompositionEnd);
73957                  // Safari < 10.2 & UIWebView doesn't fire compositionend when
73958                  // switching focus before confirming composition choice
73959                  // this also fixes the issue where some browsers e.g. iOS Chrome
73960                  // fires "change" instead of "input" on autocomplete.
73961                  el.addEventListener('change', onCompositionEnd);
73962                  /* istanbul ignore if */
73963                  if (isIE9) {
73964                      el.vmodel = true;
73965                  }
73966              }
73967          }
73968      },
73969      componentUpdated: function (el, binding, vnode) {
73970          if (vnode.tag === 'select') {
73971              setSelected(el, binding, vnode.context);
73972              // in case the options rendered by v-for have changed,
73973              // it's possible that the value is out-of-sync with the rendered options.
73974              // detect such cases and filter out values that no longer has a matching
73975              // option in the DOM.
73976              var prevOptions_1 = el._vOptions;
73977              var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue));
73978              if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) {
73979                  // trigger change event if
73980                  // no matching option found for at least one value
73981                  var needReset = el.multiple
73982                      ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); })
73983                      : binding.value !== binding.oldValue &&
73984                          hasNoMatchingOption(binding.value, curOptions_1);
73985                  if (needReset) {
73986                      trigger(el, 'change');
73987                  }
73988              }
73989          }
73990      }
73991  };
73992  function setSelected(el, binding, vm) {
73993      actuallySetSelected(el, binding, vm);
73994      /* istanbul ignore if */
73995      if (isIE || isEdge) {
73996          setTimeout(function () {
73997              actuallySetSelected(el, binding, vm);
73998          }, 0);
73999      }
74000  }
74001  function actuallySetSelected(el, binding, vm) {
74002      var value = binding.value;
74003      var isMultiple = el.multiple;
74004      if (isMultiple && !Array.isArray(value)) {
74005          warn$2("<select multiple v-model=\"".concat(binding.expression, "\"> ") +
74006                  "expects an Array value for its binding, but got ".concat(Object.prototype.toString
74007                      .call(value)
74008                      .slice(8, -1)), vm);
74009          return;
74010      }
74011      var selected, option;
74012      for (var i = 0, l = el.options.length; i < l; i++) {
74013          option = el.options[i];
74014          if (isMultiple) {
74015              selected = looseIndexOf(value, getValue(option)) > -1;
74016              if (option.selected !== selected) {
74017                  option.selected = selected;
74018              }
74019          }
74020          else {
74021              if (looseEqual(getValue(option), value)) {
74022                  if (el.selectedIndex !== i) {
74023                      el.selectedIndex = i;
74024                  }
74025                  return;
74026              }
74027          }
74028      }
74029      if (!isMultiple) {
74030          el.selectedIndex = -1;
74031      }
74032  }
74033  function hasNoMatchingOption(value, options) {
74034      return options.every(function (o) { return !looseEqual(o, value); });
74035  }
74036  function getValue(option) {
74037      return '_value' in option ? option._value : option.value;
74038  }
74039  function onCompositionStart(e) {
74040      e.target.composing = true;
74041  }
74042  function onCompositionEnd(e) {
74043      // prevent triggering an input event for no reason
74044      if (!e.target.composing)
74045          return;
74046      e.target.composing = false;
74047      trigger(e.target, 'input');
74048  }
74049  function trigger(el, type) {
74050      var e = document.createEvent('HTMLEvents');
74051      e.initEvent(type, true, true);
74052      el.dispatchEvent(e);
74053  }
74054
74055  // recursively search for possible transition defined inside the component root
74056  function locateNode(vnode) {
74057      // @ts-expect-error
74058      return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
74059          ? locateNode(vnode.componentInstance._vnode)
74060          : vnode;
74061  }
74062  var show = {
74063      bind: function (el, _a, vnode) {
74064          var value = _a.value;
74065          vnode = locateNode(vnode);
74066          var transition = vnode.data && vnode.data.transition;
74067          var originalDisplay = (el.__vOriginalDisplay =
74068              el.style.display === 'none' ? '' : el.style.display);
74069          if (value && transition) {
74070              vnode.data.show = true;
74071              enter(vnode, function () {
74072                  el.style.display = originalDisplay;
74073              });
74074          }
74075          else {
74076              el.style.display = value ? originalDisplay : 'none';
74077          }
74078      },
74079      update: function (el, _a, vnode) {
74080          var value = _a.value, oldValue = _a.oldValue;
74081          /* istanbul ignore if */
74082          if (!value === !oldValue)
74083              return;
74084          vnode = locateNode(vnode);
74085          var transition = vnode.data && vnode.data.transition;
74086          if (transition) {
74087              vnode.data.show = true;
74088              if (value) {
74089                  enter(vnode, function () {
74090                      el.style.display = el.__vOriginalDisplay;
74091                  });
74092              }
74093              else {
74094                  leave(vnode, function () {
74095                      el.style.display = 'none';
74096                  });
74097              }
74098          }
74099          else {
74100              el.style.display = value ? el.__vOriginalDisplay : 'none';
74101          }
74102      },
74103      unbind: function (el, binding, vnode, oldVnode, isDestroy) {
74104          if (!isDestroy) {
74105              el.style.display = el.__vOriginalDisplay;
74106          }
74107      }
74108  };
74109
74110  var platformDirectives = {
74111      model: directive,
74112      show: show
74113  };
74114
74115  // Provides transition support for a single element/component.
74116  var transitionProps = {
74117      name: String,
74118      appear: Boolean,
74119      css: Boolean,
74120      mode: String,
74121      type: String,
74122      enterClass: String,
74123      leaveClass: String,
74124      enterToClass: String,
74125      leaveToClass: String,
74126      enterActiveClass: String,
74127      leaveActiveClass: String,
74128      appearClass: String,
74129      appearActiveClass: String,
74130      appearToClass: String,
74131      duration: [Number, String, Object]
74132  };
74133  // in case the child is also an abstract component, e.g. <keep-alive>
74134  // we want to recursively retrieve the real component to be rendered
74135  function getRealChild(vnode) {
74136      var compOptions = vnode && vnode.componentOptions;
74137      if (compOptions && compOptions.Ctor.options.abstract) {
74138          return getRealChild(getFirstComponentChild(compOptions.children));
74139      }
74140      else {
74141          return vnode;
74142      }
74143  }
74144  function extractTransitionData(comp) {
74145      var data = {};
74146      var options = comp.$options;
74147      // props
74148      for (var key in options.propsData) {
74149          data[key] = comp[key];
74150      }
74151      // events.
74152      // extract listeners and pass them directly to the transition methods
74153      var listeners = options._parentListeners;
74154      for (var key in listeners) {
74155          data[camelize(key)] = listeners[key];
74156      }
74157      return data;
74158  }
74159  function placeholder(h, rawChild) {
74160      // @ts-expect-error
74161      if (/\d-keep-alive$/.test(rawChild.tag)) {
74162          return h('keep-alive', {
74163              props: rawChild.componentOptions.propsData
74164          });
74165      }
74166  }
74167  function hasParentTransition(vnode) {
74168      while ((vnode = vnode.parent)) {
74169          if (vnode.data.transition) {
74170              return true;
74171          }
74172      }
74173  }
74174  function isSameChild(child, oldChild) {
74175      return oldChild.key === child.key && oldChild.tag === child.tag;
74176  }
74177  var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };
74178  var isVShowDirective = function (d) { return d.name === 'show'; };
74179  var Transition = {
74180      name: 'transition',
74181      props: transitionProps,
74182      abstract: true,
74183      render: function (h) {
74184          var _this = this;
74185          var children = this.$slots.default;
74186          if (!children) {
74187              return;
74188          }
74189          // filter out text nodes (possible whitespaces)
74190          children = children.filter(isNotTextNode);
74191          /* istanbul ignore if */
74192          if (!children.length) {
74193              return;
74194          }
74195          // warn multiple elements
74196          if (children.length > 1) {
74197              warn$2('<transition> can only be used on a single element. Use ' +
74198                  '<transition-group> for lists.', this.$parent);
74199          }
74200          var mode = this.mode;
74201          // warn invalid mode
74202          if (mode && mode !== 'in-out' && mode !== 'out-in') {
74203              warn$2('invalid <transition> mode: ' + mode, this.$parent);
74204          }
74205          var rawChild = children[0];
74206          // if this is a component root node and the component's
74207          // parent container node also has transition, skip.
74208          if (hasParentTransition(this.$vnode)) {
74209              return rawChild;
74210          }
74211          // apply transition data to child
74212          // use getRealChild() to ignore abstract components e.g. keep-alive
74213          var child = getRealChild(rawChild);
74214          /* istanbul ignore if */
74215          if (!child) {
74216              return rawChild;
74217          }
74218          if (this._leaving) {
74219              return placeholder(h, rawChild);
74220          }
74221          // ensure a key that is unique to the vnode type and to this transition
74222          // component instance. This key will be used to remove pending leaving nodes
74223          // during entering.
74224          var id = "__transition-".concat(this._uid, "-");
74225          child.key =
74226              child.key == null
74227                  ? child.isComment
74228                      ? id + 'comment'
74229                      : id + child.tag
74230                  : isPrimitive(child.key)
74231                      ? String(child.key).indexOf(id) === 0
74232                          ? child.key
74233                          : id + child.key
74234                      : child.key;
74235          var data = ((child.data || (child.data = {})).transition =
74236              extractTransitionData(this));
74237          var oldRawChild = this._vnode;
74238          var oldChild = getRealChild(oldRawChild);
74239          // mark v-show
74240          // so that the transition module can hand over the control to the directive
74241          if (child.data.directives && child.data.directives.some(isVShowDirective)) {
74242              child.data.show = true;
74243          }
74244          if (oldChild &&
74245              oldChild.data &&
74246              !isSameChild(child, oldChild) &&
74247              !isAsyncPlaceholder(oldChild) &&
74248              // #6687 component root is a comment node
74249              !(oldChild.componentInstance &&
74250                  oldChild.componentInstance._vnode.isComment)) {
74251              // replace old child transition data with fresh one
74252              // important for dynamic transitions!
74253              var oldData = (oldChild.data.transition = extend({}, data));
74254              // handle transition mode
74255              if (mode === 'out-in') {
74256                  // return placeholder node and queue update when leave finishes
74257                  this._leaving = true;
74258                  mergeVNodeHook(oldData, 'afterLeave', function () {
74259                      _this._leaving = false;
74260                      _this.$forceUpdate();
74261                  });
74262                  return placeholder(h, rawChild);
74263              }
74264              else if (mode === 'in-out') {
74265                  if (isAsyncPlaceholder(child)) {
74266                      return oldRawChild;
74267                  }
74268                  var delayedLeave_1;
74269                  var performLeave = function () {
74270                      delayedLeave_1();
74271                  };
74272                  mergeVNodeHook(data, 'afterEnter', performLeave);
74273                  mergeVNodeHook(data, 'enterCancelled', performLeave);
74274                  mergeVNodeHook(oldData, 'delayLeave', function (leave) {
74275                      delayedLeave_1 = leave;
74276                  });
74277              }
74278          }
74279          return rawChild;
74280      }
74281  };
74282
74283  // Provides transition support for list items.
74284  var props = extend({
74285      tag: String,
74286      moveClass: String
74287  }, transitionProps);
74288  delete props.mode;
74289  var TransitionGroup = {
74290      props: props,
74291      beforeMount: function () {
74292          var _this = this;
74293          var update = this._update;
74294          this._update = function (vnode, hydrating) {
74295              var restoreActiveInstance = setActiveInstance(_this);
74296              // force removing pass
74297              _this.__patch__(_this._vnode, _this.kept, false, // hydrating
74298              true // removeOnly (!important, avoids unnecessary moves)
74299              );
74300              _this._vnode = _this.kept;
74301              restoreActiveInstance();
74302              update.call(_this, vnode, hydrating);
74303          };
74304      },
74305      render: function (h) {
74306          var tag = this.tag || this.$vnode.data.tag || 'span';
74307          var map = Object.create(null);
74308          var prevChildren = (this.prevChildren = this.children);
74309          var rawChildren = this.$slots.default || [];
74310          var children = (this.children = []);
74311          var transitionData = extractTransitionData(this);
74312          for (var i = 0; i < rawChildren.length; i++) {
74313              var c = rawChildren[i];
74314              if (c.tag) {
74315                  if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
74316                      children.push(c);
74317                      map[c.key] = c;
74318                      (c.data || (c.data = {})).transition = transitionData;
74319                  }
74320                  else {
74321                      var opts = c.componentOptions;
74322                      var name_1 = opts
74323                          ? getComponentName(opts.Ctor.options) || opts.tag || ''
74324                          : c.tag;
74325                      warn$2("<transition-group> children must be keyed: <".concat(name_1, ">"));
74326                  }
74327              }
74328          }
74329          if (prevChildren) {
74330              var kept = [];
74331              var removed = [];
74332              for (var i = 0; i < prevChildren.length; i++) {
74333                  var c = prevChildren[i];
74334                  c.data.transition = transitionData;
74335                  // @ts-expect-error .getBoundingClientRect is not typed in Node
74336                  c.data.pos = c.elm.getBoundingClientRect();
74337                  if (map[c.key]) {
74338                      kept.push(c);
74339                  }
74340                  else {
74341                      removed.push(c);
74342                  }
74343              }
74344              this.kept = h(tag, null, kept);
74345              this.removed = removed;
74346          }
74347          return h(tag, null, children);
74348      },
74349      updated: function () {
74350          var children = this.prevChildren;
74351          var moveClass = this.moveClass || (this.name || 'v') + '-move';
74352          if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
74353              return;
74354          }
74355          // we divide the work into three loops to avoid mixing DOM reads and writes
74356          // in each iteration - which helps prevent layout thrashing.
74357          children.forEach(callPendingCbs);
74358          children.forEach(recordPosition);
74359          children.forEach(applyTranslation);
74360          // force reflow to put everything in position
74361          // assign to this to avoid being removed in tree-shaking
74362          // $flow-disable-line
74363          this._reflow = document.body.offsetHeight;
74364          children.forEach(function (c) {
74365              if (c.data.moved) {
74366                  var el_1 = c.elm;
74367                  var s = el_1.style;
74368                  addTransitionClass(el_1, moveClass);
74369                  s.transform = s.WebkitTransform = s.transitionDuration = '';
74370                  el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) {
74371                      if (e && e.target !== el_1) {
74372                          return;
74373                      }
74374                      if (!e || /transform$/.test(e.propertyName)) {
74375                          el_1.removeEventListener(transitionEndEvent, cb);
74376                          el_1._moveCb = null;
74377                          removeTransitionClass(el_1, moveClass);
74378                      }
74379                  }));
74380              }
74381          });
74382      },
74383      methods: {
74384          hasMove: function (el, moveClass) {
74385              /* istanbul ignore if */
74386              if (!hasTransition) {
74387                  return false;
74388              }
74389              /* istanbul ignore if */
74390              if (this._hasMove) {
74391                  return this._hasMove;
74392              }
74393              // Detect whether an element with the move class applied has
74394              // CSS transitions. Since the element may be inside an entering
74395              // transition at this very moment, we make a clone of it and remove
74396              // all other transition classes applied to ensure only the move class
74397              // is applied.
74398              var clone = el.cloneNode();
74399              if (el._transitionClasses) {
74400                  el._transitionClasses.forEach(function (cls) {
74401                      removeClass(clone, cls);
74402                  });
74403              }
74404              addClass(clone, moveClass);
74405              clone.style.display = 'none';
74406              this.$el.appendChild(clone);
74407              var info = getTransitionInfo(clone);
74408              this.$el.removeChild(clone);
74409              return (this._hasMove = info.hasTransform);
74410          }
74411      }
74412  };
74413  function callPendingCbs(c) {
74414      /* istanbul ignore if */
74415      if (c.elm._moveCb) {
74416          c.elm._moveCb();
74417      }
74418      /* istanbul ignore if */
74419      if (c.elm._enterCb) {
74420          c.elm._enterCb();
74421      }
74422  }
74423  function recordPosition(c) {
74424      c.data.newPos = c.elm.getBoundingClientRect();
74425  }
74426  function applyTranslation(c) {
74427      var oldPos = c.data.pos;
74428      var newPos = c.data.newPos;
74429      var dx = oldPos.left - newPos.left;
74430      var dy = oldPos.top - newPos.top;
74431      if (dx || dy) {
74432          c.data.moved = true;
74433          var s = c.elm.style;
74434          s.transform = s.WebkitTransform = "translate(".concat(dx, "px,").concat(dy, "px)");
74435          s.transitionDuration = '0s';
74436      }
74437  }
74438
74439  var platformComponents = {
74440      Transition: Transition,
74441      TransitionGroup: TransitionGroup
74442  };
74443
74444  // install platform specific utils
74445  Vue.config.mustUseProp = mustUseProp;
74446  Vue.config.isReservedTag = isReservedTag;
74447  Vue.config.isReservedAttr = isReservedAttr;
74448  Vue.config.getTagNamespace = getTagNamespace;
74449  Vue.config.isUnknownElement = isUnknownElement;
74450  // install platform runtime directives & components
74451  extend(Vue.options.directives, platformDirectives);
74452  extend(Vue.options.components, platformComponents);
74453  // install platform patch function
74454  Vue.prototype.__patch__ = inBrowser ? patch : noop;
74455  // public mount method
74456  Vue.prototype.$mount = function (el, hydrating) {
74457      el = el && inBrowser ? query(el) : undefined;
74458      return mountComponent(this, el, hydrating);
74459  };
74460  // devtools global hook
74461  /* istanbul ignore next */
74462  if (inBrowser) {
74463      setTimeout(function () {
74464          if (config.devtools) {
74465              if (devtools) {
74466                  devtools.emit('init', Vue);
74467              }
74468              else {
74469                  // @ts-expect-error
74470                  console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' +
74471                      'https://github.com/vuejs/vue-devtools');
74472              }
74473          }
74474          if (config.productionTip !== false &&
74475              typeof console !== 'undefined') {
74476              // @ts-expect-error
74477              console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" +
74478                  "Make sure to turn on production mode when deploying for production.\n" +
74479                  "See more tips at https://vuejs.org/guide/deployment.html");
74480          }
74481      }, 0);
74482  }
74483
74484  var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;
74485  var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
74486  var buildRegex = cached(function (delimiters) {
74487      var open = delimiters[0].replace(regexEscapeRE, '\\$&');
74488      var close = delimiters[1].replace(regexEscapeRE, '\\$&');
74489      return new RegExp(open + '((?:.|\\n)+?)' + close, 'g');
74490  });
74491  function parseText(text, delimiters) {
74492      //@ts-expect-error
74493      var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
74494      if (!tagRE.test(text)) {
74495          return;
74496      }
74497      var tokens = [];
74498      var rawTokens = [];
74499      var lastIndex = (tagRE.lastIndex = 0);
74500      var match, index, tokenValue;
74501      while ((match = tagRE.exec(text))) {
74502          index = match.index;
74503          // push text token
74504          if (index > lastIndex) {
74505              rawTokens.push((tokenValue = text.slice(lastIndex, index)));
74506              tokens.push(JSON.stringify(tokenValue));
74507          }
74508          // tag token
74509          var exp = parseFilters(match[1].trim());
74510          tokens.push("_s(".concat(exp, ")"));
74511          rawTokens.push({ '@binding': exp });
74512          lastIndex = index + match[0].length;
74513      }
74514      if (lastIndex < text.length) {
74515          rawTokens.push((tokenValue = text.slice(lastIndex)));
74516          tokens.push(JSON.stringify(tokenValue));
74517      }
74518      return {
74519          expression: tokens.join('+'),
74520          tokens: rawTokens
74521      };
74522  }
74523
74524  function transformNode$1(el, options) {
74525      var warn = options.warn || baseWarn;
74526      var staticClass = getAndRemoveAttr(el, 'class');
74527      if (staticClass) {
74528          var res = parseText(staticClass, options.delimiters);
74529          if (res) {
74530              warn("class=\"".concat(staticClass, "\": ") +
74531                  'Interpolation inside attributes has been removed. ' +
74532                  'Use v-bind or the colon shorthand instead. For example, ' +
74533                  'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']);
74534          }
74535      }
74536      if (staticClass) {
74537          el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim());
74538      }
74539      var classBinding = getBindingAttr(el, 'class', false /* getStatic */);
74540      if (classBinding) {
74541          el.classBinding = classBinding;
74542      }
74543  }
74544  function genData$2(el) {
74545      var data = '';
74546      if (el.staticClass) {
74547          data += "staticClass:".concat(el.staticClass, ",");
74548      }
74549      if (el.classBinding) {
74550          data += "class:".concat(el.classBinding, ",");
74551      }
74552      return data;
74553  }
74554  var klass = {
74555      staticKeys: ['staticClass'],
74556      transformNode: transformNode$1,
74557      genData: genData$2
74558  };
74559
74560  function transformNode(el, options) {
74561      var warn = options.warn || baseWarn;
74562      var staticStyle = getAndRemoveAttr(el, 'style');
74563      if (staticStyle) {
74564          /* istanbul ignore if */
74565          {
74566              var res = parseText(staticStyle, options.delimiters);
74567              if (res) {
74568                  warn("style=\"".concat(staticStyle, "\": ") +
74569                      'Interpolation inside attributes has been removed. ' +
74570                      'Use v-bind or the colon shorthand instead. For example, ' +
74571                      'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']);
74572              }
74573          }
74574          el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
74575      }
74576      var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
74577      if (styleBinding) {
74578          el.styleBinding = styleBinding;
74579      }
74580  }
74581  function genData$1(el) {
74582      var data = '';
74583      if (el.staticStyle) {
74584          data += "staticStyle:".concat(el.staticStyle, ",");
74585      }
74586      if (el.styleBinding) {
74587          data += "style:(".concat(el.styleBinding, "),");
74588      }
74589      return data;
74590  }
74591  var style = {
74592      staticKeys: ['staticStyle'],
74593      transformNode: transformNode,
74594      genData: genData$1
74595  };
74596
74597  var decoder;
74598  var he = {
74599      decode: function (html) {
74600          decoder = decoder || document.createElement('div');
74601          decoder.innerHTML = html;
74602          return decoder.textContent;
74603      }
74604  };
74605
74606  var isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
74607      'link,meta,param,source,track,wbr');
74608  // Elements that you can, intentionally, leave open
74609  // (and which close themselves)
74610  var canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');
74611  // HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
74612  // Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
74613  var isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
74614      'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
74615      'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
74616      'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
74617      'title,tr,track');
74618
74619  /**
74620   * Not type-checking this file because it's mostly vendor code.
74621   */
74622  // Regular Expressions for parsing tags and attributes
74623  var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
74624  var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
74625  var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(unicodeRegExp.source, "]*");
74626  var qnameCapture = "((?:".concat(ncname, "\\:)?").concat(ncname, ")");
74627  var startTagOpen = new RegExp("^<".concat(qnameCapture));
74628  var startTagClose = /^\s*(\/?)>/;
74629  var endTag = new RegExp("^<\\/".concat(qnameCapture, "[^>]*>"));
74630  var doctype = /^<!DOCTYPE [^>]+>/i;
74631  // #7298: escape - to avoid being passed as HTML comment when inlined in page
74632  var comment = /^<!\--/;
74633  var conditionalComment = /^<!\[/;
74634  // Special Elements (can contain anything)
74635  var isPlainTextElement = makeMap('script,style,textarea', true);
74636  var reCache = {};
74637  var decodingMap = {
74638      '&lt;': '<',
74639      '&gt;': '>',
74640      '&quot;': '"',
74641      '&amp;': '&',
74642      '&#10;': '\n',
74643      '&#9;': '\t',
74644      '&#39;': "'"
74645  };
74646  var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;
74647  var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;
74648  // #5992
74649  var isIgnoreNewlineTag = makeMap('pre,textarea', true);
74650  var shouldIgnoreFirstNewline = function (tag, html) {
74651      return tag && isIgnoreNewlineTag(tag) && html[0] === '\n';
74652  };
74653  function decodeAttr(value, shouldDecodeNewlines) {
74654      var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
74655      return value.replace(re, function (match) { return decodingMap[match]; });
74656  }
74657  function parseHTML(html, options) {
74658      var stack = [];
74659      var expectHTML = options.expectHTML;
74660      var isUnaryTag = options.isUnaryTag || no;
74661      var canBeLeftOpenTag = options.canBeLeftOpenTag || no;
74662      var index = 0;
74663      var last, lastTag;
74664      var _loop_1 = function () {
74665          last = html;
74666          // Make sure we're not in a plaintext content element like script/style
74667          if (!lastTag || !isPlainTextElement(lastTag)) {
74668              var textEnd = html.indexOf('<');
74669              if (textEnd === 0) {
74670                  // Comment:
74671                  if (comment.test(html)) {
74672                      var commentEnd = html.indexOf('-->');
74673                      if (commentEnd >= 0) {
74674                          if (options.shouldKeepComment && options.comment) {
74675                              options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);
74676                          }
74677                          advance(commentEnd + 3);
74678                          return "continue";
74679                      }
74680                  }
74681                  // https://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
74682                  if (conditionalComment.test(html)) {
74683                      var conditionalEnd = html.indexOf(']>');
74684                      if (conditionalEnd >= 0) {
74685                          advance(conditionalEnd + 2);
74686                          return "continue";
74687                      }
74688                  }
74689                  // Doctype:
74690                  var doctypeMatch = html.match(doctype);
74691                  if (doctypeMatch) {
74692                      advance(doctypeMatch[0].length);
74693                      return "continue";
74694                  }
74695                  // End tag:
74696                  var endTagMatch = html.match(endTag);
74697                  if (endTagMatch) {
74698                      var curIndex = index;
74699                      advance(endTagMatch[0].length);
74700                      parseEndTag(endTagMatch[1], curIndex, index);
74701                      return "continue";
74702                  }
74703                  // Start tag:
74704                  var startTagMatch = parseStartTag();
74705                  if (startTagMatch) {
74706                      handleStartTag(startTagMatch);
74707                      if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
74708                          advance(1);
74709                      }
74710                      return "continue";
74711                  }
74712              }
74713              var text = void 0, rest = void 0, next = void 0;
74714              if (textEnd >= 0) {
74715                  rest = html.slice(textEnd);
74716                  while (!endTag.test(rest) &&
74717                      !startTagOpen.test(rest) &&
74718                      !comment.test(rest) &&
74719                      !conditionalComment.test(rest)) {
74720                      // < in plain text, be forgiving and treat it as text
74721                      next = rest.indexOf('<', 1);
74722                      if (next < 0)
74723                          break;
74724                      textEnd += next;
74725                      rest = html.slice(textEnd);
74726                  }
74727                  text = html.substring(0, textEnd);
74728              }
74729              if (textEnd < 0) {
74730                  text = html;
74731              }
74732              if (text) {
74733                  advance(text.length);
74734              }
74735              if (options.chars && text) {
74736                  options.chars(text, index - text.length, index);
74737              }
74738          }
74739          else {
74740              var endTagLength_1 = 0;
74741              var stackedTag_1 = lastTag.toLowerCase();
74742              var reStackedTag = reCache[stackedTag_1] ||
74743                  (reCache[stackedTag_1] = new RegExp('([\\s\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i'));
74744              var rest = html.replace(reStackedTag, function (all, text, endTag) {
74745                  endTagLength_1 = endTag.length;
74746                  if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') {
74747                      text = text
74748                          .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
74749                          .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
74750                  }
74751                  if (shouldIgnoreFirstNewline(stackedTag_1, text)) {
74752                      text = text.slice(1);
74753                  }
74754                  if (options.chars) {
74755                      options.chars(text);
74756                  }
74757                  return '';
74758              });
74759              index += html.length - rest.length;
74760              html = rest;
74761              parseEndTag(stackedTag_1, index - endTagLength_1, index);
74762          }
74763          if (html === last) {
74764              options.chars && options.chars(html);
74765              if (!stack.length && options.warn) {
74766                  options.warn("Mal-formatted tag at end of template: \"".concat(html, "\""), {
74767                      start: index + html.length
74768                  });
74769              }
74770              return "break";
74771          }
74772      };
74773      while (html) {
74774          var state_1 = _loop_1();
74775          if (state_1 === "break")
74776              break;
74777      }
74778      // Clean up any remaining tags
74779      parseEndTag();
74780      function advance(n) {
74781          index += n;
74782          html = html.substring(n);
74783      }
74784      function parseStartTag() {
74785          var start = html.match(startTagOpen);
74786          if (start) {
74787              var match = {
74788                  tagName: start[1],
74789                  attrs: [],
74790                  start: index
74791              };
74792              advance(start[0].length);
74793              var end = void 0, attr = void 0;
74794              while (!(end = html.match(startTagClose)) &&
74795                  (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {
74796                  attr.start = index;
74797                  advance(attr[0].length);
74798                  attr.end = index;
74799                  match.attrs.push(attr);
74800              }
74801              if (end) {
74802                  match.unarySlash = end[1];
74803                  advance(end[0].length);
74804                  match.end = index;
74805                  return match;
74806              }
74807          }
74808      }
74809      function handleStartTag(match) {
74810          var tagName = match.tagName;
74811          var unarySlash = match.unarySlash;
74812          if (expectHTML) {
74813              if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
74814                  parseEndTag(lastTag);
74815              }
74816              if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
74817                  parseEndTag(tagName);
74818              }
74819          }
74820          var unary = isUnaryTag(tagName) || !!unarySlash;
74821          var l = match.attrs.length;
74822          var attrs = new Array(l);
74823          for (var i = 0; i < l; i++) {
74824              var args = match.attrs[i];
74825              var value = args[3] || args[4] || args[5] || '';
74826              var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'
74827                  ? options.shouldDecodeNewlinesForHref
74828                  : options.shouldDecodeNewlines;
74829              attrs[i] = {
74830                  name: args[1],
74831                  value: decodeAttr(value, shouldDecodeNewlines)
74832              };
74833              if (options.outputSourceRange) {
74834                  attrs[i].start = args.start + args[0].match(/^\s*/).length;
74835                  attrs[i].end = args.end;
74836              }
74837          }
74838          if (!unary) {
74839              stack.push({
74840                  tag: tagName,
74841                  lowerCasedTag: tagName.toLowerCase(),
74842                  attrs: attrs,
74843                  start: match.start,
74844                  end: match.end
74845              });
74846              lastTag = tagName;
74847          }
74848          if (options.start) {
74849              options.start(tagName, attrs, unary, match.start, match.end);
74850          }
74851      }
74852      function parseEndTag(tagName, start, end) {
74853          var pos, lowerCasedTagName;
74854          if (start == null)
74855              start = index;
74856          if (end == null)
74857              end = index;
74858          // Find the closest opened tag of the same type
74859          if (tagName) {
74860              lowerCasedTagName = tagName.toLowerCase();
74861              for (pos = stack.length - 1; pos >= 0; pos--) {
74862                  if (stack[pos].lowerCasedTag === lowerCasedTagName) {
74863                      break;
74864                  }
74865              }
74866          }
74867          else {
74868              // If no tag name is provided, clean shop
74869              pos = 0;
74870          }
74871          if (pos >= 0) {
74872              // Close all the open elements, up the stack
74873              for (var i = stack.length - 1; i >= pos; i--) {
74874                  if ((i > pos || !tagName) && options.warn) {
74875                      options.warn("tag <".concat(stack[i].tag, "> has no matching end tag."), {
74876                          start: stack[i].start,
74877                          end: stack[i].end
74878                      });
74879                  }
74880                  if (options.end) {
74881                      options.end(stack[i].tag, start, end);
74882                  }
74883              }
74884              // Remove the open elements from the stack
74885              stack.length = pos;
74886              lastTag = pos && stack[pos - 1].tag;
74887          }
74888          else if (lowerCasedTagName === 'br') {
74889              if (options.start) {
74890                  options.start(tagName, [], true, start, end);
74891              }
74892          }
74893          else if (lowerCasedTagName === 'p') {
74894              if (options.start) {
74895                  options.start(tagName, [], false, start, end);
74896              }
74897              if (options.end) {
74898                  options.end(tagName, start, end);
74899              }
74900          }
74901      }
74902  }
74903
74904  var onRE = /^@|^v-on:/;
74905  var dirRE = /^v-|^@|^:|^#/;
74906  var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
74907  var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
74908  var stripParensRE = /^\(|\)$/g;
74909  var dynamicArgRE = /^\[.*\]$/;
74910  var argRE = /:(.*)$/;
74911  var bindRE = /^:|^\.|^v-bind:/;
74912  var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g;
74913  var slotRE = /^v-slot(:|$)|^#/;
74914  var lineBreakRE = /[\r\n]/;
74915  var whitespaceRE = /[ \f\t\r\n]+/g;
74916  var invalidAttributeRE = /[\s"'<>\/=]/;
74917  var decodeHTMLCached = cached(he.decode);
74918  var emptySlotScopeToken = "_empty_";
74919  // configurable state
74920  var warn;
74921  var delimiters;
74922  var transforms;
74923  var preTransforms;
74924  var postTransforms;
74925  var platformIsPreTag;
74926  var platformMustUseProp;
74927  var platformGetTagNamespace;
74928  var maybeComponent;
74929  function createASTElement(tag, attrs, parent) {
74930      return {
74931          type: 1,
74932          tag: tag,
74933          attrsList: attrs,
74934          attrsMap: makeAttrsMap(attrs),
74935          rawAttrsMap: {},
74936          parent: parent,
74937          children: []
74938      };
74939  }
74940  /**
74941   * Convert HTML string to AST.
74942   */
74943  function parse(template, options) {
74944      warn = options.warn || baseWarn;
74945      platformIsPreTag = options.isPreTag || no;
74946      platformMustUseProp = options.mustUseProp || no;
74947      platformGetTagNamespace = options.getTagNamespace || no;
74948      var isReservedTag = options.isReservedTag || no;
74949      maybeComponent = function (el) {
74950          return !!(el.component ||
74951              el.attrsMap[':is'] ||
74952              el.attrsMap['v-bind:is'] ||
74953              !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)));
74954      };
74955      transforms = pluckModuleFunction(options.modules, 'transformNode');
74956      preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
74957      postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
74958      delimiters = options.delimiters;
74959      var stack = [];
74960      var preserveWhitespace = options.preserveWhitespace !== false;
74961      var whitespaceOption = options.whitespace;
74962      var root;
74963      var currentParent;
74964      var inVPre = false;
74965      var inPre = false;
74966      var warned = false;
74967      function warnOnce(msg, range) {
74968          if (!warned) {
74969              warned = true;
74970              warn(msg, range);
74971          }
74972      }
74973      function closeElement(element) {
74974          trimEndingWhitespace(element);
74975          if (!inVPre && !element.processed) {
74976              element = processElement(element, options);
74977          }
74978          // tree management
74979          if (!stack.length && element !== root) {
74980              // allow root elements with v-if, v-else-if and v-else
74981              if (root.if && (element.elseif || element.else)) {
74982                  {
74983                      checkRootConstraints(element);
74984                  }
74985                  addIfCondition(root, {
74986                      exp: element.elseif,
74987                      block: element
74988                  });
74989              }
74990              else {
74991                  warnOnce("Component template should contain exactly one root element. " +
74992                      "If you are using v-if on multiple elements, " +
74993                      "use v-else-if to chain them instead.", { start: element.start });
74994              }
74995          }
74996          if (currentParent && !element.forbidden) {
74997              if (element.elseif || element.else) {
74998                  processIfConditions(element, currentParent);
74999              }
75000              else {
75001                  if (element.slotScope) {
75002                      // scoped slot
75003                      // keep it in the children list so that v-else(-if) conditions can
75004                      // find it as the prev node.
75005                      var name_1 = element.slotTarget || '"default"';
75006                      (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element;
75007                  }
75008                  currentParent.children.push(element);
75009                  element.parent = currentParent;
75010              }
75011          }
75012          // final children cleanup
75013          // filter out scoped slots
75014          element.children = element.children.filter(function (c) { return !c.slotScope; });
75015          // remove trailing whitespace node again
75016          trimEndingWhitespace(element);
75017          // check pre state
75018          if (element.pre) {
75019              inVPre = false;
75020          }
75021          if (platformIsPreTag(element.tag)) {
75022              inPre = false;
75023          }
75024          // apply post-transforms
75025          for (var i = 0; i < postTransforms.length; i++) {
75026              postTransforms[i](element, options);
75027          }
75028      }
75029      function trimEndingWhitespace(el) {
75030          // remove trailing whitespace node
75031          if (!inPre) {
75032              var lastNode = void 0;
75033              while ((lastNode = el.children[el.children.length - 1]) &&
75034                  lastNode.type === 3 &&
75035                  lastNode.text === ' ') {
75036                  el.children.pop();
75037              }
75038          }
75039      }
75040      function checkRootConstraints(el) {
75041          if (el.tag === 'slot' || el.tag === 'template') {
75042              warnOnce("Cannot use <".concat(el.tag, "> as component root element because it may ") +
75043                  'contain multiple nodes.', { start: el.start });
75044          }
75045          if (el.attrsMap.hasOwnProperty('v-for')) {
75046              warnOnce('Cannot use v-for on stateful component root element because ' +
75047                  'it renders multiple elements.', el.rawAttrsMap['v-for']);
75048          }
75049      }
75050      parseHTML(template, {
75051          warn: warn,
75052          expectHTML: options.expectHTML,
75053          isUnaryTag: options.isUnaryTag,
75054          canBeLeftOpenTag: options.canBeLeftOpenTag,
75055          shouldDecodeNewlines: options.shouldDecodeNewlines,
75056          shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
75057          shouldKeepComment: options.comments,
75058          outputSourceRange: options.outputSourceRange,
75059          start: function (tag, attrs, unary, start, end) {
75060              // check namespace.
75061              // inherit parent ns if there is one
75062              var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);
75063              // handle IE svg bug
75064              /* istanbul ignore if */
75065              if (isIE && ns === 'svg') {
75066                  attrs = guardIESVGBug(attrs);
75067              }
75068              var element = createASTElement(tag, attrs, currentParent);
75069              if (ns) {
75070                  element.ns = ns;
75071              }
75072              {
75073                  if (options.outputSourceRange) {
75074                      element.start = start;
75075                      element.end = end;
75076                      element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {
75077                          cumulated[attr.name] = attr;
75078                          return cumulated;
75079                      }, {});
75080                  }
75081                  attrs.forEach(function (attr) {
75082                      if (invalidAttributeRE.test(attr.name)) {
75083                          warn("Invalid dynamic argument expression: attribute names cannot contain " +
75084                              "spaces, quotes, <, >, / or =.", options.outputSourceRange
75085                              ? {
75086                                  start: attr.start + attr.name.indexOf("["),
75087                                  end: attr.start + attr.name.length
75088                              }
75089                              : undefined);
75090                      }
75091                  });
75092              }
75093              if (isForbiddenTag(element) && !isServerRendering()) {
75094                  element.forbidden = true;
75095                  warn('Templates should only be responsible for mapping the state to the ' +
75096                          'UI. Avoid placing tags with side-effects in your templates, such as ' +
75097                          "<".concat(tag, ">") +
75098                          ', as they will not be parsed.', { start: element.start });
75099              }
75100              // apply pre-transforms
75101              for (var i = 0; i < preTransforms.length; i++) {
75102                  element = preTransforms[i](element, options) || element;
75103              }
75104              if (!inVPre) {
75105                  processPre(element);
75106                  if (element.pre) {
75107                      inVPre = true;
75108                  }
75109              }
75110              if (platformIsPreTag(element.tag)) {
75111                  inPre = true;
75112              }
75113              if (inVPre) {
75114                  processRawAttrs(element);
75115              }
75116              else if (!element.processed) {
75117                  // structural directives
75118                  processFor(element);
75119                  processIf(element);
75120                  processOnce(element);
75121              }
75122              if (!root) {
75123                  root = element;
75124                  {
75125                      checkRootConstraints(root);
75126                  }
75127              }
75128              if (!unary) {
75129                  currentParent = element;
75130                  stack.push(element);
75131              }
75132              else {
75133                  closeElement(element);
75134              }
75135          },
75136          end: function (tag, start, end) {
75137              var element = stack[stack.length - 1];
75138              // pop stack
75139              stack.length -= 1;
75140              currentParent = stack[stack.length - 1];
75141              if (options.outputSourceRange) {
75142                  element.end = end;
75143              }
75144              closeElement(element);
75145          },
75146          chars: function (text, start, end) {
75147              if (!currentParent) {
75148                  {
75149                      if (text === template) {
75150                          warnOnce('Component template requires a root element, rather than just text.', { start: start });
75151                      }
75152                      else if ((text = text.trim())) {
75153                          warnOnce("text \"".concat(text, "\" outside root element will be ignored."), {
75154                              start: start
75155                          });
75156                      }
75157                  }
75158                  return;
75159              }
75160              // IE textarea placeholder bug
75161              /* istanbul ignore if */
75162              if (isIE &&
75163                  currentParent.tag === 'textarea' &&
75164                  currentParent.attrsMap.placeholder === text) {
75165                  return;
75166              }
75167              var children = currentParent.children;
75168              if (inPre || text.trim()) {
75169                  text = isTextTag(currentParent)
75170                      ? text
75171                      : decodeHTMLCached(text);
75172              }
75173              else if (!children.length) {
75174                  // remove the whitespace-only node right after an opening tag
75175                  text = '';
75176              }
75177              else if (whitespaceOption) {
75178                  if (whitespaceOption === 'condense') {
75179                      // in condense mode, remove the whitespace node if it contains
75180                      // line break, otherwise condense to a single space
75181                      text = lineBreakRE.test(text) ? '' : ' ';
75182                  }
75183                  else {
75184                      text = ' ';
75185                  }
75186              }
75187              else {
75188                  text = preserveWhitespace ? ' ' : '';
75189              }
75190              if (text) {
75191                  if (!inPre && whitespaceOption === 'condense') {
75192                      // condense consecutive whitespaces into single space
75193                      text = text.replace(whitespaceRE, ' ');
75194                  }
75195                  var res = void 0;
75196                  var child = void 0;
75197                  if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
75198                      child = {
75199                          type: 2,
75200                          expression: res.expression,
75201                          tokens: res.tokens,
75202                          text: text
75203                      };
75204                  }
75205                  else if (text !== ' ' ||
75206                      !children.length ||
75207                      children[children.length - 1].text !== ' ') {
75208                      child = {
75209                          type: 3,
75210                          text: text
75211                      };
75212                  }
75213                  if (child) {
75214                      if (options.outputSourceRange) {
75215                          child.start = start;
75216                          child.end = end;
75217                      }
75218                      children.push(child);
75219                  }
75220              }
75221          },
75222          comment: function (text, start, end) {
75223              // adding anything as a sibling to the root node is forbidden
75224              // comments should still be allowed, but ignored
75225              if (currentParent) {
75226                  var child = {
75227                      type: 3,
75228                      text: text,
75229                      isComment: true
75230                  };
75231                  if (options.outputSourceRange) {
75232                      child.start = start;
75233                      child.end = end;
75234                  }
75235                  currentParent.children.push(child);
75236              }
75237          }
75238      });
75239      return root;
75240  }
75241  function processPre(el) {
75242      if (getAndRemoveAttr(el, 'v-pre') != null) {
75243          el.pre = true;
75244      }
75245  }
75246  function processRawAttrs(el) {
75247      var list = el.attrsList;
75248      var len = list.length;
75249      if (len) {
75250          var attrs = (el.attrs = new Array(len));
75251          for (var i = 0; i < len; i++) {
75252              attrs[i] = {
75253                  name: list[i].name,
75254                  value: JSON.stringify(list[i].value)
75255              };
75256              if (list[i].start != null) {
75257                  attrs[i].start = list[i].start;
75258                  attrs[i].end = list[i].end;
75259              }
75260          }
75261      }
75262      else if (!el.pre) {
75263          // non root node in pre blocks with no attributes
75264          el.plain = true;
75265      }
75266  }
75267  function processElement(element, options) {
75268      processKey(element);
75269      // determine whether this is a plain element after
75270      // removing structural attributes
75271      element.plain =
75272          !element.key && !element.scopedSlots && !element.attrsList.length;
75273      processRef(element);
75274      processSlotContent(element);
75275      processSlotOutlet(element);
75276      processComponent(element);
75277      for (var i = 0; i < transforms.length; i++) {
75278          element = transforms[i](element, options) || element;
75279      }
75280      processAttrs(element);
75281      return element;
75282  }
75283  function processKey(el) {
75284      var exp = getBindingAttr(el, 'key');
75285      if (exp) {
75286          {
75287              if (el.tag === 'template') {
75288                  warn("<template> cannot be keyed. Place the key on real elements instead.", getRawBindingAttr(el, 'key'));
75289              }
75290              if (el.for) {
75291                  var iterator = el.iterator2 || el.iterator1;
75292                  var parent_1 = el.parent;
75293                  if (iterator &&
75294                      iterator === exp &&
75295                      parent_1 &&
75296                      parent_1.tag === 'transition-group') {
75297                      warn("Do not use v-for index as key on <transition-group> children, " +
75298                          "this is the same as not using keys.", getRawBindingAttr(el, 'key'), true /* tip */);
75299                  }
75300              }
75301          }
75302          el.key = exp;
75303      }
75304  }
75305  function processRef(el) {
75306      var ref = getBindingAttr(el, 'ref');
75307      if (ref) {
75308          el.ref = ref;
75309          el.refInFor = checkInFor(el);
75310      }
75311  }
75312  function processFor(el) {
75313      var exp;
75314      if ((exp = getAndRemoveAttr(el, 'v-for'))) {
75315          var res = parseFor(exp);
75316          if (res) {
75317              extend(el, res);
75318          }
75319          else {
75320              warn("Invalid v-for expression: ".concat(exp), el.rawAttrsMap['v-for']);
75321          }
75322      }
75323  }
75324  function parseFor(exp) {
75325      var inMatch = exp.match(forAliasRE);
75326      if (!inMatch)
75327          return;
75328      var res = {};
75329      res.for = inMatch[2].trim();
75330      var alias = inMatch[1].trim().replace(stripParensRE, '');
75331      var iteratorMatch = alias.match(forIteratorRE);
75332      if (iteratorMatch) {
75333          res.alias = alias.replace(forIteratorRE, '').trim();
75334          res.iterator1 = iteratorMatch[1].trim();
75335          if (iteratorMatch[2]) {
75336              res.iterator2 = iteratorMatch[2].trim();
75337          }
75338      }
75339      else {
75340          res.alias = alias;
75341      }
75342      return res;
75343  }
75344  function processIf(el) {
75345      var exp = getAndRemoveAttr(el, 'v-if');
75346      if (exp) {
75347          el.if = exp;
75348          addIfCondition(el, {
75349              exp: exp,
75350              block: el
75351          });
75352      }
75353      else {
75354          if (getAndRemoveAttr(el, 'v-else') != null) {
75355              el.else = true;
75356          }
75357          var elseif = getAndRemoveAttr(el, 'v-else-if');
75358          if (elseif) {
75359              el.elseif = elseif;
75360          }
75361      }
75362  }
75363  function processIfConditions(el, parent) {
75364      var prev = findPrevElement(parent.children);
75365      if (prev && prev.if) {
75366          addIfCondition(prev, {
75367              exp: el.elseif,
75368              block: el
75369          });
75370      }
75371      else {
75372          warn("v-".concat(el.elseif ? 'else-if="' + el.elseif + '"' : 'else', " ") +
75373              "used on element <".concat(el.tag, "> without corresponding v-if."), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);
75374      }
75375  }
75376  function findPrevElement(children) {
75377      var i = children.length;
75378      while (i--) {
75379          if (children[i].type === 1) {
75380              return children[i];
75381          }
75382          else {
75383              if (children[i].text !== ' ') {
75384                  warn("text \"".concat(children[i].text.trim(), "\" between v-if and v-else(-if) ") +
75385                      "will be ignored.", children[i]);
75386              }
75387              children.pop();
75388          }
75389      }
75390  }
75391  function addIfCondition(el, condition) {
75392      if (!el.ifConditions) {
75393          el.ifConditions = [];
75394      }
75395      el.ifConditions.push(condition);
75396  }
75397  function processOnce(el) {
75398      var once = getAndRemoveAttr(el, 'v-once');
75399      if (once != null) {
75400          el.once = true;
75401      }
75402  }
75403  // handle content being passed to a component as slot,
75404  // e.g. <template slot="xxx">, <div slot-scope="xxx">
75405  function processSlotContent(el) {
75406      var slotScope;
75407      if (el.tag === 'template') {
75408          slotScope = getAndRemoveAttr(el, 'scope');
75409          /* istanbul ignore if */
75410          if (slotScope) {
75411              warn("the \"scope\" attribute for scoped slots have been deprecated and " +
75412                  "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " +
75413                  "can also be used on plain elements in addition to <template> to " +
75414                  "denote scoped slots.", el.rawAttrsMap['scope'], true);
75415          }
75416          el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
75417      }
75418      else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
75419          /* istanbul ignore if */
75420          if (el.attrsMap['v-for']) {
75421              warn("Ambiguous combined usage of slot-scope and v-for on <".concat(el.tag, "> ") +
75422                  "(v-for takes higher priority). Use a wrapper <template> for the " +
75423                  "scoped slot to make it clearer.", el.rawAttrsMap['slot-scope'], true);
75424          }
75425          el.slotScope = slotScope;
75426      }
75427      // slot="xxx"
75428      var slotTarget = getBindingAttr(el, 'slot');
75429      if (slotTarget) {
75430          el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
75431          el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);
75432          // preserve slot as an attribute for native shadow DOM compat
75433          // only for non-scoped slots.
75434          if (el.tag !== 'template' && !el.slotScope) {
75435              addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));
75436          }
75437      }
75438      // 2.6 v-slot syntax
75439      {
75440          if (el.tag === 'template') {
75441              // v-slot on <template>
75442              var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
75443              if (slotBinding) {
75444                  {
75445                      if (el.slotTarget || el.slotScope) {
75446                          warn("Unexpected mixed usage of different slot syntaxes.", el);
75447                      }
75448                      if (el.parent && !maybeComponent(el.parent)) {
75449                          warn("<template v-slot> can only appear at the root level inside " +
75450                              "the receiving component", el);
75451                      }
75452                  }
75453                  var _a = getSlotName(slotBinding), name_2 = _a.name, dynamic = _a.dynamic;
75454                  el.slotTarget = name_2;
75455                  el.slotTargetDynamic = dynamic;
75456                  el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf
75457              }
75458          }
75459          else {
75460              // v-slot on component, denotes default slot
75461              var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
75462              if (slotBinding) {
75463                  {
75464                      if (!maybeComponent(el)) {
75465                          warn("v-slot can only be used on components or <template>.", slotBinding);
75466                      }
75467                      if (el.slotScope || el.slotTarget) {
75468                          warn("Unexpected mixed usage of different slot syntaxes.", el);
75469                      }
75470                      if (el.scopedSlots) {
75471                          warn("To avoid scope ambiguity, the default slot should also use " +
75472                              "<template> syntax when there are other named slots.", slotBinding);
75473                      }
75474                  }
75475                  // add the component's children to its default slot
75476                  var slots = el.scopedSlots || (el.scopedSlots = {});
75477                  var _b = getSlotName(slotBinding), name_3 = _b.name, dynamic = _b.dynamic;
75478                  var slotContainer_1 = (slots[name_3] = createASTElement('template', [], el));
75479                  slotContainer_1.slotTarget = name_3;
75480                  slotContainer_1.slotTargetDynamic = dynamic;
75481                  slotContainer_1.children = el.children.filter(function (c) {
75482                      if (!c.slotScope) {
75483                          c.parent = slotContainer_1;
75484                          return true;
75485                      }
75486                  });
75487                  slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken;
75488                  // remove children as they are returned from scopedSlots now
75489                  el.children = [];
75490                  // mark el non-plain so data gets generated
75491                  el.plain = false;
75492              }
75493          }
75494      }
75495  }
75496  function getSlotName(binding) {
75497      var name = binding.name.replace(slotRE, '');
75498      if (!name) {
75499          if (binding.name[0] !== '#') {
75500              name = 'default';
75501          }
75502          else {
75503              warn("v-slot shorthand syntax requires a slot name.", binding);
75504          }
75505      }
75506      return dynamicArgRE.test(name)
75507          ? // dynamic [name]
75508              { name: name.slice(1, -1), dynamic: true }
75509          : // static name
75510              { name: "\"".concat(name, "\""), dynamic: false };
75511  }
75512  // handle <slot/> outlets
75513  function processSlotOutlet(el) {
75514      if (el.tag === 'slot') {
75515          el.slotName = getBindingAttr(el, 'name');
75516          if (el.key) {
75517              warn("`key` does not work on <slot> because slots are abstract outlets " +
75518                  "and can possibly expand into multiple elements. " +
75519                  "Use the key on a wrapping element instead.", getRawBindingAttr(el, 'key'));
75520          }
75521      }
75522  }
75523  function processComponent(el) {
75524      var binding;
75525      if ((binding = getBindingAttr(el, 'is'))) {
75526          el.component = binding;
75527      }
75528      if (getAndRemoveAttr(el, 'inline-template') != null) {
75529          el.inlineTemplate = true;
75530      }
75531  }
75532  function processAttrs(el) {
75533      var list = el.attrsList;
75534      var i, l, name, rawName, value, modifiers, syncGen, isDynamic;
75535      for (i = 0, l = list.length; i < l; i++) {
75536          name = rawName = list[i].name;
75537          value = list[i].value;
75538          if (dirRE.test(name)) {
75539              // mark element as dynamic
75540              el.hasBindings = true;
75541              // modifiers
75542              modifiers = parseModifiers(name.replace(dirRE, ''));
75543              // support .foo shorthand syntax for the .prop modifier
75544              if (modifiers) {
75545                  name = name.replace(modifierRE, '');
75546              }
75547              if (bindRE.test(name)) {
75548                  // v-bind
75549                  name = name.replace(bindRE, '');
75550                  value = parseFilters(value);
75551                  isDynamic = dynamicArgRE.test(name);
75552                  if (isDynamic) {
75553                      name = name.slice(1, -1);
75554                  }
75555                  if (value.trim().length === 0) {
75556                      warn("The value for a v-bind expression cannot be empty. Found in \"v-bind:".concat(name, "\""));
75557                  }
75558                  if (modifiers) {
75559                      if (modifiers.prop && !isDynamic) {
75560                          name = camelize(name);
75561                          if (name === 'innerHtml')
75562                              name = 'innerHTML';
75563                      }
75564                      if (modifiers.camel && !isDynamic) {
75565                          name = camelize(name);
75566                      }
75567                      if (modifiers.sync) {
75568                          syncGen = genAssignmentCode(value, "$event");
75569                          if (!isDynamic) {
75570                              addHandler(el, "update:".concat(camelize(name)), syncGen, null, false, warn, list[i]);
75571                              if (hyphenate(name) !== camelize(name)) {
75572                                  addHandler(el, "update:".concat(hyphenate(name)), syncGen, null, false, warn, list[i]);
75573                              }
75574                          }
75575                          else {
75576                              // handler w/ dynamic event name
75577                              addHandler(el, "\"update:\"+(".concat(name, ")"), syncGen, null, false, warn, list[i], true // dynamic
75578                              );
75579                          }
75580                      }
75581                  }
75582                  if ((modifiers && modifiers.prop) ||
75583                      (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) {
75584                      addProp(el, name, value, list[i], isDynamic);
75585                  }
75586                  else {
75587                      addAttr(el, name, value, list[i], isDynamic);
75588                  }
75589              }
75590              else if (onRE.test(name)) {
75591                  // v-on
75592                  name = name.replace(onRE, '');
75593                  isDynamic = dynamicArgRE.test(name);
75594                  if (isDynamic) {
75595                      name = name.slice(1, -1);
75596                  }
75597                  addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic);
75598              }
75599              else {
75600                  // normal directives
75601                  name = name.replace(dirRE, '');
75602                  // parse arg
75603                  var argMatch = name.match(argRE);
75604                  var arg = argMatch && argMatch[1];
75605                  isDynamic = false;
75606                  if (arg) {
75607                      name = name.slice(0, -(arg.length + 1));
75608                      if (dynamicArgRE.test(arg)) {
75609                          arg = arg.slice(1, -1);
75610                          isDynamic = true;
75611                      }
75612                  }
75613                  addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);
75614                  if (name === 'model') {
75615                      checkForAliasModel(el, value);
75616                  }
75617              }
75618          }
75619          else {
75620              // literal attribute
75621              {
75622                  var res = parseText(value, delimiters);
75623                  if (res) {
75624                      warn("".concat(name, "=\"").concat(value, "\": ") +
75625                          'Interpolation inside attributes has been removed. ' +
75626                          'Use v-bind or the colon shorthand instead. For example, ' +
75627                          'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]);
75628                  }
75629              }
75630              addAttr(el, name, JSON.stringify(value), list[i]);
75631              // #6887 firefox doesn't update muted state if set via attribute
75632              // even immediately after element creation
75633              if (!el.component &&
75634                  name === 'muted' &&
75635                  platformMustUseProp(el.tag, el.attrsMap.type, name)) {
75636                  addProp(el, name, 'true', list[i]);
75637              }
75638          }
75639      }
75640  }
75641  function checkInFor(el) {
75642      var parent = el;
75643      while (parent) {
75644          if (parent.for !== undefined) {
75645              return true;
75646          }
75647          parent = parent.parent;
75648      }
75649      return false;
75650  }
75651  function parseModifiers(name) {
75652      var match = name.match(modifierRE);
75653      if (match) {
75654          var ret_1 = {};
75655          match.forEach(function (m) {
75656              ret_1[m.slice(1)] = true;
75657          });
75658          return ret_1;
75659      }
75660  }
75661  function makeAttrsMap(attrs) {
75662      var map = {};
75663      for (var i = 0, l = attrs.length; i < l; i++) {
75664          if (map[attrs[i].name] && !isIE && !isEdge) {
75665              warn('duplicate attribute: ' + attrs[i].name, attrs[i]);
75666          }
75667          map[attrs[i].name] = attrs[i].value;
75668      }
75669      return map;
75670  }
75671  // for script (e.g. type="x/template") or style, do not decode content
75672  function isTextTag(el) {
75673      return el.tag === 'script' || el.tag === 'style';
75674  }
75675  function isForbiddenTag(el) {
75676      return (el.tag === 'style' ||
75677          (el.tag === 'script' &&
75678              (!el.attrsMap.type || el.attrsMap.type === 'text/javascript')));
75679  }
75680  var ieNSBug = /^xmlns:NS\d+/;
75681  var ieNSPrefix = /^NS\d+:/;
75682  /* istanbul ignore next */
75683  function guardIESVGBug(attrs) {
75684      var res = [];
75685      for (var i = 0; i < attrs.length; i++) {
75686          var attr = attrs[i];
75687          if (!ieNSBug.test(attr.name)) {
75688              attr.name = attr.name.replace(ieNSPrefix, '');
75689              res.push(attr);
75690          }
75691      }
75692      return res;
75693  }
75694  function checkForAliasModel(el, value) {
75695      var _el = el;
75696      while (_el) {
75697          if (_el.for && _el.alias === value) {
75698              warn("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") +
75699                  "You are binding v-model directly to a v-for iteration alias. " +
75700                  "This will not be able to modify the v-for source array because " +
75701                  "writing to the alias is like modifying a function local variable. " +
75702                  "Consider using an array of objects and use v-model on an object property instead.", el.rawAttrsMap['v-model']);
75703          }
75704          _el = _el.parent;
75705      }
75706  }
75707
75708  /**
75709   * Expand input[v-model] with dynamic type bindings into v-if-else chains
75710   * Turn this:
75711   *   <input v-model="data[type]" :type="type">
75712   * into this:
75713   *   <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
75714   *   <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
75715   *   <input v-else :type="type" v-model="data[type]">
75716   */
75717  function preTransformNode(el, options) {
75718      if (el.tag === 'input') {
75719          var map = el.attrsMap;
75720          if (!map['v-model']) {
75721              return;
75722          }
75723          var typeBinding = void 0;
75724          if (map[':type'] || map['v-bind:type']) {
75725              typeBinding = getBindingAttr(el, 'type');
75726          }
75727          if (!map.type && !typeBinding && map['v-bind']) {
75728              typeBinding = "(".concat(map['v-bind'], ").type");
75729          }
75730          if (typeBinding) {
75731              var ifCondition = getAndRemoveAttr(el, 'v-if', true);
75732              var ifConditionExtra = ifCondition ? "&&(".concat(ifCondition, ")") : "";
75733              var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
75734              var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
75735              // 1. checkbox
75736              var branch0 = cloneASTElement(el);
75737              // process for on the main node
75738              processFor(branch0);
75739              addRawAttr(branch0, 'type', 'checkbox');
75740              processElement(branch0, options);
75741              branch0.processed = true; // prevent it from double-processed
75742              branch0.if = "(".concat(typeBinding, ")==='checkbox'") + ifConditionExtra;
75743              addIfCondition(branch0, {
75744                  exp: branch0.if,
75745                  block: branch0
75746              });
75747              // 2. add radio else-if condition
75748              var branch1 = cloneASTElement(el);
75749              getAndRemoveAttr(branch1, 'v-for', true);
75750              addRawAttr(branch1, 'type', 'radio');
75751              processElement(branch1, options);
75752              addIfCondition(branch0, {
75753                  exp: "(".concat(typeBinding, ")==='radio'") + ifConditionExtra,
75754                  block: branch1
75755              });
75756              // 3. other
75757              var branch2 = cloneASTElement(el);
75758              getAndRemoveAttr(branch2, 'v-for', true);
75759              addRawAttr(branch2, ':type', typeBinding);
75760              processElement(branch2, options);
75761              addIfCondition(branch0, {
75762                  exp: ifCondition,
75763                  block: branch2
75764              });
75765              if (hasElse) {
75766                  branch0.else = true;
75767              }
75768              else if (elseIfCondition) {
75769                  branch0.elseif = elseIfCondition;
75770              }
75771              return branch0;
75772          }
75773      }
75774  }
75775  function cloneASTElement(el) {
75776      return createASTElement(el.tag, el.attrsList.slice(), el.parent);
75777  }
75778  var model = {
75779      preTransformNode: preTransformNode
75780  };
75781
75782  var modules = [klass, style, model];
75783
75784  function text(el, dir) {
75785      if (dir.value) {
75786          addProp(el, 'textContent', "_s(".concat(dir.value, ")"), dir);
75787      }
75788  }
75789
75790  function html(el, dir) {
75791      if (dir.value) {
75792          addProp(el, 'innerHTML', "_s(".concat(dir.value, ")"), dir);
75793      }
75794  }
75795
75796  var directives = {
75797      model: model$1,
75798      text: text,
75799      html: html
75800  };
75801
75802  var baseOptions = {
75803      expectHTML: true,
75804      modules: modules,
75805      directives: directives,
75806      isPreTag: isPreTag,
75807      isUnaryTag: isUnaryTag,
75808      mustUseProp: mustUseProp,
75809      canBeLeftOpenTag: canBeLeftOpenTag,
75810      isReservedTag: isReservedTag,
75811      getTagNamespace: getTagNamespace,
75812      staticKeys: genStaticKeys$1(modules)
75813  };
75814
75815  var isStaticKey;
75816  var isPlatformReservedTag;
75817  var genStaticKeysCached = cached(genStaticKeys);
75818  /**
75819   * Goal of the optimizer: walk the generated template AST tree
75820   * and detect sub-trees that are purely static, i.e. parts of
75821   * the DOM that never needs to change.
75822   *
75823   * Once we detect these sub-trees, we can:
75824   *
75825   * 1. Hoist them into constants, so that we no longer need to
75826   *    create fresh nodes for them on each re-render;
75827   * 2. Completely skip them in the patching process.
75828   */
75829  function optimize(root, options) {
75830      if (!root)
75831          return;
75832      isStaticKey = genStaticKeysCached(options.staticKeys || '');
75833      isPlatformReservedTag = options.isReservedTag || no;
75834      // first pass: mark all non-static nodes.
75835      markStatic(root);
75836      // second pass: mark static roots.
75837      markStaticRoots(root, false);
75838  }
75839  function genStaticKeys(keys) {
75840      return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +
75841          (keys ? ',' + keys : ''));
75842  }
75843  function markStatic(node) {
75844      node.static = isStatic(node);
75845      if (node.type === 1) {
75846          // do not make component slot content static. this avoids
75847          // 1. components not able to mutate slot nodes
75848          // 2. static slot content fails for hot-reloading
75849          if (!isPlatformReservedTag(node.tag) &&
75850              node.tag !== 'slot' &&
75851              node.attrsMap['inline-template'] == null) {
75852              return;
75853          }
75854          for (var i = 0, l = node.children.length; i < l; i++) {
75855              var child = node.children[i];
75856              markStatic(child);
75857              if (!child.static) {
75858                  node.static = false;
75859              }
75860          }
75861          if (node.ifConditions) {
75862              for (var i = 1, l = node.ifConditions.length; i < l; i++) {
75863                  var block = node.ifConditions[i].block;
75864                  markStatic(block);
75865                  if (!block.static) {
75866                      node.static = false;
75867                  }
75868              }
75869          }
75870      }
75871  }
75872  function markStaticRoots(node, isInFor) {
75873      if (node.type === 1) {
75874          if (node.static || node.once) {
75875              node.staticInFor = isInFor;
75876          }
75877          // For a node to qualify as a static root, it should have children that
75878          // are not just static text. Otherwise the cost of hoisting out will
75879          // outweigh the benefits and it's better off to just always render it fresh.
75880          if (node.static &&
75881              node.children.length &&
75882              !(node.children.length === 1 && node.children[0].type === 3)) {
75883              node.staticRoot = true;
75884              return;
75885          }
75886          else {
75887              node.staticRoot = false;
75888          }
75889          if (node.children) {
75890              for (var i = 0, l = node.children.length; i < l; i++) {
75891                  markStaticRoots(node.children[i], isInFor || !!node.for);
75892              }
75893          }
75894          if (node.ifConditions) {
75895              for (var i = 1, l = node.ifConditions.length; i < l; i++) {
75896                  markStaticRoots(node.ifConditions[i].block, isInFor);
75897              }
75898          }
75899      }
75900  }
75901  function isStatic(node) {
75902      if (node.type === 2) {
75903          // expression
75904          return false;
75905      }
75906      if (node.type === 3) {
75907          // text
75908          return true;
75909      }
75910      return !!(node.pre ||
75911          (!node.hasBindings && // no dynamic bindings
75912              !node.if &&
75913              !node.for && // not v-if or v-for or v-else
75914              !isBuiltInTag(node.tag) && // not a built-in
75915              isPlatformReservedTag(node.tag) && // not a component
75916              !isDirectChildOfTemplateFor(node) &&
75917              Object.keys(node).every(isStaticKey)));
75918  }
75919  function isDirectChildOfTemplateFor(node) {
75920      while (node.parent) {
75921          node = node.parent;
75922          if (node.tag !== 'template') {
75923              return false;
75924          }
75925          if (node.for) {
75926              return true;
75927          }
75928      }
75929      return false;
75930  }
75931
75932  var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/;
75933  var fnInvokeRE = /\([^)]*?\);*$/;
75934  var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
75935  // KeyboardEvent.keyCode aliases
75936  var keyCodes = {
75937      esc: 27,
75938      tab: 9,
75939      enter: 13,
75940      space: 32,
75941      up: 38,
75942      left: 37,
75943      right: 39,
75944      down: 40,
75945      delete: [8, 46]
75946  };
75947  // KeyboardEvent.key aliases
75948  var keyNames = {
75949      // #7880: IE11 and Edge use `Esc` for Escape key name.
75950      esc: ['Esc', 'Escape'],
75951      tab: 'Tab',
75952      enter: 'Enter',
75953      // #9112: IE11 uses `Spacebar` for Space key name.
75954      space: [' ', 'Spacebar'],
75955      // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
75956      up: ['Up', 'ArrowUp'],
75957      left: ['Left', 'ArrowLeft'],
75958      right: ['Right', 'ArrowRight'],
75959      down: ['Down', 'ArrowDown'],
75960      // #9112: IE11 uses `Del` for Delete key name.
75961      delete: ['Backspace', 'Delete', 'Del']
75962  };
75963  // #4868: modifiers that prevent the execution of the listener
75964  // need to explicitly return null so that we can determine whether to remove
75965  // the listener for .once
75966  var genGuard = function (condition) { return "if(".concat(condition, ")return null;"); };
75967  var modifierCode = {
75968      stop: '$event.stopPropagation();',
75969      prevent: '$event.preventDefault();',
75970      self: genGuard("$event.target !== $event.currentTarget"),
75971      ctrl: genGuard("!$event.ctrlKey"),
75972      shift: genGuard("!$event.shiftKey"),
75973      alt: genGuard("!$event.altKey"),
75974      meta: genGuard("!$event.metaKey"),
75975      left: genGuard("'button' in $event && $event.button !== 0"),
75976      middle: genGuard("'button' in $event && $event.button !== 1"),
75977      right: genGuard("'button' in $event && $event.button !== 2")
75978  };
75979  function genHandlers(events, isNative) {
75980      var prefix = isNative ? 'nativeOn:' : 'on:';
75981      var staticHandlers = "";
75982      var dynamicHandlers = "";
75983      for (var name_1 in events) {
75984          var handlerCode = genHandler(events[name_1]);
75985          //@ts-expect-error
75986          if (events[name_1] && events[name_1].dynamic) {
75987              dynamicHandlers += "".concat(name_1, ",").concat(handlerCode, ",");
75988          }
75989          else {
75990              staticHandlers += "\"".concat(name_1, "\":").concat(handlerCode, ",");
75991          }
75992      }
75993      staticHandlers = "{".concat(staticHandlers.slice(0, -1), "}");
75994      if (dynamicHandlers) {
75995          return prefix + "_d(".concat(staticHandlers, ",[").concat(dynamicHandlers.slice(0, -1), "])");
75996      }
75997      else {
75998          return prefix + staticHandlers;
75999      }
76000  }
76001  function genHandler(handler) {
76002      if (!handler) {
76003          return 'function(){}';
76004      }
76005      if (Array.isArray(handler)) {
76006          return "[".concat(handler.map(function (handler) { return genHandler(handler); }).join(','), "]");
76007      }
76008      var isMethodPath = simplePathRE.test(handler.value);
76009      var isFunctionExpression = fnExpRE.test(handler.value);
76010      var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));
76011      if (!handler.modifiers) {
76012          if (isMethodPath || isFunctionExpression) {
76013              return handler.value;
76014          }
76015          return "function($event){".concat(isFunctionInvocation ? "return ".concat(handler.value) : handler.value, "}"); // inline statement
76016      }
76017      else {
76018          var code = '';
76019          var genModifierCode = '';
76020          var keys = [];
76021          var _loop_1 = function (key) {
76022              if (modifierCode[key]) {
76023                  genModifierCode += modifierCode[key];
76024                  // left/right
76025                  if (keyCodes[key]) {
76026                      keys.push(key);
76027                  }
76028              }
76029              else if (key === 'exact') {
76030                  var modifiers_1 = handler.modifiers;
76031                  genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta']
76032                      .filter(function (keyModifier) { return !modifiers_1[keyModifier]; })
76033                      .map(function (keyModifier) { return "$event.".concat(keyModifier, "Key"); })
76034                      .join('||'));
76035              }
76036              else {
76037                  keys.push(key);
76038              }
76039          };
76040          for (var key in handler.modifiers) {
76041              _loop_1(key);
76042          }
76043          if (keys.length) {
76044              code += genKeyFilter(keys);
76045          }
76046          // Make sure modifiers like prevent and stop get executed after key filtering
76047          if (genModifierCode) {
76048              code += genModifierCode;
76049          }
76050          var handlerCode = isMethodPath
76051              ? "return ".concat(handler.value, ".apply(null, arguments)")
76052              : isFunctionExpression
76053                  ? "return (".concat(handler.value, ").apply(null, arguments)")
76054                  : isFunctionInvocation
76055                      ? "return ".concat(handler.value)
76056                      : handler.value;
76057          return "function($event){".concat(code).concat(handlerCode, "}");
76058      }
76059  }
76060  function genKeyFilter(keys) {
76061      return (
76062      // make sure the key filters only apply to KeyboardEvents
76063      // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
76064      // key events that do not have keyCode property...
76065      "if(!$event.type.indexOf('key')&&" +
76066          "".concat(keys.map(genFilterCode).join('&&'), ")return null;"));
76067  }
76068  function genFilterCode(key) {
76069      var keyVal = parseInt(key, 10);
76070      if (keyVal) {
76071          return "$event.keyCode!==".concat(keyVal);
76072      }
76073      var keyCode = keyCodes[key];
76074      var keyName = keyNames[key];
76075      return ("_k($event.keyCode," +
76076          "".concat(JSON.stringify(key), ",") +
76077          "".concat(JSON.stringify(keyCode), ",") +
76078          "$event.key," +
76079          "".concat(JSON.stringify(keyName)) +
76080          ")");
76081  }
76082
76083  function on(el, dir) {
76084      if (dir.modifiers) {
76085          warn$2("v-on without argument does not support modifiers.");
76086      }
76087      el.wrapListeners = function (code) { return "_g(".concat(code, ",").concat(dir.value, ")"); };
76088  }
76089
76090  function bind(el, dir) {
76091      el.wrapData = function (code) {
76092          return "_b(".concat(code, ",'").concat(el.tag, "',").concat(dir.value, ",").concat(dir.modifiers && dir.modifiers.prop ? 'true' : 'false').concat(dir.modifiers && dir.modifiers.sync ? ',true' : '', ")");
76093      };
76094  }
76095
76096  var baseDirectives = {
76097      on: on,
76098      bind: bind,
76099      cloak: noop
76100  };
76101
76102  var CodegenState = /** @class */ (function () {
76103      function CodegenState(options) {
76104          this.options = options;
76105          this.warn = options.warn || baseWarn;
76106          this.transforms = pluckModuleFunction(options.modules, 'transformCode');
76107          this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
76108          this.directives = extend(extend({}, baseDirectives), options.directives);
76109          var isReservedTag = options.isReservedTag || no;
76110          this.maybeComponent = function (el) {
76111              return !!el.component || !isReservedTag(el.tag);
76112          };
76113          this.onceId = 0;
76114          this.staticRenderFns = [];
76115          this.pre = false;
76116      }
76117      return CodegenState;
76118  }());
76119  function generate(ast, options) {
76120      var state = new CodegenState(options);
76121      // fix #11483, Root level <script> tags should not be rendered.
76122      var code = ast
76123          ? ast.tag === 'script'
76124              ? 'null'
76125              : genElement(ast, state)
76126          : '_c("div")';
76127      return {
76128          render: "with(this){return ".concat(code, "}"),
76129          staticRenderFns: state.staticRenderFns
76130      };
76131  }
76132  function genElement(el, state) {
76133      if (el.parent) {
76134          el.pre = el.pre || el.parent.pre;
76135      }
76136      if (el.staticRoot && !el.staticProcessed) {
76137          return genStatic(el, state);
76138      }
76139      else if (el.once && !el.onceProcessed) {
76140          return genOnce(el, state);
76141      }
76142      else if (el.for && !el.forProcessed) {
76143          return genFor(el, state);
76144      }
76145      else if (el.if && !el.ifProcessed) {
76146          return genIf(el, state);
76147      }
76148      else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
76149          return genChildren(el, state) || 'void 0';
76150      }
76151      else if (el.tag === 'slot') {
76152          return genSlot(el, state);
76153      }
76154      else {
76155          // component or element
76156          var code = void 0;
76157          if (el.component) {
76158              code = genComponent(el.component, el, state);
76159          }
76160          else {
76161              var data = void 0;
76162              var maybeComponent = state.maybeComponent(el);
76163              if (!el.plain || (el.pre && maybeComponent)) {
76164                  data = genData(el, state);
76165              }
76166              var tag 
76167              // check if this is a component in <script setup>
76168              = void 0;
76169              // check if this is a component in <script setup>
76170              var bindings = state.options.bindings;
76171              if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {
76172                  tag = checkBindingType(bindings, el.tag);
76173              }
76174              if (!tag)
76175                  tag = "'".concat(el.tag, "'");
76176              var children = el.inlineTemplate ? null : genChildren(el, state, true);
76177              code = "_c(".concat(tag).concat(data ? ",".concat(data) : '' // data
76178              ).concat(children ? ",".concat(children) : '' // children
76179              , ")");
76180          }
76181          // module transforms
76182          for (var i = 0; i < state.transforms.length; i++) {
76183              code = state.transforms[i](el, code);
76184          }
76185          return code;
76186      }
76187  }
76188  function checkBindingType(bindings, key) {
76189      var camelName = camelize(key);
76190      var PascalName = capitalize(camelName);
76191      var checkType = function (type) {
76192          if (bindings[key] === type) {
76193              return key;
76194          }
76195          if (bindings[camelName] === type) {
76196              return camelName;
76197          }
76198          if (bindings[PascalName] === type) {
76199              return PascalName;
76200          }
76201      };
76202      var fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) ||
76203          checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */);
76204      if (fromConst) {
76205          return fromConst;
76206      }
76207      var fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) ||
76208          checkType("setup-ref" /* BindingTypes.SETUP_REF */) ||
76209          checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */);
76210      if (fromMaybeRef) {
76211          return fromMaybeRef;
76212      }
76213  }
76214  // hoist static sub-trees out
76215  function genStatic(el, state) {
76216      el.staticProcessed = true;
76217      // Some elements (templates) need to behave differently inside of a v-pre
76218      // node.  All pre nodes are static roots, so we can use this as a location to
76219      // wrap a state change and reset it upon exiting the pre node.
76220      var originalPreState = state.pre;
76221      if (el.pre) {
76222          state.pre = el.pre;
76223      }
76224      state.staticRenderFns.push("with(this){return ".concat(genElement(el, state), "}"));
76225      state.pre = originalPreState;
76226      return "_m(".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', ")");
76227  }
76228  // v-once
76229  function genOnce(el, state) {
76230      el.onceProcessed = true;
76231      if (el.if && !el.ifProcessed) {
76232          return genIf(el, state);
76233      }
76234      else if (el.staticInFor) {
76235          var key = '';
76236          var parent_1 = el.parent;
76237          while (parent_1) {
76238              if (parent_1.for) {
76239                  key = parent_1.key;
76240                  break;
76241              }
76242              parent_1 = parent_1.parent;
76243          }
76244          if (!key) {
76245              state.warn("v-once can only be used inside v-for that is keyed. ", el.rawAttrsMap['v-once']);
76246              return genElement(el, state);
76247          }
76248          return "_o(".concat(genElement(el, state), ",").concat(state.onceId++, ",").concat(key, ")");
76249      }
76250      else {
76251          return genStatic(el, state);
76252      }
76253  }
76254  function genIf(el, state, altGen, altEmpty) {
76255      el.ifProcessed = true; // avoid recursion
76256      return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);
76257  }
76258  function genIfConditions(conditions, state, altGen, altEmpty) {
76259      if (!conditions.length) {
76260          return altEmpty || '_e()';
76261      }
76262      var condition = conditions.shift();
76263      if (condition.exp) {
76264          return "(".concat(condition.exp, ")?").concat(genTernaryExp(condition.block), ":").concat(genIfConditions(conditions, state, altGen, altEmpty));
76265      }
76266      else {
76267          return "".concat(genTernaryExp(condition.block));
76268      }
76269      // v-if with v-once should generate code like (a)?_m(0):_m(1)
76270      function genTernaryExp(el) {
76271          return altGen
76272              ? altGen(el, state)
76273              : el.once
76274                  ? genOnce(el, state)
76275                  : genElement(el, state);
76276      }
76277  }
76278  function genFor(el, state, altGen, altHelper) {
76279      var exp = el.for;
76280      var alias = el.alias;
76281      var iterator1 = el.iterator1 ? ",".concat(el.iterator1) : '';
76282      var iterator2 = el.iterator2 ? ",".concat(el.iterator2) : '';
76283      if (state.maybeComponent(el) &&
76284          el.tag !== 'slot' &&
76285          el.tag !== 'template' &&
76286          !el.key) {
76287          state.warn("<".concat(el.tag, " v-for=\"").concat(alias, " in ").concat(exp, "\">: component lists rendered with ") +
76288              "v-for should have explicit keys. " +
76289              "See https://v2.vuejs.org/v2/guide/list.html#key for more info.", el.rawAttrsMap['v-for'], true /* tip */);
76290      }
76291      el.forProcessed = true; // avoid recursion
76292      return ("".concat(altHelper || '_l', "((").concat(exp, "),") +
76293          "function(".concat(alias).concat(iterator1).concat(iterator2, "){") +
76294          "return ".concat((altGen || genElement)(el, state)) +
76295          '})');
76296  }
76297  function genData(el, state) {
76298      var data = '{';
76299      // directives first.
76300      // directives may mutate the el's other properties before they are generated.
76301      var dirs = genDirectives(el, state);
76302      if (dirs)
76303          data += dirs + ',';
76304      // key
76305      if (el.key) {
76306          data += "key:".concat(el.key, ",");
76307      }
76308      // ref
76309      if (el.ref) {
76310          data += "ref:".concat(el.ref, ",");
76311      }
76312      if (el.refInFor) {
76313          data += "refInFor:true,";
76314      }
76315      // pre
76316      if (el.pre) {
76317          data += "pre:true,";
76318      }
76319      // record original tag name for components using "is" attribute
76320      if (el.component) {
76321          data += "tag:\"".concat(el.tag, "\",");
76322      }
76323      // module data generation functions
76324      for (var i = 0; i < state.dataGenFns.length; i++) {
76325          data += state.dataGenFns[i](el);
76326      }
76327      // attributes
76328      if (el.attrs) {
76329          data += "attrs:".concat(genProps(el.attrs), ",");
76330      }
76331      // DOM props
76332      if (el.props) {
76333          data += "domProps:".concat(genProps(el.props), ",");
76334      }
76335      // event handlers
76336      if (el.events) {
76337          data += "".concat(genHandlers(el.events, false), ",");
76338      }
76339      if (el.nativeEvents) {
76340          data += "".concat(genHandlers(el.nativeEvents, true), ",");
76341      }
76342      // slot target
76343      // only for non-scoped slots
76344      if (el.slotTarget && !el.slotScope) {
76345          data += "slot:".concat(el.slotTarget, ",");
76346      }
76347      // scoped slots
76348      if (el.scopedSlots) {
76349          data += "".concat(genScopedSlots(el, el.scopedSlots, state), ",");
76350      }
76351      // component v-model
76352      if (el.model) {
76353          data += "model:{value:".concat(el.model.value, ",callback:").concat(el.model.callback, ",expression:").concat(el.model.expression, "},");
76354      }
76355      // inline-template
76356      if (el.inlineTemplate) {
76357          var inlineTemplate = genInlineTemplate(el, state);
76358          if (inlineTemplate) {
76359              data += "".concat(inlineTemplate, ",");
76360          }
76361      }
76362      data = data.replace(/,$/, '') + '}';
76363      // v-bind dynamic argument wrap
76364      // v-bind with dynamic arguments must be applied using the same v-bind object
76365      // merge helper so that class/style/mustUseProp attrs are handled correctly.
76366      if (el.dynamicAttrs) {
76367          data = "_b(".concat(data, ",\"").concat(el.tag, "\",").concat(genProps(el.dynamicAttrs), ")");
76368      }
76369      // v-bind data wrap
76370      if (el.wrapData) {
76371          data = el.wrapData(data);
76372      }
76373      // v-on data wrap
76374      if (el.wrapListeners) {
76375          data = el.wrapListeners(data);
76376      }
76377      return data;
76378  }
76379  function genDirectives(el, state) {
76380      var dirs = el.directives;
76381      if (!dirs)
76382          return;
76383      var res = 'directives:[';
76384      var hasRuntime = false;
76385      var i, l, dir, needRuntime;
76386      for (i = 0, l = dirs.length; i < l; i++) {
76387          dir = dirs[i];
76388          needRuntime = true;
76389          var gen = state.directives[dir.name];
76390          if (gen) {
76391              // compile-time directive that manipulates AST.
76392              // returns true if it also needs a runtime counterpart.
76393              needRuntime = !!gen(el, dir, state.warn);
76394          }
76395          if (needRuntime) {
76396              hasRuntime = true;
76397              res += "{name:\"".concat(dir.name, "\",rawName:\"").concat(dir.rawName, "\"").concat(dir.value
76398                  ? ",value:(".concat(dir.value, "),expression:").concat(JSON.stringify(dir.value))
76399                  : '').concat(dir.arg ? ",arg:".concat(dir.isDynamicArg ? dir.arg : "\"".concat(dir.arg, "\"")) : '').concat(dir.modifiers ? ",modifiers:".concat(JSON.stringify(dir.modifiers)) : '', "},");
76400          }
76401      }
76402      if (hasRuntime) {
76403          return res.slice(0, -1) + ']';
76404      }
76405  }
76406  function genInlineTemplate(el, state) {
76407      var ast = el.children[0];
76408      if ((el.children.length !== 1 || ast.type !== 1)) {
76409          state.warn('Inline-template components must have exactly one child element.', { start: el.start });
76410      }
76411      if (ast && ast.type === 1) {
76412          var inlineRenderFns = generate(ast, state.options);
76413          return "inlineTemplate:{render:function(){".concat(inlineRenderFns.render, "},staticRenderFns:[").concat(inlineRenderFns.staticRenderFns
76414              .map(function (code) { return "function(){".concat(code, "}"); })
76415              .join(','), "]}");
76416      }
76417  }
76418  function genScopedSlots(el, slots, state) {
76419      // by default scoped slots are considered "stable", this allows child
76420      // components with only scoped slots to skip forced updates from parent.
76421      // but in some cases we have to bail-out of this optimization
76422      // for example if the slot contains dynamic names, has v-if or v-for on them...
76423      var needsForceUpdate = el.for ||
76424          Object.keys(slots).some(function (key) {
76425              var slot = slots[key];
76426              return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic
76427              );
76428          });
76429      // #9534: if a component with scoped slots is inside a conditional branch,
76430      // it's possible for the same component to be reused but with different
76431      // compiled slot content. To avoid that, we generate a unique key based on
76432      // the generated code of all the slot contents.
76433      var needsKey = !!el.if;
76434      // OR when it is inside another scoped slot or v-for (the reactivity may be
76435      // disconnected due to the intermediate scope variable)
76436      // #9438, #9506
76437      // TODO: this can be further optimized by properly analyzing in-scope bindings
76438      // and skip force updating ones that do not actually use scope variables.
76439      if (!needsForceUpdate) {
76440          var parent_2 = el.parent;
76441          while (parent_2) {
76442              if ((parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) ||
76443                  parent_2.for) {
76444                  needsForceUpdate = true;
76445                  break;
76446              }
76447              if (parent_2.if) {
76448                  needsKey = true;
76449              }
76450              parent_2 = parent_2.parent;
76451          }
76452      }
76453      var generatedSlots = Object.keys(slots)
76454          .map(function (key) { return genScopedSlot(slots[key], state); })
76455          .join(',');
76456      return "scopedSlots:_u([".concat(generatedSlots, "]").concat(needsForceUpdate ? ",null,true" : "").concat(!needsForceUpdate && needsKey ? ",null,false,".concat(hash(generatedSlots)) : "", ")");
76457  }
76458  function hash(str) {
76459      var hash = 5381;
76460      var i = str.length;
76461      while (i) {
76462          hash = (hash * 33) ^ str.charCodeAt(--i);
76463      }
76464      return hash >>> 0;
76465  }
76466  function containsSlotChild(el) {
76467      if (el.type === 1) {
76468          if (el.tag === 'slot') {
76469              return true;
76470          }
76471          return el.children.some(containsSlotChild);
76472      }
76473      return false;
76474  }
76475  function genScopedSlot(el, state) {
76476      var isLegacySyntax = el.attrsMap['slot-scope'];
76477      if (el.if && !el.ifProcessed && !isLegacySyntax) {
76478          return genIf(el, state, genScopedSlot, "null");
76479      }
76480      if (el.for && !el.forProcessed) {
76481          return genFor(el, state, genScopedSlot);
76482      }
76483      var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope);
76484      var fn = "function(".concat(slotScope, "){") +
76485          "return ".concat(el.tag === 'template'
76486              ? el.if && isLegacySyntax
76487                  ? "(".concat(el.if, ")?").concat(genChildren(el, state) || 'undefined', ":undefined")
76488                  : genChildren(el, state) || 'undefined'
76489              : genElement(el, state), "}");
76490      // reverse proxy v-slot without scope on this.$slots
76491      var reverseProxy = slotScope ? "" : ",proxy:true";
76492      return "{key:".concat(el.slotTarget || "\"default\"", ",fn:").concat(fn).concat(reverseProxy, "}");
76493  }
76494  function genChildren(el, state, checkSkip, altGenElement, altGenNode) {
76495      var children = el.children;
76496      if (children.length) {
76497          var el_1 = children[0];
76498          // optimize single v-for
76499          if (children.length === 1 &&
76500              el_1.for &&
76501              el_1.tag !== 'template' &&
76502              el_1.tag !== 'slot') {
76503              var normalizationType_1 = checkSkip
76504                  ? state.maybeComponent(el_1)
76505                      ? ",1"
76506                      : ",0"
76507                  : "";
76508              return "".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1);
76509          }
76510          var normalizationType = checkSkip
76511              ? getNormalizationType(children, state.maybeComponent)
76512              : 0;
76513          var gen_1 = altGenNode || genNode;
76514          return "[".concat(children.map(function (c) { return gen_1(c, state); }).join(','), "]").concat(normalizationType ? ",".concat(normalizationType) : '');
76515      }
76516  }
76517  // determine the normalization needed for the children array.
76518  // 0: no normalization needed
76519  // 1: simple normalization needed (possible 1-level deep nested array)
76520  // 2: full normalization needed
76521  function getNormalizationType(children, maybeComponent) {
76522      var res = 0;
76523      for (var i = 0; i < children.length; i++) {
76524          var el = children[i];
76525          if (el.type !== 1) {
76526              continue;
76527          }
76528          if (needsNormalization(el) ||
76529              (el.ifConditions &&
76530                  el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {
76531              res = 2;
76532              break;
76533          }
76534          if (maybeComponent(el) ||
76535              (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {
76536              res = 1;
76537          }
76538      }
76539      return res;
76540  }
76541  function needsNormalization(el) {
76542      return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';
76543  }
76544  function genNode(node, state) {
76545      if (node.type === 1) {
76546          return genElement(node, state);
76547      }
76548      else if (node.type === 3 && node.isComment) {
76549          return genComment(node);
76550      }
76551      else {
76552          return genText(node);
76553      }
76554  }
76555  function genText(text) {
76556      return "_v(".concat(text.type === 2
76557          ? text.expression // no need for () because already wrapped in _s()
76558          : transformSpecialNewlines(JSON.stringify(text.text)), ")");
76559  }
76560  function genComment(comment) {
76561      return "_e(".concat(JSON.stringify(comment.text), ")");
76562  }
76563  function genSlot(el, state) {
76564      var slotName = el.slotName || '"default"';
76565      var children = genChildren(el, state);
76566      var res = "_t(".concat(slotName).concat(children ? ",function(){return ".concat(children, "}") : '');
76567      var attrs = el.attrs || el.dynamicAttrs
76568          ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({
76569              // slot props are camelized
76570              name: camelize(attr.name),
76571              value: attr.value,
76572              dynamic: attr.dynamic
76573          }); }))
76574          : null;
76575      var bind = el.attrsMap['v-bind'];
76576      if ((attrs || bind) && !children) {
76577          res += ",null";
76578      }
76579      if (attrs) {
76580          res += ",".concat(attrs);
76581      }
76582      if (bind) {
76583          res += "".concat(attrs ? '' : ',null', ",").concat(bind);
76584      }
76585      return res + ')';
76586  }
76587  // componentName is el.component, take it as argument to shun flow's pessimistic refinement
76588  function genComponent(componentName, el, state) {
76589      var children = el.inlineTemplate ? null : genChildren(el, state, true);
76590      return "_c(".concat(componentName, ",").concat(genData(el, state)).concat(children ? ",".concat(children) : '', ")");
76591  }
76592  function genProps(props) {
76593      var staticProps = "";
76594      var dynamicProps = "";
76595      for (var i = 0; i < props.length; i++) {
76596          var prop = props[i];
76597          var value = transformSpecialNewlines(prop.value);
76598          if (prop.dynamic) {
76599              dynamicProps += "".concat(prop.name, ",").concat(value, ",");
76600          }
76601          else {
76602              staticProps += "\"".concat(prop.name, "\":").concat(value, ",");
76603          }
76604      }
76605      staticProps = "{".concat(staticProps.slice(0, -1), "}");
76606      if (dynamicProps) {
76607          return "_d(".concat(staticProps, ",[").concat(dynamicProps.slice(0, -1), "])");
76608      }
76609      else {
76610          return staticProps;
76611      }
76612  }
76613  // #3895, #4268
76614  function transformSpecialNewlines(text) {
76615      return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');
76616  }
76617
76618  // these keywords should not appear inside expressions, but operators like
76619  // typeof, instanceof and in are allowed
76620  var prohibitedKeywordRE = new RegExp('\\b' +
76621      ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
76622          'super,throw,while,yield,delete,export,import,return,switch,default,' +
76623          'extends,finally,continue,debugger,function,arguments')
76624          .split(',')
76625          .join('\\b|\\b') +
76626      '\\b');
76627  // these unary operators should not be used as property/method names
76628  var unaryOperatorsRE = new RegExp('\\b' +
76629      'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') +
76630      '\\s*\\([^\\)]*\\)');
76631  // strip strings in expressions
76632  var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
76633  // detect problematic expressions in a template
76634  function detectErrors(ast, warn) {
76635      if (ast) {
76636          checkNode(ast, warn);
76637      }
76638  }
76639  function checkNode(node, warn) {
76640      if (node.type === 1) {
76641          for (var name_1 in node.attrsMap) {
76642              if (dirRE.test(name_1)) {
76643                  var value = node.attrsMap[name_1];
76644                  if (value) {
76645                      var range = node.rawAttrsMap[name_1];
76646                      if (name_1 === 'v-for') {
76647                          checkFor(node, "v-for=\"".concat(value, "\""), warn, range);
76648                      }
76649                      else if (name_1 === 'v-slot' || name_1[0] === '#') {
76650                          checkFunctionParameterExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
76651                      }
76652                      else if (onRE.test(name_1)) {
76653                          checkEvent(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
76654                      }
76655                      else {
76656                          checkExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
76657                      }
76658                  }
76659              }
76660          }
76661          if (node.children) {
76662              for (var i = 0; i < node.children.length; i++) {
76663                  checkNode(node.children[i], warn);
76664              }
76665          }
76666      }
76667      else if (node.type === 2) {
76668          checkExpression(node.expression, node.text, warn, node);
76669      }
76670  }
76671  function checkEvent(exp, text, warn, range) {
76672      var stripped = exp.replace(stripStringRE, '');
76673      var keywordMatch = stripped.match(unaryOperatorsRE);
76674      if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
76675          warn("avoid using JavaScript unary operator as property name: " +
76676              "\"".concat(keywordMatch[0], "\" in expression ").concat(text.trim()), range);
76677      }
76678      checkExpression(exp, text, warn, range);
76679  }
76680  function checkFor(node, text, warn, range) {
76681      checkExpression(node.for || '', text, warn, range);
76682      checkIdentifier(node.alias, 'v-for alias', text, warn, range);
76683      checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);
76684      checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);
76685  }
76686  function checkIdentifier(ident, type, text, warn, range) {
76687      if (typeof ident === 'string') {
76688          try {
76689              new Function("var ".concat(ident, "=_"));
76690          }
76691          catch (e) {
76692              warn("invalid ".concat(type, " \"").concat(ident, "\" in expression: ").concat(text.trim()), range);
76693          }
76694      }
76695  }
76696  function checkExpression(exp, text, warn, range) {
76697      try {
76698          new Function("return ".concat(exp));
76699      }
76700      catch (e) {
76701          var keywordMatch = exp
76702              .replace(stripStringRE, '')
76703              .match(prohibitedKeywordRE);
76704          if (keywordMatch) {
76705              warn("avoid using JavaScript keyword as property name: " +
76706                  "\"".concat(keywordMatch[0], "\"\n  Raw expression: ").concat(text.trim()), range);
76707          }
76708          else {
76709              warn("invalid expression: ".concat(e.message, " in\n\n") +
76710                  "    ".concat(exp, "\n\n") +
76711                  "  Raw expression: ".concat(text.trim(), "\n"), range);
76712          }
76713      }
76714  }
76715  function checkFunctionParameterExpression(exp, text, warn, range) {
76716      try {
76717          new Function(exp, '');
76718      }
76719      catch (e) {
76720          warn("invalid function parameter expression: ".concat(e.message, " in\n\n") +
76721              "    ".concat(exp, "\n\n") +
76722              "  Raw expression: ".concat(text.trim(), "\n"), range);
76723      }
76724  }
76725
76726  var range = 2;
76727  function generateCodeFrame(source, start, end) {
76728      if (start === void 0) { start = 0; }
76729      if (end === void 0) { end = source.length; }
76730      var lines = source.split(/\r?\n/);
76731      var count = 0;
76732      var res = [];
76733      for (var i = 0; i < lines.length; i++) {
76734          count += lines[i].length + 1;
76735          if (count >= start) {
76736              for (var j = i - range; j <= i + range || end > count; j++) {
76737                  if (j < 0 || j >= lines.length)
76738                      continue;
76739                  res.push("".concat(j + 1).concat(repeat(" ", 3 - String(j + 1).length), "|  ").concat(lines[j]));
76740                  var lineLength = lines[j].length;
76741                  if (j === i) {
76742                      // push underline
76743                      var pad = start - (count - lineLength) + 1;
76744                      var length_1 = end > count ? lineLength - pad : end - start;
76745                      res.push("   |  " + repeat(" ", pad) + repeat("^", length_1));
76746                  }
76747                  else if (j > i) {
76748                      if (end > count) {
76749                          var length_2 = Math.min(end - count, lineLength);
76750                          res.push("   |  " + repeat("^", length_2));
76751                      }
76752                      count += lineLength + 1;
76753                  }
76754              }
76755              break;
76756          }
76757      }
76758      return res.join('\n');
76759  }
76760  function repeat(str, n) {
76761      var result = '';
76762      if (n > 0) {
76763          // eslint-disable-next-line no-constant-condition
76764          while (true) {
76765              // eslint-disable-line
76766              if (n & 1)
76767                  result += str;
76768              n >>>= 1;
76769              if (n <= 0)
76770                  break;
76771              str += str;
76772          }
76773      }
76774      return result;
76775  }
76776
76777  function createFunction(code, errors) {
76778      try {
76779          return new Function(code);
76780      }
76781      catch (err) {
76782          errors.push({ err: err, code: code });
76783          return noop;
76784      }
76785  }
76786  function createCompileToFunctionFn(compile) {
76787      var cache = Object.create(null);
76788      return function compileToFunctions(template, options, vm) {
76789          options = extend({}, options);
76790          var warn = options.warn || warn$2;
76791          delete options.warn;
76792          /* istanbul ignore if */
76793          {
76794              // detect possible CSP restriction
76795              try {
76796                  new Function('return 1');
76797              }
76798              catch (e) {
76799                  if (e.toString().match(/unsafe-eval|CSP/)) {
76800                      warn('It seems you are using the standalone build of Vue.js in an ' +
76801                          'environment with Content Security Policy that prohibits unsafe-eval. ' +
76802                          'The template compiler cannot work in this environment. Consider ' +
76803                          'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
76804                          'templates into render functions.');
76805                  }
76806              }
76807          }
76808          // check cache
76809          var key = options.delimiters
76810              ? String(options.delimiters) + template
76811              : template;
76812          if (cache[key]) {
76813              return cache[key];
76814          }
76815          // compile
76816          var compiled = compile(template, options);
76817          // check compilation errors/tips
76818          {
76819              if (compiled.errors && compiled.errors.length) {
76820                  if (options.outputSourceRange) {
76821                      compiled.errors.forEach(function (e) {
76822                          warn("Error compiling template:\n\n".concat(e.msg, "\n\n") +
76823                              generateCodeFrame(template, e.start, e.end), vm);
76824                      });
76825                  }
76826                  else {
76827                      warn("Error compiling template:\n\n".concat(template, "\n\n") +
76828                          compiled.errors.map(function (e) { return "- ".concat(e); }).join('\n') +
76829                          '\n', vm);
76830                  }
76831              }
76832              if (compiled.tips && compiled.tips.length) {
76833                  if (options.outputSourceRange) {
76834                      compiled.tips.forEach(function (e) { return tip(e.msg, vm); });
76835                  }
76836                  else {
76837                      compiled.tips.forEach(function (msg) { return tip(msg, vm); });
76838                  }
76839              }
76840          }
76841          // turn code into functions
76842          var res = {};
76843          var fnGenErrors = [];
76844          res.render = createFunction(compiled.render, fnGenErrors);
76845          res.staticRenderFns = compiled.staticRenderFns.map(function (code) {
76846              return createFunction(code, fnGenErrors);
76847          });
76848          // check function generation errors.
76849          // this should only happen if there is a bug in the compiler itself.
76850          // mostly for codegen development use
76851          /* istanbul ignore if */
76852          {
76853              if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
76854                  warn("Failed to generate render function:\n\n" +
76855                      fnGenErrors
76856                          .map(function (_a) {
76857                          var err = _a.err, code = _a.code;
76858                          return "".concat(err.toString(), " in\n\n").concat(code, "\n");
76859                      })
76860                          .join('\n'), vm);
76861              }
76862          }
76863          return (cache[key] = res);
76864      };
76865  }
76866
76867  function createCompilerCreator(baseCompile) {
76868      return function createCompiler(baseOptions) {
76869          function compile(template, options) {
76870              var finalOptions = Object.create(baseOptions);
76871              var errors = [];
76872              var tips = [];
76873              var warn = function (msg, range, tip) {
76874                  (tip ? tips : errors).push(msg);
76875              };
76876              if (options) {
76877                  if (options.outputSourceRange) {
76878                      // $flow-disable-line
76879                      var leadingSpaceLength_1 = template.match(/^\s*/)[0].length;
76880                      warn = function (msg, range, tip) {
76881                          var data = typeof msg === 'string' ? { msg: msg } : msg;
76882                          if (range) {
76883                              if (range.start != null) {
76884                                  data.start = range.start + leadingSpaceLength_1;
76885                              }
76886                              if (range.end != null) {
76887                                  data.end = range.end + leadingSpaceLength_1;
76888                              }
76889                          }
76890                          (tip ? tips : errors).push(data);
76891                      };
76892                  }
76893                  // merge custom modules
76894                  if (options.modules) {
76895                      finalOptions.modules = (baseOptions.modules || []).concat(options.modules);
76896                  }
76897                  // merge custom directives
76898                  if (options.directives) {
76899                      finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);
76900                  }
76901                  // copy other options
76902                  for (var key in options) {
76903                      if (key !== 'modules' && key !== 'directives') {
76904                          finalOptions[key] = options[key];
76905                      }
76906                  }
76907              }
76908              finalOptions.warn = warn;
76909              var compiled = baseCompile(template.trim(), finalOptions);
76910              {
76911                  detectErrors(compiled.ast, warn);
76912              }
76913              compiled.errors = errors;
76914              compiled.tips = tips;
76915              return compiled;
76916          }
76917          return {
76918              compile: compile,
76919              compileToFunctions: createCompileToFunctionFn(compile)
76920          };
76921      };
76922  }
76923
76924  // `createCompilerCreator` allows creating compilers that use alternative
76925  // parser/optimizer/codegen, e.g the SSR optimizing compiler.
76926  // Here we just export a default compiler using the default parts.
76927  var createCompiler = createCompilerCreator(function baseCompile(template, options) {
76928      var ast = parse(template.trim(), options);
76929      if (options.optimize !== false) {
76930          optimize(ast, options);
76931      }
76932      var code = generate(ast, options);
76933      return {
76934          ast: ast,
76935          render: code.render,
76936          staticRenderFns: code.staticRenderFns
76937      };
76938  });
76939
76940  var _a = createCompiler(baseOptions), compileToFunctions = _a.compileToFunctions;
76941
76942  // check whether current browser encodes a char inside attribute values
76943  var div;
76944  function getShouldDecode(href) {
76945      div = div || document.createElement('div');
76946      div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>";
76947      return div.innerHTML.indexOf('&#10;') > 0;
76948  }
76949  // #3663: IE encodes newlines inside attribute values while other browsers don't
76950  var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;
76951  // #6828: chrome encodes content in a[href]
76952  var shouldDecodeNewlinesForHref = inBrowser
76953      ? getShouldDecode(true)
76954      : false;
76955
76956  var idToTemplate = cached(function (id) {
76957      var el = query(id);
76958      return el && el.innerHTML;
76959  });
76960  var mount = Vue.prototype.$mount;
76961  Vue.prototype.$mount = function (el, hydrating) {
76962      el = el && query(el);
76963      /* istanbul ignore if */
76964      if (el === document.body || el === document.documentElement) {
76965          warn$2("Do not mount Vue to <html> or <body> - mount to normal elements instead.");
76966          return this;
76967      }
76968      var options = this.$options;
76969      // resolve template/el and convert to render function
76970      if (!options.render) {
76971          var template = options.template;
76972          if (template) {
76973              if (typeof template === 'string') {
76974                  if (template.charAt(0) === '#') {
76975                      template = idToTemplate(template);
76976                      /* istanbul ignore if */
76977                      if (!template) {
76978                          warn$2("Template element not found or is empty: ".concat(options.template), this);
76979                      }
76980                  }
76981              }
76982              else if (template.nodeType) {
76983                  template = template.innerHTML;
76984              }
76985              else {
76986                  {
76987                      warn$2('invalid template option:' + template, this);
76988                  }
76989                  return this;
76990              }
76991          }
76992          else if (el) {
76993              // @ts-expect-error
76994              template = getOuterHTML(el);
76995          }
76996          if (template) {
76997              /* istanbul ignore if */
76998              if (config.performance && mark) {
76999                  mark('compile');
77000              }
77001              var _a = compileToFunctions(template, {
77002                  outputSourceRange: true,
77003                  shouldDecodeNewlines: shouldDecodeNewlines,
77004                  shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,
77005                  delimiters: options.delimiters,
77006                  comments: options.comments
77007              }, this), render = _a.render, staticRenderFns = _a.staticRenderFns;
77008              options.render = render;
77009              options.staticRenderFns = staticRenderFns;
77010              /* istanbul ignore if */
77011              if (config.performance && mark) {
77012                  mark('compile end');
77013                  measure("vue ".concat(this._name, " compile"), 'compile', 'compile end');
77014              }
77015          }
77016      }
77017      return mount.call(this, el, hydrating);
77018  };
77019  /**
77020   * Get outerHTML of elements, taking care
77021   * of SVG elements in IE as well.
77022   */
77023  function getOuterHTML(el) {
77024      if (el.outerHTML) {
77025          return el.outerHTML;
77026      }
77027      else {
77028          var container = document.createElement('div');
77029          container.appendChild(el.cloneNode(true));
77030          return container.innerHTML;
77031      }
77032  }
77033  Vue.compile = compileToFunctions;
77034
77035  // export type EffectScheduler = (...args: any[]) => any
77036  /**
77037   * @internal since we are not exposing this in Vue 2, it's used only for
77038   * internal testing.
77039   */
77040  function effect(fn, scheduler) {
77041      var watcher = new Watcher(currentInstance, fn, noop, {
77042          sync: true
77043      });
77044      if (scheduler) {
77045          watcher.update = function () {
77046              scheduler(function () { return watcher.run(); });
77047          };
77048      }
77049  }
77050
77051  extend(Vue, vca);
77052  Vue.effect = effect;
77053
77054  return Vue;
77055
77056}));
77057
77058/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../../timers-browserify/main.js */ "./node_modules/timers-browserify/main.js").setImmediate))
77059
77060/***/ }),
77061
vendor: 724 bytes, lines 77062-77092
77062/***/ "./node_modules/webpack/buildin/global.js":
77063/*!***********************************!*\
77064  !*** (webpack)/buildin/global.js ***!
77065  \***********************************/
77066/*! no static exports found */
77067/***/ (function(module, exports) {
77068
77069var g;
77070
77071// This works in non-strict mode
77072g = (function() {
77073	return this;
77074})();
77075
77076try {
77077	// This works if eval is allowed (see CSP)
77078	g = g || new Function("return this")();
77079} catch (e) {
77080	// This works if the window reference is available
77081	if (typeof window === "object") g = window;
77082}
77083
77084// g can still be undefined, but nothing to do about it...
77085// We return undefined, instead of nothing here, so it's
77086// easier to handle this case. if(!global) { ...}
77087
77088module.exports = g;
77089
77090
77091/***/ }),
77092
vendor: 749 bytes, lines 77093-77125
77093/***/ "./node_modules/webpack/buildin/module.js":
77094/*!***********************************!*\
77095  !*** (webpack)/buildin/module.js ***!
77096  \***********************************/
77097/*! no static exports found */
77098/***/ (function(module, exports) {
77099
77100module.exports = function(module) {
77101	if (!module.webpackPolyfill) {
77102		module.deprecate = function() {};
77103		module.paths = [];
77104		// module.parent = undefined by default
77105		if (!module.children) module.children = [];
77106		Object.defineProperty(module, "loaded", {
77107			enumerable: true,
77108			get: function() {
77109				return module.l;
77110			}
77111		});
77112		Object.defineProperty(module, "id", {
77113			enumerable: true,
77114			get: function() {
77115				return module.i;
77116			}
77117		});
77118		module.webpackPolyfill = 1;
77119	}
77120	return module;
77121};
77122
77123
77124/***/ }),
77125
77126/***/ "./resources/js/app.js":
77127/*!*****************************!*\
77128  !*** ./resources/js/app.js ***!
77129  \*****************************/
77130/*! no static exports found */
77131/***/ (function(module, exports, __webpack_require__) {
77132
77133/*
77134 |--------------------------------------------------------------------------
77135 | Laravel Spark Bootstrap
77136 |--------------------------------------------------------------------------
77137 |
77138 | First, we will load all of the "core" dependencies for Spark which are
77139 | libraries such as Vue and jQuery. This also loads the Spark helpers
77140 | for things such as HTTP calls, forms, and form validation errors.
77141 |
77142 | Next, we'll create the root Vue application for Spark. This will start
77143 | the entire application and attach it to the DOM. Of course, you may
77144 | customize this script as you desire and load your own components.
77145 |
77146 */
77147
77148__webpack_require__(/*! spark-bootstrap */ "./vendor/laravel/spark-aurelius/resources/assets/js/spark-bootstrap.js");
77149__webpack_require__(/*! ./components/bootstrap */ "./resources/js/components/bootstrap.js");
77150__webpack_require__(/*! ./custom-scripts/custom */ "./resources/js/custom-scripts/custom.js");
77151var app = new Vue({
77152  mixins: [__webpack_require__(/*! spark */ "./vendor/laravel/spark-aurelius/resources/assets/js/spark.js")]
77153});
77154
77155/***/ }),
77156
77157/***/ "./resources/js/components/bootstrap.js":
77158/*!**********************************************!*\
77159  !*** ./resources/js/components/bootstrap.js ***!
77160  \**********************************************/
77161/*! no static exports found */
77162/***/ (function(module, exports, __webpack_require__) {
77163
77164/*
77165 |--------------------------------------------------------------------------
77166 | Laravel Spark Components
77167 |--------------------------------------------------------------------------
77168 |
77169 | Here we will load the Spark components which makes up the core client
77170 | application. This is also a convenient spot for you to load all of
77171 | your components that you write while building your applications.
77172 */
77173
77174__webpack_require__(/*! ./../spark-components/bootstrap */ "./resources/js/spark-components/bootstrap.js");
77175__webpack_require__(/*! ./home */ "./resources/js/components/home.js");
77176__webpack_require__(/*! ./widget/create */ "./resources/js/components/widget/create.js");
77177__webpack_require__(/*! ./widget/create-list */ "./resources/js/components/widget/create-list.js");
77178
77179// Load the new Vue component...
77180__webpack_require__(/*! ./settings/profile/update-profile-details */ "./resources/js/components/settings/profile/update-profile-details.js");
77181__webpack_require__(/*! ./settings/profile/update-sendgrid-marketing-campaigns-version */ "./resources/js/components/settings/profile/update-sendgrid-marketing-campaigns-version.js");
77182__webpack_require__(/*! ./settings/profile/update-api-token */ "./resources/js/components/settings/profile/update-api-token.js");
77183__webpack_require__(/*! ./settings/profile/manage-api-keys */ "./resources/js/components/settings/profile/manage-api-keys.js");
77184__webpack_require__(/*! ./settings/profile/update-api-key */ "./resources/js/components/settings/profile/update-api-key.js");
77185__webpack_require__(/*! ./settings/profile/add-api-key-btn */ "./resources/js/components/settings/profile/add-api-key-btn.js");
77186
77187/***/ }),
77188
77189/***/ "./resources/js/components/home.js":
77190/*!*****************************************!*\
77191  !*** ./resources/js/components/home.js ***!
77192  \*****************************************/
77193/*! no static exports found */
77194/***/ (function(module, exports) {
77195
77196Vue.component('home', {
77197  props: ['user'],
77198  mounted: function mounted() {
77199    //
77200  }
77201});
77202
77203/***/ }),
77204
77205/***/ "./resources/js/components/settings/profile/add-api-key-btn.js":
77206/*!*********************************************************************!*\
77207  !*** ./resources/js/components/settings/profile/add-api-key-btn.js ***!
77208  \*********************************************************************/
77209/*! no static exports found */
77210/***/ (function(module, exports) {
77211
77212Vue.component('add-api-key-btn', {
77213  props: ['user', 'apikeys'],
77214  data: function data() {
77215    return {
77216      form: new SparkForm({
77217        sendgrid_token: ''
77218      })
77219    };
77220  },
77221  mounted: function mounted() {
77222    console.log('api keys btn');
77223  },
77224  methods: {
77225    addKey: function addKey(event) {
77226      var _this = this;
77227      Spark.put('/settings/profile/add-api-key', this.form).then(function (response) {
77228        console.log(response);
77229        _this.$emit('add-key', _this.form.id);
77230      });
77231    }
77232  }
77233});
77234
77235/***/ }),
77236
77237/***/ "./resources/js/components/settings/profile/manage-api-keys.js":
77238/*!*********************************************************************!*\
77239  !*** ./resources/js/components/settings/profile/manage-api-keys.js ***!
77240  \*********************************************************************/
77241/*! no static exports found */
77242/***/ (function(module, exports) {
77243
77244Vue.component('manage-api-keys', {
77245  props: ['user'],
77246  data: function data() {
77247    return {
77248      form: new SparkForm({
77249        sendgrid_token: ''
77250      }),
77251      apiKeys: []
77252    };
77253  },
77254  mounted: function mounted() {
77255    this.getApiKeys();
77256  },
77257  methods: {
77258    getApiKeys: function getApiKeys() {
77259      var _this = this;
77260      axios.get('/settings/profile/get-api-keys').then(function (response) {
77261        _this.apiKeys = response.data;
77262      })["catch"](function (error) {
77263        // this.connected = false;
77264        // this.notConnected = true;
77265      })["finally"](function (e) {
77266        //console.log('test finished1');
77267      });
77268    },
77269    destroyKey: function destroyKey(apikey) {
77270      window.location.reload();
77271    },
77272    //listen to add key event and call all keys again to update UI
77273    addKey: function addKey() {
77274      this.getApiKeys();
77275      this.$forceUpdate();
77276    }
77277  }
77278});
77279
77280/***/ }),
77281
77282/***/ "./resources/js/components/settings/profile/update-api-key.js":
77283/*!********************************************************************!*\
77284  !*** ./resources/js/components/settings/profile/update-api-key.js ***!
77285  \********************************************************************/
77286/*! no static exports found */
77287/***/ (function(module, exports) {
77288
77289Vue.component('update-api-key', {
77290  props: ['user', 'apikey', 'index', 'apikeys'],
77291  data: function data() {
77292    return {
77293      form: new SparkForm({
77294        id: this.apikey.id,
77295        sendgrid_token: this.apikey.sendgrid_token,
77296        name: this.apikey.name,
77297        marketing_campaigns_version: this.apikey.marketing_campaigns_version
77298      }),
77299      connected: false,
77300      testing: true,
77301      apiKeys: [],
77302      errors: []
77303    };
77304  },
77305  mounted: function mounted() {
77306    this.testSendgridApiConnection(this.form.id);
77307  },
77308  methods: {
77309    update: function update(e) {
77310      var _this = this;
77311      this.testing = true;
77312      this.errors = [];
77313      if (!this.form.sendgrid_token) {
77314        this.errors.push('Sendgrid Token required');
77315        this.testing = false;
77316      }
77317      if (!this.form.name) {
77318        this.errors.push('Name required');
77319        this.testing = false;
77320      }
77321      Spark.put('/settings/profile/update-api-key', this.form).then(function (response) {
77322        Bus.$emit('updateUser');
77323        _this.testSendgridApiConnection(_this.form.id);
77324      })["catch"](function (error) {
77325        console.log('catch');
77326        console.log(error.errors.name[0]);
77327      })["finally"](function (e) {
77328        //
77329      });
77330    },
77331    destroy: function destroy(apikey) {
77332      var _this2 = this;
77333      if (confirm("Do you really want to delete? Any widget using this key will break ")) {
77334        axios["delete"]('/settings/profile/delete-api-key/' + this.form.id).then(function (resp) {
77335          //emit an event that parent component listens to and handles
77336          _this2.$emit('destroy-key', apikey);
77337        })["catch"](function (error) {
77338          console.log(error);
77339        });
77340      }
77341    },
77342    testSendgridApiConnection: function testSendgridApiConnection(key_id) {
77343      var _this3 = this;
77344      axios.get('/settings/profile/test-sendgrid-api/' + key_id).then(function (response) {
77345        //console.log(response);
77346
77347        if (response.data.status == true) {
77348          _this3.connected = true;
77349          _this3.testing = false;
77350        } else {
77351          _this3.errors = [];
77352          _this3.connected = false;
77353          _this3.testing = false;
77354          if (response.data.error != false && response.data.error != undefined) {
77355            _this3.errors.push(response.data.error);
77356          }
77357          if (response.data.help_msg != false && response.data.help_msg != undefined) {
77358            _this3.errors.push(response.data.help_msg);
77359          }
77360        }
77361      })["catch"](function (error) {
77362        _this3.connected = false;
77363        _this3.notConnected = true;
77364      })["finally"](function (e) {
77365        //console.log('test finished');
77366      });
77367    }
77368  }
77369});
77370
77371/***/ }),
77372
77373/***/ "./resources/js/components/settings/profile/update-api-token.js":
77374/*!**********************************************************************!*\
77375  !*** ./resources/js/components/settings/profile/update-api-token.js ***!
77376  \**********************************************************************/
77377/*! no static exports found */
77378/***/ (function(module, exports) {
77379
77380Vue.component('update-api-token', {
77381  props: ['user'],
77382  data: function data() {
77383    return {
77384      form: new SparkForm({
77385        api_token: this.user.api_token
77386      })
77387    };
77388  },
77389  created: function created() {
77390    console.log(this.user);
77391  },
77392  methods: {
77393    update: function update() {
77394      Spark.put('/settings/profile/token', this.form).then(function (response) {
77395        window.location.reload();
77396      });
77397    }
77398  }
77399});
77400
77401/***/ }),
77402
77403/***/ "./resources/js/components/settings/profile/update-profile-details.js":
77404/*!****************************************************************************!*\
77405  !*** ./resources/js/components/settings/profile/update-profile-details.js ***!
77406  \****************************************************************************/
77407/*! no static exports found */
77408/***/ (function(module, exports) {
77409
77410Vue.component('update-profile-details', {
77411  props: ['user'],
77412  data: function data() {
77413    return {
77414      form: new SparkForm({
77415        sendgrid_token: ''
77416      }),
77417      apiConnection: false,
77418      notConnected: false,
77419      connected: false,
77420      error: false,
77421      help_msg: false
77422    };
77423  },
77424  mounted: function mounted() {
77425    if (this.user.sendgrid_token) {
77426      this.apiConnection = true;
77427      this.testSendgridApiConnection();
77428    }
77429  },
77430  methods: {
77431    update: function update() {
77432      var _this = this;
77433      Spark.put('/settings/profile/details', this.form).then(function (response) {
77434        Bus.$emit('updateUser');
77435        _this.testSendgridApiConnection();
77436      });
77437    },
77438    testSendgridApiConnection: function testSendgridApiConnection() {
77439      var _this2 = this;
77440      axios.get('/settings/profile/test-sendgrid-api').then(function (response) {
77441        console.log(response);
77442        if (response.data.status == true) {
77443          _this2.connected = true;
77444          _this2.notConnected = false;
77445        } else {
77446          _this2.connected = false;
77447          _this2.notConnected = true;
77448          if (response.data.error != false) {
77449            _this2.error = response.data.error;
77450          }
77451          if (response.data.help_msg != false) {
77452            _this2.help_msg = response.data.help_msg;
77453          }
77454        }
77455      })["catch"](function (error) {
77456        _this2.connected = false;
77457        _this2.notConnected = true;
77458      })["finally"](function (e) {
77459        console.log('test finished');
77460      });
77461    }
77462  }
77463});
77464
77465/***/ }),
77466
77467/***/ "./resources/js/components/settings/profile/update-sendgrid-marketing-campaigns-version.js":
77468/*!*************************************************************************************************!*\
77469  !*** ./resources/js/components/settings/profile/update-sendgrid-marketing-campaigns-version.js ***!
77470  \*************************************************************************************************/
77471/*! no static exports found */
77472/***/ (function(module, exports) {
77473
77474Vue.component('update-sendgrid-marketing-campaigns-version', {
77475  props: ['user'],
77476  data: function data() {
77477    return {
77478      form: new SparkForm({
77479        marketing_campaigns_version: this.user.marketing_campaigns_version
77480      })
77481    };
77482  },
77483  methods: {
77484    update: function update() {
77485      console.log(this.form);
77486      Spark.put('/settings/profile/marketing-campaigns-version', this.form).then(function (response) {
77487        Bus.$emit('updateUser');
77488      });
77489    }
77490  }
77491});
77492
77493/***/ }),
77494
77495/***/ "./resources/js/components/widget/create-list.js":
77496/*!*******************************************************!*\
77497  !*** ./resources/js/components/widget/create-list.js ***!
77498  \*******************************************************/
77499/*! no static exports found */
77500/***/ (function(module, exports) {
77501
77502Vue.component('create-list', {
77503  props: ['user', 'apikey'],
77504  data: function data() {
77505    return {
77506      form: new SparkForm({
77507        list_name: '',
77508        apikey_id: this.apikey,
77509        new_list_id: ''
77510      }),
77511      selected: '',
77512      keyselected: false,
77513      listsloading: false,
77514      creating: false,
77515      created: false,
77516      errors: []
77517    };
77518  },
77519  mounted: function mounted() {
77520    console.log('create list called ' + this.apikey);
77521    //this.getlists();
77522  },
77523  methods: {
77524    create: function create(event) {
77525      var _this = this;
77526      console.log('create clicked');
77527      this.errors = [];
77528      if (!this.form.list_name) {
77529        this.errors.push('List Name required');
77530        this.testing = false;
77531        this.status = false;
77532        return;
77533      }
77534      this.creating = true;
77535      Spark.put('/create-list', this.form).then(function (response) {
77536        _this.form.new_list_id = response.list_id;
77537        _this.creating = false;
77538        _this.created = true;
77539      })["catch"](function (error) {
77540        console.log('error triggered');
77541        console.log(error.error);
77542        _this.errors.push(error.error);
77543        _this.testing = false;
77544        _this.status = false;
77545        // this.connected = false;
77546        // this.notConnected = true;
77547      });
77548    }
77549  }
77550});
77551
77552/***/ }),
77553
77554/***/ "./resources/js/components/widget/create.js":
77555/*!**************************************************!*\
77556  !*** ./resources/js/components/widget/create.js ***!
77557  \**************************************************/
77558/*! no static exports found */
77559/***/ (function(module, exports) {
77560
77561Vue.component('create', {
77562  props: ['user'],
77563  data: function data() {
77564    return {
77565      apikey: '',
77566      lists: [],
77567      list: '',
77568      new_list_id: '',
77569      list_id: '',
77570      keyselected: false,
77571      listsloading: false,
77572      subuser: ''
77573    };
77574  },
77575  mounted: function mounted() {
77576    console.log('create widget called');
77577  },
77578  methods: {
77579    getLists: function getLists() {
77580      var _this = this;
77581      axios.get('/get-lists/' + this.apikey).then(function (response) {
77582        var lists = response.data;
77583        for (i = 0; i < lists.length; i++) {
77584          console.log(lists[i].id);
77585        }
77586        _this.lists = response.data;
77587        _this.listsloading = false;
77588      })["catch"](function (error) {
77589        // this.connected = false;
77590        // this.notConnected = true;
77591      })["finally"](function (e) {
77592        //console.log('test finished1');
77593      });
77594    },
77595    onApiKeyChange: function onApiKeyChange() {
77596      this.getLists();
77597      this.keyselected = true;
77598      this.listsloading = true;
77599    },
77600    onListChange: function onListChange(list) {
77601      this.list_id = this.list.id;
77602      this.subuser = this.list.subuser;
77603    }
77604  }
77605});
77606
77607/***/ }),
77608
77609/***/ "./resources/js/custom-scripts/custom.js":
77610/*!***********************************************!*\
77611  !*** ./resources/js/custom-scripts/custom.js ***!
77612  \***********************************************/
77613/*! no static exports found */
77614/***/ (function(module, exports) {
77615
77616$(document).ready(function () {
77617  $(function () {
77618    $('.confirm').click(function () {
77619      return window.confirm("Are you sure?");
77620    });
77621  });
77622  $("#how-to-find-list-id-link").click(function () {
77623    $(".how-to-find-list-id").show("slow", function () {
77624      // Animation complete.
77625    });
77626  });
77627  $("#how-to-create-api-key").click(function () {
77628    $(".how-to-create-api-key").show("slow", function () {
77629      // Animation complete.
77630    });
77631  });
77632  $('#range-dropdown').on('change', function () {
77633    var url = window.location.href.substr(0, window.location.href.indexOf('#'));
77634    if (url.indexOf('?') > -1) {
77635      url += '&range=' + this.value;
77636    } else {
77637      url += '?range=' + this.value;
77638    }
77639    window.location.href = url;
77640  });
77641  $('input[id=single_opt_in_radio]').change(function () {
77642    if ($(this).is(':checked')) {
77643      $(".single-opt-in-container").show();
77644      $(".double-opt-in-container").hide();
77645    } else {
77646      $(".single-opt-in-container").hide();
77647      $(".double-opt-in-container").show();
77648    }
77649  });
77650  $('input[id=double_opt_in_radio]').change(function () {
77651    if ($(this).is(':checked')) {
77652      $(".double-opt-in-container").show();
77653      $(".single-opt-in-container").hide();
77654    } else {
77655      $(".double-opt-in-container").hide();
77656      $(".single-opt-in-container").show();
77657    }
77658  });
77659  $('input[name=signup_name]').change(function () {
77660    if ($(this).is(':checked')) {
77661      $("#signup_name_err_msg").show();
77662    } else {
77663      $("#signup_name_err_msg").hide();
77664    }
77665  });
77666  $('input[name=consent_checkbox]').change(function () {
77667    if ($(this).is(':checked')) {
77668      $(".consent-container").show();
77669    } else {
77670      $(".consent-container").hide();
77671    }
77672  });
77673  $('input[name=welcome_email]').change(function () {
77674    if ($(this).is(':checked')) {
77675      $(".welcome-email-container").show();
77676    } else {
77677      $(".welcome-email-container").hide();
77678    }
77679  });
77680  $('input[id=welcome_email_template_default_radio]').change(function () {
77681    if ($(this).is(':checked')) {
77682      $(".welcome_email_default").show();
77683      $(".welcome_email_custom").hide();
77684    } else {
77685      $(".welcome_email_default").hide();
77686      $(".welcome_email_custom").show();
77687    }
77688  });
77689  $('input[id=welcome_email_template_custom_radio]').change(function () {
77690    if ($(this).is(':checked')) {
77691      $(".welcome_email_custom").show();
77692      $(".welcome_email_default").hide();
77693    } else {
77694      $(".welcome_email_custom").hide();
77695      $(".welcome_email_default").show();
77696    }
77697  });
77698  $('input[id=dbl_optin_email_template_default_radio]').change(function () {
77699    if ($(this).is(':checked')) {
77700      $(".dbl_optin_email_default").show();
77701      $(".dbl_optin_email_custom").hide();
77702    } else {
77703      $(".dbl_optin_email_default").hide();
77704      $(".dbl_optin_email_custom").show();
77705    }
77706  });
77707  $('input[id=dbl_optin_email_template_custom_radio]').change(function () {
77708    if ($(this).is(':checked')) {
77709      $(".dbl_optin_email_custom").show();
77710      $(".dbl_optin_email_default").hide();
77711    } else {
77712      $(".dbl_optin_email_custom").hide();
77713      $(".dbl_optin_email_default").show();
77714    }
77715  });
77716  $('#list').on('change', function () {
77717    $("#subuser").val($(this).find(':selected').data('subuser'));
77718  });
77719  $('input[name=custom_fields]').change(function () {
77720    if ($(this).is(':checked')) {
77721      $(".custom-fields-container").show();
77722    } else {
77723      $(".custom-fields-container").hide();
77724    }
77725  });
77726  $(".custom-fields-container").on("click", "#add-custom-field", function () {
77727    event.preventDefault();
77728    $(".custom-fields-container").show();
77729    var io_item_count = $('#item_count').val();
77730    io_item_count++;
77731    $('#item_count').val(io_item_count);
77732    var predefined_custom_fields = [];
77733    var current_widget_id = localStorage.getItem("widget_id");
77734    var current_widget_id = current_widget_id.replace(/"/g, '');
77735    for (var i = 0; i < localStorage.length; i++) {
77736      if (localStorage.key(i).includes('widget-' + current_widget_id + '-predefined-custom-field')) {
77737        var field = JSON.parse(localStorage.getItem(localStorage.key(i)));
77738        var field_value = field.value;
77739        var field_value = field_value.replace(/"/g, '');
77740        var field_name = field.name;
77741        var field_name = field_name.replace(/"/g, '');
77742        predefined_custom_fields.push('<option value="' + field_value + '" class="custom-fields-name-option">' + field_name + '</option>');
77743      }
77744    }
77745    $("#custom-fields").append("<div class='row'></div>" + "<div class='form-row item custom-field-row-id-" + io_item_count + "'>" + "<div class='form-group col-md-3'>" + "<select name='custom_fields_values[" + io_item_count + "][name]' class='form-control custom-fields-name-option' data-id='" + io_item_count + "'>" + predefined_custom_fields + "</select>" + "</div>" + "<div class='form-group col-md-3'>" + "<select name='custom_fields_values[" + io_item_count + "][type]' class='form-control custom-fields-type-option' data-id='" + io_item_count + "'>" + "<option value='text' class='custom-fields-type-option'>Text</option>" + "<option value='number' class='custom-fields-type-option'>Number</option>" + "<option value='email' class='custom-fields-type-option'>Email</option>
77745" + "<option value='tel' class='custom-fields-type-option'>Tel</option>" + "<option value='checkbox' class='custom-fields-type-option'>Checkbox</option>" + "<option value='select' class='custom-fields-type-option'>Select(Dropdown)</option>" + "<option value='hidden' class='custom-fields-type-option'>Hidden</option>" + "</select>" + "</div>" + "<div class='form-group col-md-3'>" + "<input type='text' class='form-control' id='custom-fields-placeholder-option-" + io_item_count + "' name='custom_fields_values[" + io_item_count + "][placeholder]'>" + "</div>" + "<div class='form-group col-md-2'>" + "<select name='custom_fields_values[" + io_item_count + "][required]' class='form-control' id='custom-fields-required-option-" + io_item_count + "'>" + "<option value='yes'>Yes</option>" + "<option value='no'>No</option>" + "</select>" + "</div>" + "<div class='form-group col-md-1'>" + "<a class='remove-custom-field' data-id='" + io_item_count + "'><i class='fa fa-minus-circle' aria-hidden='true'></i></a>" + "</div>" + "</div>");
77746  });
77747  $(".custom-fields-container").on("click", ".remove-custom-field", function () {
77748    var clicked_id = $(this).attr("data-id");
77749    $('.custom-field-row-id-' + clicked_id).remove();
77750  });
77751  $(".custom-fields-container").on("click", ".remove-select-option", function () {
77752    var clicked_id = $(this).attr("data-id");
77753    var parent_id = $(this).attr("parent-id");
77754    $('.select-item-' + parent_id + ' .option-' + clicked_id).remove();
77755  });
77756  $(".custom-fields-container").on('change', '.custom-fields-type-option', function () {
77757    var clicked_id = $(this).attr("data-id");
77758    if (this.value == 'hidden') {
77759      $("#custom-fields-required-option-" + clicked_id).val("no");
77760      $("#custom-fields-placeholder-option-" + clicked_id).hide();
77761    }
77762    if (this.value == 'select') {
77763      $(".custom-field-row-id-" + clicked_id).after("<div class='form-row item select-options-wrap select-item-" + clicked_id + "'>" + "<div class='form-group col-md-3'>" + "</div>" + "<div class='form-group col-md-3'>" + "<span class='titles' style='display:none;'>" + "<div class='form-row col-md-11'>" + "<div class='col-md-6 no-padding text-left'>" + "Display Text" + "<div class='help-tip'>" + "<p>Text that will display in the dropdown</p>" + "</div>" + "</div>" + "<div class='col-md-6 no-padding text-left'>" + "Value" + "<div class='help-tip'>" + "<p>Form value that will be submitted when this option is selected</p>" + "</div>" + "</div>" + "</div>" + "<div class='col-md-1'></div>" + "</span>" + "<ul id='select-options-" + clicked_id + "'></ul>" + "<div class='form-row flex-row-reverse'><p class='text-right'><span class='add-select-option' data-id='" + clicked_id + "'><i class='fa fa-plus-circle'></i> <small>Add option<small></span></p></div>" + "</div>" + "<div class='form-group col-md-3'>" + "&nbsp;" + "</div>" + "<div class='form-group col-md-2'>" + "&nbsp;" + "</div>" + "<div class='form-group col-md-1'>" + "&nbsp;" + "</div>" + "</div>" + "<div class='row'></div>");
77764    } else {
77765      $(".select-item-" + clicked_id).remove();
77766    }
77767  });
77768  $(".custom-fields-container").on("click", ".add-select-option", function () {
77769    event.preventDefault();
77770    $(".select-options-wrap .titles").show();
77771    var item_id = $(this).attr("data-id");
77772    var count = $("#select-options-" + item_id + " li").length;
77773    count = count + 1;
77774    $("#select-options-" + item_id).append("<li class='form-row select-option option-" + count + "'>" + "<div class='form-group col-md-6 no-padding'><input type='text' name='custom_fields_values[" + item_id + "][selectoptions][" + count + "][text]'/></div>" + "<div class='form-group col-md-5 no-padding'><input type='text' name='custom_fields_values[" + item_id + "][selectoptions][" + count + "][value]'/></div>" + "<div class='form-group col-md-1 no-padding'>" + "<a class='remove-select-option' parent-id='" + item_id + "' data-id='" + count + "'><i class='fa fa-minus-circle' aria-hidden='true'></i></a>" + "</div>" + "</li>");
77775  });
77776});
77777
77778/***/ }),
77779
77780/***/ "./resources/js/spark-components/auth/register-stripe.js":
77781/*!***************************************************************!*\
77782  !*** ./resources/js/spark-components/auth/register-stripe.js ***!
77783  \***************************************************************/
77784/*! no static exports found */
77785/***/ (function(module, exports, __webpack_require__) {
77786
77787var base = __webpack_require__(/*! auth/register-stripe */ "./vendor/laravel/spark-aurelius/resources/assets/js/auth/register-stripe.js");
77788Vue.component('spark-register-stripe', {
77789  mixins: [base]
77790});
77791
77792/***/ }),
77793
77794/***/ "./resources/js/spark-components/bootstrap.js":
77795/*!****************************************************!*\
77796  !*** ./resources/js/spark-components/bootstrap.js ***!
77797  \****************************************************/
77798/*! no static exports found */
77799/***/ (function(module, exports, __webpack_require__) {
77800
77801/**
77802 * Layout Components...
77803 */
77804__webpack_require__(/*! ./navbar/navbar */ "./resources/js/spark-components/navbar/navbar.js");
77805__webpack_require__(/*! ./notifications/notifications */ "./resources/js/spark-components/notifications/notifications.js");
77806
77807/**
77808 * Authentication Components...
77809 */
77810__webpack_require__(/*! ./auth/register-stripe */ "./resources/js/spark-components/auth/register-stripe.js");
77811
77812/**
77813 * Settings Component...
77814 */
77815__webpack_require__(/*! ./settings/settings */ "./resources/js/spark-components/settings/settings.js");
77816
77817/**
77818 * Profile Settings Components...
77819 */
77820__webpack_require__(/*! ./settings/profile */ "./resources/js/spark-components/settings/profile.js");
77821__webpack_require__(/*! ./settings/profile/update-profile-photo */ "./resources/js/spark-components/settings/profile/update-profile-photo.js");
77822__webpack_require__(/*! ./settings/profile/update-contact-information */ "./resources/js/spark-components/settings/profile/update-contact-information.js");
77823
77824/**
77825 * Teams Settings Components...
77826 */
77827__webpack_require__(/*! ./settings/teams */ "./resources/js/spark-components/settings/teams.js");
77828__webpack_require__(/*! ./settings/teams/create-team */ "./resources/js/spark-components/settings/teams/create-team.js");
77829__webpack_require__(/*! ./settings/teams/pending-invitations */ "./resources/js/spark-components/settings/teams/pending-invitations.js");
77830__webpack_require__(/*! ./settings/teams/current-teams */ "./resources/js/spark-components/settings/teams/current-teams.js");
77831__webpack_require__(/*! ./settings/teams/team-settings */ "./resources/js/spark-components/settings/teams/team-settings.js");
77832__webpack_require__(/*! ./settings/teams/team-profile */ "./resources/js/spark-components/settings/teams/team-profile.js");
77833__webpack_require__(/*! ./settings/teams/update-team-photo */ "./resources/js/spark-components/settings/teams/update-team-photo.js");
77834__webpack_require__(/*! ./settings/teams/update-team-name */ "./resources/js/spark-components/settings/teams/update-team-name.js");
77835__webpack_require__(/*! ./settings/teams/team-membership */ "./resources/js/spark-components/settings/teams/team-membership.js");
77836__webpack_require__(/*! ./settings/teams/send-invitation */ "./resources/js/spark-components/settings/teams/send-invitation.js");
77837__webpack_require__(/*! ./settings/teams/mailed-invitations */ "./resources/js/spark-components/settings/teams/mailed-invitations.js");
77838__webpack_require__(/*! ./settings/teams/team-members */ "./resources/js/spark-components/settings/teams/team-members.js");
77839
77840/**
77841 * Security Settings Components...
77842 */
77843__webpack_require__(/*! ./settings/security */ "./resources/js/spark-components/settings/security.js");
77844__webpack_require__(/*! ./settings/security/update-password */ "./resources/js/spark-components/settings/security/update-password.js");
77845__webpack_require__(/*! ./settings/security/enable-two-factor-auth */ "./resources/js/spark-components/settings/security/enable-two-factor-auth.js");
77846__webpack_require__(/*! ./settings/security/disable-two-factor-auth */ "./resources/js/spark-components/settings/security/disable-two-factor-auth.js");
77847
77848/**
77849 * API Settings Components...
77850 */
77851__webpack_require__(/*! ./settings/api */ "./resources/js/spark-components/settings/api.js");
77852__webpack_require__(/*! ./settings/api/create-token */ "./resources/js/spark-components/settings/api/create-token.js");
77853__webpack_require__(/*! ./settings/api/tokens */ "./resources/js/spark-components/settings/api/tokens.js");
77854
77855/**
77856 * Subscription Settings Components...
77857 */
77858__webpack_require__(/*! ./settings/subscription */ "./resources/js/spark-components/settings/subscription.js");
77859__webpack_require__(/*! ./settings/subscription/subscribe-stripe */ "./resources/js/spark-components/settings/subscription/subscribe-stripe.js");
77860__webpack_require__(/*! ./settings/subscription/update-subscription */ "./resources/js/spark-components/settings/subscription/update-subscription.js");
77861__webpack_require__(/*! ./settings/subscription/resume-subscription */ "./resources/js/spark-components/settings/subscription/resume-subscription.js");
77862__webpack_require__(/*! ./settings/subscription/cancel-subscription */ "./resources/js/spark-components/settings/subscription/cancel-subscription.js");
77863
77864/**
77865 * Payment Method Components...
77866 */
77867__webpack_require__(/*! ./settings/payment-method-stripe */ "./resources/js/spark-components/settings/payment-method-stripe.js");
77868__webpack_require__(/*! ./settings/payment-method/update-vat-id */ "./resources/js/spark-components/settings/payment-method/update-vat-id.js");
77869__webpack_require__(/*! ./settings/payment-method/update-payment-method-stripe */ "./resources/js/spark-components/settings/payment-method/update-payment-method-stripe.js");
77870__webpack_require__(/*! ./settings/payment-method/redeem-coupon */ "./resources/js/spark-components/settings/payment-method/redeem-coupon.js");
77871
77872/**
77873 * Billing History Components...
77874 */
77875__webpack_require__(/*! ./settings/invoices */ "./resources/js/spark-components/settings/invoices.js");
77876__webpack_require__(/*! ./settings/invoices/update-extra-billing-information */ "./resources/js/spark-components/settings/invoices/update-extra-billing-information.js");
77877__webpack_require__(/*! ./settings/invoices/invoice-list */ "./resources/js/spark-components/settings/invoices/invoice-list.js");
77878
77879/**
77880 * Kiosk Components...
77881 */
77882__webpack_require__(/*! ./kiosk/kiosk */ "./resources/js/spark-components/kiosk/kiosk.js");
77883__webpack_require__(/*! ./kiosk/announcements */ "./resources/js/spark-components/kiosk/announcements.js");
77884__webpack_require__(/*! ./kiosk/metrics */ "./resources/js/spark-components/kiosk/metrics.js");
77885__webpack_require__(/*! ./kiosk/users */ "./resources/js/spark-components/kiosk/users.js");
77886__webpack_require__(/*! ./kiosk/profile */ "./resources/js/spark-components/kiosk/profile.js");
77887__webpack_require__(/*! ./kiosk/add-discount */ "./resources/js/spark-components/kiosk/add-discount.js");
77888
77889/***/ }),
77890
77891/***/ "./resources/js/spark-components/kiosk/add-discount.js":
77892/*!*************************************************************!*\
77893  !*** ./resources/js/spark-components/kiosk/add-discount.js ***!
77894  \*************************************************************/
77895/*! no static exports found */
77896/***/ (function(module, exports, __webpack_require__) {
77897
77898var base = __webpack_require__(/*! kiosk/add-discount */ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/add-discount.js");
77899Vue.component('spark-kiosk-add-discount', {
77900  mixins: [base]
77901});
77902
77903/***/ }),
77904
77905/***/ "./resources/js/spark-components/kiosk/announcements.js":
77906/*!**************************************************************!*\
77907  !*** ./resources/js/spark-components/kiosk/announcements.js ***!
77908  \**************************************************************/
77909/*! no static exports found */
77910/***/ (function(module, exports, __webpack_require__) {
77911
77912var base = __webpack_require__(/*! kiosk/announcements */ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/announcements.js");
77913Vue.component('spark-kiosk-announcements', {
77914  mixins: [base]
77915});
77916
77917/***/ }),
77918
77919/***/ "./resources/js/spark-components/kiosk/kiosk.js":
77920/*!******************************************************!*\
77921  !*** ./resources/js/spark-components/kiosk/kiosk.js ***!
77922  \******************************************************/
77923/*! no static exports found */
77924/***/ (function(module, exports, __webpack_require__) {
77925
77926var base = __webpack_require__(/*! kiosk/kiosk */ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/kiosk.js");
77927Vue.component('spark-kiosk', {
77928  mixins: [base]
77929});
77930
77931/***/ }),
77932
77933/***/ "./resources/js/spark-components/kiosk/metrics.js":
77934/*!********************************************************!*\
77935  !*** ./resources/js/spark-components/kiosk/metrics.js ***!
77936  \********************************************************/
77937/*! no static exports found */
77938/***/ (function(module, exports, __webpack_require__) {
77939
77940var base = __webpack_require__(/*! kiosk/metrics */ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/metrics.js");
77941Vue.component('spark-kiosk-metrics', {
77942  mixins: [base]
77943});
77944
77945/***/ }),
77946
77947/***/ "./resources/js/spark-components/kiosk/profile.js":
77948/*!********************************************************!*\
77949  !*** ./resources/js/spark-components/kiosk/profile.js ***!
77950  \********************************************************/
77951/*! no static exports found */
77952/***/ (function(module, exports, __webpack_require__) {
77953
77954var base = __webpack_require__(/*! kiosk/profile */ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/profile.js");
77955Vue.component('spark-kiosk-profile', {
77956  mixins: [base]
77957});
77958
77959/***/ }),
77960
77961/***/ "./resources/js/spark-components/kiosk/users.js":
77962/*!******************************************************!*\
77963  !*** ./resources/js/spark-components/kiosk/users.js ***!
77964  \******************************************************/
77965/*! no static exports found */
77966/***/ (function(module, exports, __webpack_require__) {
77967
77968var base = __webpack_require__(/*! kiosk/users */ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/users.js");
77969Vue.component('spark-kiosk-users', {
77970  mixins: [base]
77971});
77972
77973/***/ }),
77974
77975/***/ "./resources/js/spark-components/navbar/navbar.js":
77976/*!********************************************************!*\
77977  !*** ./resources/js/spark-components/navbar/navbar.js ***!
77978  \********************************************************/
77979/*! no static exports found */
77980/***/ (function(module, exports, __webpack_require__) {
77981
77982var base = __webpack_require__(/*! navbar/navbar */ "./vendor/laravel/spark-aurelius/resources/assets/js/navbar/navbar.js");
77983Vue.component('spark-navbar', {
77984  mixins: [base]
77985});
77986
77987/***/ }),
77988
77989/***/ "./resources/js/spark-components/notifications/notifications.js":
77990/*!**********************************************************************!*\
77991  !*** ./resources/js/spark-components/notifications/notifications.js ***!
77992  \**********************************************************************/
77993/*! no static exports found */
77994/***/ (function(module, exports, __webpack_require__) {
77995
77996var base = __webpack_require__(/*! notifications/notifications */ "./vendor/laravel/spark-aurelius/resources/assets/js/notifications/notifications.js");
77997Vue.component('spark-notifications', {
77998  mixins: [base]
77999});
78000
78001/***/ }),
78002
78003/***/ "./resources/js/spark-components/settings/api.js":
78004/*!*******************************************************!*\
78005  !*** ./resources/js/spark-components/settings/api.js ***!
78006  \*******************************************************/
78007/*! no static exports found */
78008/***/ (function(module, exports, __webpack_require__) {
78009
78010var base = __webpack_require__(/*! settings/api */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/api.js");
78011Vue.component('spark-api', {
78012  mixins: [base]
78013});
78014
78015/***/ }),
78016
78017/***/ "./resources/js/spark-components/settings/api/create-token.js":
78018/*!********************************************************************!*\
78019  !*** ./resources/js/spark-components/settings/api/create-token.js ***!
78020  \********************************************************************/
78021/*! no static exports found */
78022/***/ (function(module, exports, __webpack_require__) {
78023
78024var base = __webpack_require__(/*! settings/api/create-token */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/api/create-token.js");
78025Vue.component('spark-create-token', {
78026  mixins: [base]
78027});
78028
78029/***/ }),
78030
78031/***/ "./resources/js/spark-components/settings/api/tokens.js":
78032/*!**************************************************************!*\
78033  !*** ./resources/js/spark-components/settings/api/tokens.js ***!
78034  \**************************************************************/
78035/*! no static exports found */
78036/***/ (function(module, exports, __webpack_require__) {
78037
78038var base = __webpack_require__(/*! settings/api/tokens */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/api/tokens.js");
78039Vue.component('spark-tokens', {
78040  mixins: [base]
78041});
78042
78043/***/ }),
78044
78045/***/ "./resources/js/spark-components/settings/invoices.js":
78046/*!************************************************************!*\
78047  !*** ./resources/js/spark-components/settings/invoices.js ***!
78048  \************************************************************/
78049/*! no static exports found */
78050/***/ (function(module, exports, __webpack_require__) {
78051
78052var base = __webpack_require__(/*! settings/invoices */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices.js");
78053Vue.component('spark-invoices', {
78054  mixins: [base]
78055});
78056
78057/***/ }),
78058
78059/***/ "./resources/js/spark-components/settings/invoices/invoice-list.js":
78060/*!*************************************************************************!*\
78061  !*** ./resources/js/spark-components/settings/invoices/invoice-list.js ***!
78062  \*************************************************************************/
78063/*! no static exports found */
78064/***/ (function(module, exports, __webpack_require__) {
78065
78066var base = __webpack_require__(/*! settings/invoices/invoice-list */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices/invoice-list.js");
78067Vue.component('spark-invoice-list', {
78068  mixins: [base]
78069});
78070
78071/***/ }),
78072
78073/***/ "./resources/js/spark-components/settings/invoices/update-extra-billing-information.js":
78074/*!*********************************************************************************************!*\
78075  !*** ./resources/js/spark-components/settings/invoices/update-extra-billing-information.js ***!
78076  \*********************************************************************************************/
78077/*! no static exports found */
78078/***/ (function(module, exports, __webpack_require__) {
78079
78080var base = __webpack_require__(/*! settings/invoices/update-extra-billing-information */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices/update-extra-billing-information.js");
78081Vue.component('spark-update-extra-billing-information', {
78082  mixins: [base]
78083});
78084
78085/***/ }),
78086
78087/***/ "./resources/js/spark-components/settings/payment-method-stripe.js":
78088/*!*************************************************************************!*\
78089  !*** ./resources/js/spark-components/settings/payment-method-stripe.js ***!
78090  \*************************************************************************/
78091/*! no static exports found */
78092/***/ (function(module, exports, __webpack_require__) {
78093
78094var base = __webpack_require__(/*! settings/payment-method-stripe */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method-stripe.js");
78095Vue.component('spark-payment-method-stripe', {
78096  mixins: [base]
78097});
78098
78099/***/ }),
78100
78101/***/ "./resources/js/spark-components/settings/payment-method/redeem-coupon.js":
78102/*!********************************************************************************!*\
78103  !*** ./resources/js/spark-components/settings/payment-method/redeem-coupon.js ***!
78104  \********************************************************************************/
78105/*! no static exports found */
78106/***/ (function(module, exports, __webpack_require__) {
78107
78108var base = __webpack_require__(/*! settings/payment-method/redeem-coupon */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/redeem-coupon.js");
78109Vue.component('spark-redeem-coupon', {
78110  mixins: [base]
78111});
78112
78113/***/ }),
78114
78115/***/ "./resources/js/spark-components/settings/payment-method/update-payment-method-stripe.js":
78116/*!***********************************************************************************************!*\
78117  !*** ./resources/js/spark-components/settings/payment-method/update-payment-method-stripe.js ***!
78118  \***********************************************************************************************/
78119/*! no static exports found */
78120/***/ (function(module, exports, __webpack_require__) {
78121
78122var base = __webpack_require__(/*! settings/payment-method/update-payment-method-stripe */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/update-payment-method-stripe.js");
78123Vue.component('spark-update-payment-method-stripe', {
78124  mixins: [base]
78125});
78126
78127/***/ }),
78128
78129/***/ "./resources/js/spark-components/settings/payment-method/update-vat-id.js":
78130/*!********************************************************************************!*\
78131  !*** ./resources/js/spark-components/settings/payment-method/update-vat-id.js ***!
78132  \********************************************************************************/
78133/*! no static exports found */
78134/***/ (function(module, exports, __webpack_require__) {
78135
78136var base = __webpack_require__(/*! settings/payment-method/update-vat-id */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/update-vat-id.js");
78137Vue.component('spark-update-vat-id', {
78138  mixins: [base]
78139});
78140
78141/***/ }),
78142
78143/***/ "./resources/js/spark-components/settings/profile.js":
78144/*!***********************************************************!*\
78145  !*** ./resources/js/spark-components/settings/profile.js ***!
78146  \***********************************************************/
78147/*! no static exports found */
78148/***/ (function(module, exports, __webpack_require__) {
78149
78150var base = __webpack_require__(/*! settings/profile */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile.js");
78151Vue.component('spark-profile', {
78152  mixins: [base]
78153});
78154
78155/***/ }),
78156
78157/***/ "./resources/js/spark-components/settings/profile/update-contact-information.js":
78158/*!**************************************************************************************!*\
78159  !*** ./resources/js/spark-components/settings/profile/update-contact-information.js ***!
78160  \**************************************************************************************/
78161/*! no static exports found */
78162/***/ (function(module, exports, __webpack_require__) {
78163
78164var base = __webpack_require__(/*! settings/profile/update-contact-information */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile/update-contact-information.js");
78165Vue.component('spark-update-contact-information', {
78166  mixins: [base]
78167});
78168
78169/***/ }),
78170
78171/***/ "./resources/js/spark-components/settings/profile/update-profile-photo.js":
78172/*!********************************************************************************!*\
78173  !*** ./resources/js/spark-components/settings/profile/update-profile-photo.js ***!
78174  \********************************************************************************/
78175/*! no static exports found */
78176/***/ (function(module, exports, __webpack_require__) {
78177
78178var base = __webpack_require__(/*! settings/profile/update-profile-photo */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile/update-profile-photo.js");
78179Vue.component('spark-update-profile-photo', {
78180  mixins: [base]
78181});
78182
78183/***/ }),
78184
78185/***/ "./resources/js/spark-components/settings/security.js":
78186/*!************************************************************!*\
78187  !*** ./resources/js/spark-components/settings/security.js ***!
78188  \************************************************************/
78189/*! no static exports found */
78190/***/ (function(module, exports, __webpack_require__) {
78191
78192var base = __webpack_require__(/*! settings/security */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security.js");
78193Vue.component('spark-security', {
78194  mixins: [base]
78195});
78196
78197/***/ }),
78198
78199/***/ "./resources/js/spark-components/settings/security/disable-two-factor-auth.js":
78200/*!************************************************************************************!*\
78201  !*** ./resources/js/spark-components/settings/security/disable-two-factor-auth.js ***!
78202  \************************************************************************************/
78203/*! no static exports found */
78204/***/ (function(module, exports, __webpack_require__) {
78205
78206var base = __webpack_require__(/*! settings/security/disable-two-factor-auth */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/disable-two-factor-auth.js");
78207Vue.component('spark-disable-two-factor-auth', {
78208  mixins: [base]
78209});
78210
78211/***/ }),
78212
78213/***/ "./resources/js/spark-components/settings/security/enable-two-factor-auth.js":
78214/*!***********************************************************************************!*\
78215  !*** ./resources/js/spark-components/settings/security/enable-two-factor-auth.js ***!
78216  \***********************************************************************************/
78217/*! no static exports found */
78218/***/ (function(module, exports, __webpack_require__) {
78219
78220var base = __webpack_require__(/*! settings/security/enable-two-factor-auth */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/enable-two-factor-auth.js");
78221Vue.component('spark-enable-two-factor-auth', {
78222  mixins: [base]
78223});
78224
78225/***/ }),
78226
78227/***/ "./resources/js/spark-components/settings/security/update-password.js":
78228/*!****************************************************************************!*\
78229  !*** ./resources/js/spark-components/settings/security/update-password.js ***!
78230  \****************************************************************************/
78231/*! no static exports found */
78232/***/ (function(module, exports, __webpack_require__) {
78233
78234var base = __webpack_require__(/*! settings/security/update-password */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/update-password.js");
78235Vue.component('spark-update-password', {
78236  mixins: [base]
78237});
78238
78239/***/ }),
78240
78241/***/ "./resources/js/spark-components/settings/settings.js":
78242/*!************************************************************!*\
78243  !*** ./resources/js/spark-components/settings/settings.js ***!
78244  \************************************************************/
78245/*! no static exports found */
78246/***/ (function(module, exports, __webpack_require__) {
78247
78248var base = __webpack_require__(/*! settings/settings */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/settings.js");
78249Vue.component('spark-settings', {
78250  mixins: [base]
78251});
78252
78253/***/ }),
78254
78255/***/ "./resources/js/spark-components/settings/subscription.js":
78256/*!****************************************************************!*\
78257  !*** ./resources/js/spark-components/settings/subscription.js ***!
78258  \****************************************************************/
78259/*! no static exports found */
78260/***/ (function(module, exports, __webpack_require__) {
78261
78262var base = __webpack_require__(/*! settings/subscription */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription.js");
78263Vue.component('spark-subscription', {
78264  mixins: [base]
78265});
78266
78267/***/ }),
78268
78269/***/ "./resources/js/spark-components/settings/subscription/cancel-subscription.js":
78270/*!************************************************************************************!*\
78271  !*** ./resources/js/spark-components/settings/subscription/cancel-subscription.js ***!
78272  \************************************************************************************/
78273/*! no static exports found */
78274/***/ (function(module, exports, __webpack_require__) {
78275
78276var base = __webpack_require__(/*! settings/subscription/cancel-subscription */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/cancel-subscription.js");
78277Vue.component('spark-cancel-subscription', {
78278  mixins: [base]
78279});
78280
78281/***/ }),
78282
78283/***/ "./resources/js/spark-components/settings/subscription/resume-subscription.js":
78284/*!************************************************************************************!*\
78285  !*** ./resources/js/spark-components/settings/subscription/resume-subscription.js ***!
78286  \************************************************************************************/
78287/*! no static exports found */
78288/***/ (function(module, exports, __webpack_require__) {
78289
78290var base = __webpack_require__(/*! settings/subscription/resume-subscription */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/resume-subscription.js");
78291Vue.component('spark-resume-subscription', {
78292  mixins: [base]
78293});
78294
78295/***/ }),
78296
78297/***/ "./resources/js/spark-components/settings/subscription/subscribe-stripe.js":
78298/*!*********************************************************************************!*\
78299  !*** ./resources/js/spark-components/settings/subscription/subscribe-stripe.js ***!
78300  \*********************************************************************************/
78301/*! no static exports found */
78302/***/ (function(module, exports, __webpack_require__) {
78303
78304var base = __webpack_require__(/*! settings/subscription/subscribe-stripe */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/subscribe-stripe.js");
78305Vue.component('spark-subscribe-stripe', {
78306  mixins: [base]
78307});
78308
78309/***/ }),
78310
78311/***/ "./resources/js/spark-components/settings/subscription/update-subscription.js":
78312/*!************************************************************************************!*\
78313  !*** ./resources/js/spark-components/settings/subscription/update-subscription.js ***!
78314  \************************************************************************************/
78315/*! no static exports found */
78316/***/ (function(module, exports, __webpack_require__) {
78317
78318var base = __webpack_require__(/*! settings/subscription/update-subscription */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/update-subscription.js");
78319Vue.component('spark-update-subscription', {
78320  mixins: [base]
78321});
78322
78323/***/ }),
78324
78325/***/ "./resources/js/spark-components/settings/teams.js":
78326/*!*********************************************************!*\
78327  !*** ./resources/js/spark-components/settings/teams.js ***!
78328  \*********************************************************/
78329/*! no static exports found */
78330/***/ (function(module, exports, __webpack_require__) {
78331
78332var base = __webpack_require__(/*! settings/teams */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams.js");
78333Vue.component('spark-teams', {
78334  mixins: [base]
78335});
78336
78337/***/ }),
78338
78339/***/ "./resources/js/spark-components/settings/teams/create-team.js":
78340/*!*********************************************************************!*\
78341  !*** ./resources/js/spark-components/settings/teams/create-team.js ***!
78342  \*********************************************************************/
78343/*! no static exports found */
78344/***/ (function(module, exports, __webpack_require__) {
78345
78346var base = __webpack_require__(/*! settings/teams/create-team */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/create-team.js");
78347Vue.component('spark-create-team', {
78348  mixins: [base]
78349});
78350
78351/***/ }),
78352
78353/***/ "./resources/js/spark-components/settings/teams/current-teams.js":
78354/*!***********************************************************************!*\
78355  !*** ./resources/js/spark-components/settings/teams/current-teams.js ***!
78356  \***********************************************************************/
78357/*! no static exports found */
78358/***/ (function(module, exports, __webpack_require__) {
78359
78360var base = __webpack_require__(/*! settings/teams/current-teams */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/current-teams.js");
78361Vue.component('spark-current-teams', {
78362  mixins: [base]
78363});
78364
78365/***/ }),
78366
78367/***/ "./resources/js/spark-components/settings/teams/mailed-invitations.js":
78368/*!****************************************************************************!*\
78369  !*** ./resources/js/spark-components/settings/teams/mailed-invitations.js ***!
78370  \****************************************************************************/
78371/*! no static exports found */
78372/***/ (function(module, exports, __webpack_require__) {
78373
78374var base = __webpack_require__(/*! settings/teams/mailed-invitations */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/mailed-invitations.js");
78375Vue.component('spark-mailed-invitations', {
78376  mixins: [base]
78377});
78378
78379/***/ }),
78380
78381/***/ "./resources/js/spark-components/settings/teams/pending-invitations.js":
78382/*!*****************************************************************************!*\
78383  !*** ./resources/js/spark-components/settings/teams/pending-invitations.js ***!
78384  \*****************************************************************************/
78385/*! no static exports found */
78386/***/ (function(module, exports, __webpack_require__) {
78387
78388var base = __webpack_require__(/*! settings/teams/pending-invitations */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/pending-invitations.js");
78389Vue.component('spark-pending-invitations', {
78390  mixins: [base]
78391});
78392
78393/***/ }),
78394
78395/***/ "./resources/js/spark-components/settings/teams/send-invitation.js":
78396/*!*************************************************************************!*\
78397  !*** ./resources/js/spark-components/settings/teams/send-invitation.js ***!
78398  \*************************************************************************/
78399/*! no static exports found */
78400/***/ (function(module, exports, __webpack_require__) {
78401
78402var base = __webpack_require__(/*! settings/teams/send-invitation */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/send-invitation.js");
78403Vue.component('spark-send-invitation', {
78404  mixins: [base]
78405});
78406
78407/***/ }),
78408
78409/***/ "./resources/js/spark-components/settings/teams/team-members.js":
78410/*!**********************************************************************!*\
78411  !*** ./resources/js/spark-components/settings/teams/team-members.js ***!
78412  \**********************************************************************/
78413/*! no static exports found */
78414/***/ (function(module, exports, __webpack_require__) {
78415
78416var base = __webpack_require__(/*! settings/teams/team-members */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-members.js");
78417Vue.component('spark-team-members', {
78418  mixins: [base]
78419});
78420
78421/***/ }),
78422
78423/***/ "./resources/js/spark-components/settings/teams/team-membership.js":
78424/*!*************************************************************************!*\
78425  !*** ./resources/js/spark-components/settings/teams/team-membership.js ***!
78426  \*************************************************************************/
78427/*! no static exports found */
78428/***/ (function(module, exports, __webpack_require__) {
78429
78430var base = __webpack_require__(/*! settings/teams/team-membership */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-membership.js");
78431Vue.component('spark-team-membership', {
78432  mixins: [base]
78433});
78434
78435/***/ }),
78436
78437/***/ "./resources/js/spark-components/settings/teams/team-profile.js":
78438/*!**********************************************************************!*\
78439  !*** ./resources/js/spark-components/settings/teams/team-profile.js ***!
78440  \**********************************************************************/
78441/*! no static exports found */
78442/***/ (function(module, exports, __webpack_require__) {
78443
78444var base = __webpack_require__(/*! settings/teams/team-profile */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-profile.js");
78445Vue.component('spark-team-profile', {
78446  mixins: [base]
78447});
78448
78449/***/ }),
78450
78451/***/ "./resources/js/spark-components/settings/teams/team-settings.js":
78452/*!***********************************************************************!*\
78453  !*** ./resources/js/spark-components/settings/teams/team-settings.js ***!
78454  \***********************************************************************/
78455/*! no static exports found */
78456/***/ (function(module, exports, __webpack_require__) {
78457
78458var base = __webpack_require__(/*! settings/teams/team-settings */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-settings.js");
78459Vue.component('spark-team-settings', {
78460  mixins: [base]
78461});
78462
78463/***/ }),
78464
78465/***/ "./resources/js/spark-components/settings/teams/update-team-name.js":
78466/*!**************************************************************************!*\
78467  !*** ./resources/js/spark-components/settings/teams/update-team-name.js ***!
78468  \**************************************************************************/
78469/*! no static exports found */
78470/***/ (function(module, exports, __webpack_require__) {
78471
78472var base = __webpack_require__(/*! settings/teams/update-team-name */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/update-team-name.js");
78473Vue.component('spark-update-team-name', {
78474  mixins: [base]
78475});
78476
78477/***/ }),
78478
78479/***/ "./resources/js/spark-components/settings/teams/update-team-photo.js":
78480/*!***************************************************************************!*\
78481  !*** ./resources/js/spark-components/settings/teams/update-team-photo.js ***!
78482  \***************************************************************************/
78483/*! no static exports found */
78484/***/ (function(module, exports, __webpack_require__) {
78485
78486var base = __webpack_require__(/*! settings/teams/update-team-photo */ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/update-team-photo.js");
78487Vue.component('spark-update-team-photo', {
78488  mixins: [base]
78489});
78490
78491/***/ }),
78492
78493/***/ "./resources/sass/app-rtl.scss":
78494/*!*************************************!*\
78495  !*** ./resources/sass/app-rtl.scss ***!
78496  \*************************************/
78497/*! no static exports found */
78498/***/ (function(module, exports) {
78499
78500// removed by extract-text-webpack-plugin
78501
78502/***/ }),
78503
78504/***/ "./resources/sass/app.scss":
78505/*!*********************************!*\
78506  !*** ./resources/sass/app.scss ***!
78507  \*********************************/
78508/*! no static exports found */
78509/***/ (function(module, exports) {
78510
78511// removed by extract-text-webpack-plugin
78512
78513/***/ }),
78514
78515/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/auth/register-stripe.js":
78516/*!***********************************************************************************!*\
78517  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/auth/register-stripe.js ***!
78518  \***********************************************************************************/
78519/*! no static exports found */
78520/***/ (function(module, exports, __webpack_require__) {
78521
78522module.exports = {
78523  /**
78524   * Load mixins for the component.
78525   */
78526  mixins: [__webpack_require__(/*! ./../mixins/register */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/register.js"), __webpack_require__(/*! ./../mixins/plans */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/plans.js"), __webpack_require__(/*! ./../mixins/vat */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/vat.js"), __webpack_require__(/*! ./../mixins/stripe */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/stripe.js")],
78527  /**
78528   * The component's data.
78529   */
78530  data: function data() {
78531    return {
78532      query: null,
78533      cardElement: null,
78534      coupon: null,
78535      invalidCoupon: false,
78536      country: null,
78537      taxRate: 0,
78538      registerForm: $.extend(true, new SparkForm({
78539        stripe_payment_method: '',
78540        plan: '',
78541        team: '',
78542        team_slug: '',
78543        name: '',
78544        email: '',
78545        password: '',
78546        password_confirmation: '',
78547        address: '',
78548        address_line_2: '',
78549        city: '',
78550        state: '',
78551        zip: '',
78552        country: 'US',
78553        vat_id: '',
78554        terms: false,
78555        coupon: null,
78556        invitation: null
78557      }), Spark.forms.register),
78558      cardForm: new SparkForm({
78559        name: '',
78560        number: '',
78561        cvc: '',
78562        month: '',
78563        year: ''
78564      })
78565    };
78566  },
78567  watch: {
78568    /**
78569     * Watch for changes on the entire billing address.
78570     */
78571    'currentBillingAddress': function currentBillingAddress(value) {
78572      if (!Spark.collectsEuropeanVat) {
78573        return;
78574      }
78575      this.refreshTaxRate(this.registerForm);
78576    },
78577    /**
78578     * Watch the team name for changes.
78579     */
78580    'registerForm.team': function registerFormTeam(val, oldVal) {
78581      if (this.registerForm.team_slug === '' || this.registerForm.team_slug === oldVal.toLowerCase().replace(/[\s\W-]+/g, '-')) {
78582        this.registerForm.team_slug = val.toLowerCase().replace(/[\s\W-]+/g, '-');
78583      }
78584    },
78585    /**
78586     * Watch for changes on the selected plan.
78587     */
78588    selectedPlan: function selectedPlan(val) {
78589      var _this = this;
78590      if (!val || val.price === 0) {
78591        this.cardElement = null;
78592        return;
78593      }
78594      if (!this.cardElement) {
78595        this.$nextTick(function () {
78596          _this.cardElement = _this.createCardElement('#card-element');
78597        });
78598      }
78599    }
78600  },
78601  /**
78602   * The component has been created by Vue.
78603   */
78604  created: function created() {
78605    this.getPlans();
78606    this.guessCountry();
78607    this.query = URI(document.URL).query(true);
78608    if (this.query.coupon) {
78609      this.getCoupon();
78610      this.registerForm.coupon = this.query.coupon;
78611    }
78612    if (this.query.invitation) {
78613      this.getInvitation();
78614      this.registerForm.invitation = this.query.invitation;
78615    }
78616  },
78617  methods: {
78618    /**
78619     * Attempt to guess the user's country.
78620     */
78621    guessCountry: function guessCountry() {
78622      var _this2 = this;
78623      axios.get('/geocode/country').then(function (response) {
78624        if (response.data != 'ZZ' && response.data != '') {
78625          _this2.registerForm.country = response.data;
78626        }
78627      })["catch"](function (response) {
78628        //
78629      });
78630    },
78631    /**
78632     * Get the coupon specified in the query string.
78633     */
78634    getCoupon: function getCoupon() {
78635      var _this3 = this;
78636      axios.get('/coupon/' + this.query.coupon).then(function (response) {
78637        _this3.coupon = response.data;
78638      })["catch"](function (response) {
78639        _this3.invalidCoupon = true;
78640      });
78641    },
78642    /**
78643     * Attempt to register with the application.
78644     */
78645    register: function register() {
78646      var _this4 = this;
78647      this.cardForm.errors.forget();
78648      this.registerForm.busy = true;
78649      this.registerForm.errors.forget();
78650      if (!Spark.cardUpFront || this.registerForm.invitation || this.selectedPlan.price === 0) {
78651        return this.sendRegistration();
78652      }
78653      var payload = {
78654        name: this.cardForm.name,
78655        address: {
78656          line1: this.registerForm.address || '',
78657          line2: this.registerForm.address_line_2 || '',
78658          city: this.registerForm.city || '',
78659          state: this.registerForm.state || '',
78660          postal_code: this.registerForm.zip || '',
78661          country: this.registerForm.country || ''
78662        }
78663      };
78664      this.generateToken(function (secret) {
78665        _this4.stripe.handleCardSetup(secret, _this4.cardElement, {
78666          payment_method_data: {
78667            billing_details: payload
78668          }
78669        }).then(function (response) {
78670          if (response.error) {
78671            _this4.cardForm.errors.set({
78672              card: [response.error.message]
78673            });
78674            _this4.registerForm.busy = false;
78675          } else {
78676            _this4.sendRegistration(response.setupIntent.payment_method);
78677          }
78678        });
78679      });
78680    },
78681    /*
78682     * After obtaining the Stripe token, send the registration to Spark.
78683     */
78684    sendRegistration: function sendRegistration(paymentMethod) {
78685      this.registerForm.stripe_payment_method = paymentMethod;
78686      Spark.post('/register', this.registerForm).then(function (response) {
78687        window.location = response.redirect;
78688      });
78689    }
78690  },
78691  computed: {
78692    /**
78693     * Determine if the selected country collects European VAT.
78694     */
78695    countryCollectsVat: function countryCollectsVat() {
78696      return this.collectsVat(this.registerForm.country);
78697    },
78698    /**
78699     * Get the displayable discount for the coupon.
78700     */
78701    discount: function discount() {
78702      if (this.coupon) {
78703        if (this.coupon.percent_off) {
78704          return this.coupon.percent_off + '%';
78705        } else {
78706          return Vue.filter('currency')(this.coupon.amount_off / 100);
78707        }
78708      }
78709    },
78710    /**
78711     * Get the current billing address from the register form.
78712     *
78713     * This used primarily for watching.
78714     */
78715    currentBillingAddress: function currentBillingAddress() {
78716      return this.registerForm.address + this.registerForm.address_line_2 + this.registerForm.city + this.registerForm.state + this.registerForm.zip + this.registerForm.country + this.registerForm.vat_id;
78717    }
78718  }
78719};
78720
78721/***/ }),
78722
78723/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/filters.js":
78724/*!**********************************************************************!*\
78725  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/filters.js ***!
78726  \**********************************************************************/
78727/*! no static exports found */
78728/***/ (function(module, exports, __webpack_require__) {
78729
78730/**
78731 * Format the given date.
78732 */
78733Vue.filter('date', function (value) {
78734  return moment.utc(value).local().format('MMMM Do, YYYY');
78735});
78736
78737/**
78738 * Format the given date as a timestamp.
78739 */
78740Vue.filter('datetime', function (value) {
78741  return moment.utc(value).local().format('MMMM Do, YYYY h:mm A');
78742});
78743
78744/**
78745 * Format the given date into a relative time.
78746 */
78747Vue.filter('relative', function (value) {
78748  return moment.utc(value).local().locale('en-short').fromNow();
78749});
78750
78751/**
78752 * Convert the first character to upper case.
78753 *
78754 * Source: https://github.com/vuejs/vue/blob/1.0/src/filters/index.js#L37
78755 */
78756Vue.filter('capitalize', function (value) {
78757  if (!value && value !== 0) {
78758    return '';
78759  }
78760  return value.toString().charAt(0).toUpperCase() + value.slice(1);
78761});
78762
78763/**
78764 * Format the given money value.
78765 */
78766Vue.filter('currency', function (value) {
78767  var Dinero = __webpack_require__(/*! dinero.js */ "./node_modules/dinero.js/build/esm/dinero.js")["default"];
78768  return Dinero({
78769    amount: Math.round(value * 100),
78770    currency: window.Spark.currency
78771  }).setLocale(window.Spark.currencyLocale).toFormat('$0,0.00');
78772});
78773
78774/***/ }),
78775
78776/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/bootstrap.js":
78777/*!******************************************************************************!*\
78778  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/forms/bootstrap.js ***!
78779  \******************************************************************************/
78780/*! no static exports found */
78781/***/ (function(module, exports, __webpack_require__) {
78782
78783/**
78784 * Initialize the Spark form extension points.
78785 */
78786Spark.forms = {
78787  register: {},
78788  updateContactInformation: {},
78789  updateTeamMember: {}
78790};
78791
78792/**
78793 * Load the SparkForm helper class.
78794 */
78795__webpack_require__(/*! ./form */ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/form.js");
78796
78797/**
78798 * Define the SparkFormError collection class.
78799 */
78800__webpack_require__(/*! ./errors */ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/errors.js");
78801
78802/**
78803 * Add additional HTTP / form helpers to the Spark object.
78804 */
78805$.extend(Spark, __webpack_require__(/*! ./http */ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/http.js"));
78806
78807/***/ }),
78808
78809/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/errors.js":
78810/*!***************************************************************************!*\
78811  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/forms/errors.js ***!
78812  \***************************************************************************/
78813/*! no static exports found */
78814/***/ (function(module, exports) {
78815
78816function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
78817/**
78818 * Spark form error collection class.
78819 */
78820window.SparkFormErrors = function () {
78821  this.errors = {};
78822
78823  /**
78824   * Determine if the collection has any errors.
78825   */
78826  this.hasErrors = function () {
78827    return !_.isEmpty(this.errors);
78828  };
78829
78830  /**
78831   * Determine if the collection has errors for a given field.
78832   */
78833  this.has = function (field) {
78834    return _.indexOf(_.keys(this.errors), field) > -1;
78835  };
78836
78837  /**
78838   * Get all of the raw errors for the collection.
78839   */
78840  this.all = function () {
78841    return this.errors;
78842  };
78843
78844  /**
78845   * Get all of the errors for the collection in a flat array.
78846   */
78847  this.flatten = function () {
78848    return _.flatten(_.toArray(this.errors));
78849  };
78850
78851  /**
78852   * Get the first error message for a given field.
78853   */
78854  this.get = function (field) {
78855    if (this.has(field)) {
78856      return this.errors[field][0];
78857    }
78858  };
78859
78860  /**
78861   * Set the raw errors for the collection.
78862   */
78863  this.set = function (errors) {
78864    if (_typeof(errors) === 'object') {
78865      this.errors = errors;
78866    } else {
78867      this.errors = {
78868        'form': [__('Something went wrong. Please try again or contact customer support.')]
78869      };
78870    }
78871  };
78872
78873  /**
78874   * Remove errors from the collection.
78875   */
78876  this.forget = function (field) {
78877    if (typeof field === 'undefined') {
78878      this.errors = {};
78879    } else {
78880      Vue["delete"](this.errors, field);
78881    }
78882  };
78883};
78884
78885/***/ }),
78886
78887/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/form.js":
78888/*!*************************************************************************!*\
78889  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/forms/form.js ***!
78890  \*************************************************************************/
78891/*! no static exports found */
78892/***/ (function(module, exports) {
78893
78894/**
78895 * SparkForm helper class. Used to set common properties on all forms.
78896 */
78897window.SparkForm = function (data) {
78898  var form = this;
78899  var initialData = data;
78900  $.extend(this, data);
78901
78902  /**
78903   * Create the form error helper instance.
78904   */
78905  this.errors = new SparkFormErrors();
78906  this.busy = false;
78907  this.successful = false;
78908
78909  /**
78910   * Start processing the form.
78911   */
78912  this.startProcessing = function () {
78913    form.errors.forget();
78914    form.busy = true;
78915    form.successful = false;
78916  };
78917
78918  /**
78919   * Finish processing the form.
78920   */
78921  this.finishProcessing = function () {
78922    form.busy = false;
78923    form.successful = true;
78924  };
78925
78926  /**
78927   * Reset the form to its original state.
78928   */
78929  this.reset = function () {
78930    $.extend(form, initialData);
78931    form.resetStatus();
78932  };
78933
78934  /**
78935   * Reset the errors and other state for the form.
78936   */
78937  this.resetStatus = function () {
78938    form.errors.forget();
78939    form.busy = false;
78940    form.successful = false;
78941  };
78942
78943  /**
78944   * Set the errors on the form.
78945   */
78946  this.setErrors = function (errors) {
78947    form.busy = false;
78948    form.errors.set(errors);
78949  };
78950};
78951
78952/***/ }),
78953
78954/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/http.js":
78955/*!*************************************************************************!*\
78956  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/forms/http.js ***!
78957  \*************************************************************************/
78958/*! no static exports found */
78959/***/ (function(module, exports) {
78960
78961module.exports = {
78962  /**
78963   * Helper method for making POST HTTP requests.
78964   */
78965  post: function post(uri, form) {
78966    return Spark.sendForm('post', uri, form);
78967  },
78968  /**
78969   * Helper method for making PUT HTTP requests.
78970   */
78971  put: function put(uri, form) {
78972    return Spark.sendForm('put', uri, form);
78973  },
78974  /**
78975   * Helper method for making PATCH HTTP requests.
78976   */
78977  patch: function patch(uri, form) {
78978    return Spark.sendForm('patch', uri, form);
78979  },
78980  /**
78981   * Helper method for making DELETE HTTP requests.
78982   */
78983  "delete": function _delete(uri, form) {
78984    return Spark.sendForm('delete', uri, form);
78985  },
78986  /**
78987   * Send the form to the back-end server.
78988   *
78989   * This function will clear old errors, update "busy" status, etc.
78990   */
78991  sendForm: function sendForm(method, uri, form) {
78992    return new Promise(function (resolve, reject) {
78993      form.startProcessing();
78994      axios[method](uri, JSON.parse(JSON.stringify(form))).then(function (response) {
78995        form.finishProcessing();
78996        resolve(response.data);
78997      })["catch"](function (errors) {
78998        form.setErrors(errors.response.data.errors);
78999        reject(errors.response.data);
79000      });
79001    });
79002  }
79003};
79004
79005/***/ }),
79006
79007/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/add-discount.js":
79008/*!*********************************************************************************!*\
79009  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/add-discount.js ***!
79010  \*********************************************************************************/
79011/*! no static exports found */
79012/***/ (function(module, exports, __webpack_require__) {
79013
79014function kioskAddDiscountForm() {
79015  return {
79016    type: 'amount',
79017    value: null,
79018    duration: 'once',
79019    months: null
79020  };
79021}
79022module.exports = {
79023  mixins: [__webpack_require__(/*! ./../mixins/discounts */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/discounts.js")],
79024  /**
79025   * The component's data.
79026   */
79027  data: function data() {
79028    return {
79029      loadingCurrentDiscount: false,
79030      currentDiscount: null,
79031      discountingUser: null,
79032      form: new SparkForm(kioskAddDiscountForm())
79033    };
79034  },
79035  /**
79036   * The component has been created by Vue.
79037   */
79038  created: function created() {
79039    var self = this;
79040    Bus.$on('addDiscount', function (user) {
79041      self.form = new SparkForm(kioskAddDiscountForm());
79042      self.setUser(user);
79043      $('#modal-add-discount').modal('show');
79044    });
79045  },
79046  methods: {
79047    /**
79048     * Set the user receiving teh discount.
79049     */
79050    setUser: function setUser(user) {
79051      this.discountingUser = user;
79052      this.getCurrentDiscountForUser(user);
79053    },
79054    /**
79055     * Apply the discount to the user.
79056     */
79057    applyDiscount: function applyDiscount() {
79058      Spark.post('/spark/kiosk/users/discount/' + this.discountingUser.id, this.form).then(function () {
79059        $('#modal-add-discount').modal('hide');
79060      });
79061    }
79062  }
79063};
79064
79065/***/ }),
79066
79067/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/announcements.js":
79068/*!**********************************************************************************!*\
79069  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/announcements.js ***!
79070  \**********************************************************************************/
79071/*! no static exports found */
79072/***/ (function(module, exports) {
79073
79074var announcementsCreateForm = function announcementsCreateForm() {
79075  return {
79076    body: '',
79077    action_text: '',
79078    action_url: ''
79079  };
79080};
79081module.exports = {
79082  /**
79083   * The component's data.
79084   */
79085  data: function data() {
79086    return {
79087      announcements: [],
79088      updatingAnnouncement: null,
79089      deletingAnnouncement: null,
79090      createForm: new SparkForm(announcementsCreateForm()),
79091      updateForm: new SparkForm(announcementsCreateForm()),
79092      deleteForm: new SparkForm({})
79093    };
79094  },
79095  /**
79096   * The component has been created by Vue.
79097   */
79098  created: function created() {
79099    var self = this;
79100    Bus.$on('sparkHashChanged', function (hash, parameters) {
79101      if (hash === 'announcements' && self.announcements.length === 0) {
79102        self.getAnnouncements();
79103      }
79104    });
79105  },
79106  methods: {
79107    /**
79108     * Get all of the announcements.
79109     */
79110    getAnnouncements: function getAnnouncements() {
79111      var _this = this;
79112      axios.get('/spark/kiosk/announcements').then(function (response) {
79113        _this.announcements = response.data;
79114      });
79115    },
79116    /**
79117     * Create a new announcement.
79118     */
79119    create: function create() {
79120      var _this2 = this;
79121      Spark.post('/spark/kiosk/announcements', this.createForm).then(function () {
79122        _this2.createForm = new SparkForm(announcementsCreateForm());
79123        _this2.getAnnouncements();
79124      });
79125    },
79126    /**
79127     * Edit the given announcement.
79128     */
79129    editAnnouncement: function editAnnouncement(announcement) {
79130      this.updatingAnnouncement = announcement;
79131      this.updateForm.icon = announcement.icon;
79132      this.updateForm.body = announcement.body;
79133      this.updateForm.action_text = announcement.action_text;
79134      this.updateForm.action_url = announcement.action_url;
79135      $('#modal-update-announcement').modal('show');
79136    },
79137    /**
79138     * Update the specified announcement.
79139     */
79140    update: function update() {
79141      var _this3 = this;
79142      Spark.put('/spark/kiosk/announcements/' + this.updatingAnnouncement.id, this.updateForm).then(function () {
79143        _this3.getAnnouncements();
79144        $('#modal-update-announcement').modal('hide');
79145      });
79146    },
79147    /**
79148     * Show the approval dialog for deleting an announcement.
79149     */
79150    approveAnnouncementDelete: function approveAnnouncementDelete(announcement) {
79151      this.deletingAnnouncement = announcement;
79152      $('#modal-delete-announcement').modal('show');
79153    },
79154    /**
79155     * Delete the specified announcement.
79156     */
79157    deleteAnnouncement: function deleteAnnouncement() {
79158      var _this4 = this;
79159      Spark["delete"]('/spark/kiosk/announcements/' + this.deletingAnnouncement.id, this.deleteForm).then(function () {
79160        _this4.getAnnouncements();
79161        $('#modal-delete-announcement').modal('hide');
79162      });
79163    }
79164  }
79165};
79166
79167/***/ }),
79168
79169/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/kiosk.js":
79170/*!**************************************************************************!*\
79171  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/kiosk.js ***!
79172  \**************************************************************************/
79173/*! no static exports found */
79174/***/ (function(module, exports, __webpack_require__) {
79175
79176module.exports = {
79177  props: ['user'],
79178  /**
79179   * Load mixins for the component.
79180   */
79181  mixins: [__webpack_require__(/*! ./../mixins/tab-state */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/tab-state.js")],
79182  /**
79183   * Prepare the component.
79184   */
79185  mounted: function mounted() {
79186    this.usePushStateForTabs('.spark-settings-tabs');
79187  },
79188  /**
79189   * The component has been created by Vue.
79190   */
79191  created: function created() {
79192    Bus.$on('sparkHashChanged', function (hash, parameters) {
79193      if (hash === 'users') {
79194        setTimeout(function () {
79195          $('#kiosk-users-search').focus();
79196        }, 150);
79197      }
79198      return true;
79199    });
79200  }
79201};
79202
79203/***/ }),
79204
79205/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/metrics.js":
79206/*!****************************************************************************!*\
79207  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/metrics.js ***!
79208  \****************************************************************************/
79209/*! no static exports found */
79210/***/ (function(module, exports) {
79211
79212module.exports = {
79213  props: ['user'],
79214  /**
79215   * The component's data.
79216   */
79217  data: function data() {
79218    return {
79219      monthlyRecurringRevenue: 0,
79220      yearlyRecurringRevenue: 0,
79221      totalVolume: 0,
79222      genericTrialUsers: 0,
79223      indicators: [],
79224      lastMonthsIndicators: null,
79225      lastYearsIndicators: null,
79226      plans: []
79227    };
79228  },
79229  /**
79230   * The component has been created by Vue.
79231   */
79232  created: function created() {
79233    var self = this;
79234    Bus.$on('sparkHashChanged', function (hash, parameters) {
79235      if (hash === 'metrics' && self.yearlyRecurringRevenue === 0) {
79236        self.getRevenue();
79237        self.getPlans();
79238        self.getTrialUsers();
79239        self.getPerformanceIndicators();
79240      }
79241    });
79242  },
79243  methods: {
79244    /**
79245     * Get the revenue information for the application.
79246     */
79247    getRevenue: function getRevenue() {
79248      var _this = this;
79249      axios.get('/spark/kiosk/performance-indicators/revenue').then(function (response) {
79250        _this.yearlyRecurringRevenue = response.data.yearlyRecurringRevenue;
79251        _this.monthlyRecurringRevenue = response.data.monthlyRecurringRevenue;
79252        _this.totalVolume = response.data.totalVolume;
79253      });
79254    },
79255    /**
79256     * Get the subscriber information for the application.
79257     */
79258    getPlans: function getPlans() {
79259      var _this2 = this;
79260      axios.get('/spark/kiosk/performance-indicators/plans').then(function (response) {
79261        _this2.plans = response.data;
79262      });
79263    },
79264    /**
79265     * Get the number of users that are on a generic trial.
79266     */
79267    getTrialUsers: function getTrialUsers() {
79268      var _this3 = this;
79269      axios.get('/spark/kiosk/performance-indicators/trialing').then(function (response) {
79270        _this3.genericTrialUsers = parseInt(response.data);
79271      });
79272    },
79273    /**
79274     * Get the performance indicators for the application.
79275     */
79276    getPerformanceIndicators: function getPerformanceIndicators() {
79277      var _this4 = this;
79278      axios.get('/spark/kiosk/performance-indicators').then(function (response) {
79279        _this4.indicators = response.data.indicators;
79280        _this4.lastMonthsIndicators = response.data.last_month;
79281        _this4.lastYearsIndicators = response.data.last_year;
79282        Vue.nextTick(function () {
79283          _this4.drawCharts();
79284        });
79285      });
79286    },
79287    /**
79288     * Draw the performance indicator charts.
79289     */
79290    drawCharts: function drawCharts() {
79291      this.drawMonthlyRecurringRevenueChart();
79292      this.drawYearlyRecurringRevenueChart();
79293      this.drawDailyVolumeChart();
79294      this.drawNewUsersChart();
79295    },
79296    /**
79297     * Draw the monthly recurring revenue chart.
79298     */
79299    drawMonthlyRecurringRevenueChart: function drawMonthlyRecurringRevenueChart() {
79300      return this.drawCurrencyChart('monthlyRecurringRevenueChart', 30, function (indicator) {
79301        return indicator.monthly_recurring_revenue;
79302      });
79303    },
79304    /**
79305     * Draw the yearly recurring revenue chart.
79306     */
79307    drawYearlyRecurringRevenueChart: function drawYearlyRecurringRevenueChart() {
79308      return this.drawCurrencyChart('yearlyRecurringRevenueChart', 30, function (indicator) {
79309        return indicator.yearly_recurring_revenue;
79310      });
79311    },
79312    /**
79313     * Draw the daily volume chart.
79314     */
79315    drawDailyVolumeChart: function drawDailyVolumeChart() {
79316      return this.drawCurrencyChart('dailyVolumeChart', 14, function (indicator) {
79317        return indicator.daily_volume;
79318      });
79319    },
79320    /**
79321     * Draw the daily new users chart.
79322     */
79323    drawNewUsersChart: function drawNewUsersChart() {
79324      return this.drawChart('newUsersChart', 14, function (indicator) {
79325        return indicator.new_users;
79326      });
79327    },
79328    /**
79329     * Draw a chart with currency formatting on the Y-Axis.
79330     */
79331    drawCurrencyChart: function drawCurrencyChart(id, days, dataGatherer) {
79332      return this.drawChart(id, days, dataGatherer, function (value) {
79333        return Vue.filter('currency')(value.value);
79334      });
79335    },
79336    /**
79337     * Draw a chart with the given parameters.
79338     */
79339    drawChart: function drawChart(id, days, dataGatherer, scaleLabelFormatter) {
79340      var dataset = JSON.parse(JSON.stringify(this.baseChartDataSet));
79341      dataset.data = _.map(_.takeRight(this.indicators, days), dataGatherer);
79342
79343      // Here we will build out the dataset for the chart. This will contain the dates and data
79344      // points for the chart. Each chart on the Kiosk only gets one dataset so we only need
79345      // to add it a single element to this array here. But, charts could have more later.
79346      var data = {
79347        labels: _.takeRight(this.availableChartDates, days),
79348        datasets: [dataset]
79349      };
79350      var options = {
79351        responsive: true
79352      };
79353
79354      // If a scale label formatter was passed, we will hand that to this chart library to fill
79355      // out the Y-Axis labels. This is particularly useful when we want to format them as a
79356      // currency as we do on all of our revenue charts that we display on the Kiosk here.
79357      if (arguments.length === 4) {
79358        options.scaleLabel = scaleLabelFormatter;
79359      }
79360      var chart = new Chart(document.getElementById(id).getContext('2d'), {
79361        type: 'line',
79362        data: data,
79363        options: options
79364      });
79365    },
79366    /**
79367     * Calculate the percent change between two numbers.
79368     */
79369    percentChange: function percentChange(current, previous) {
79370      var change = Math.round((current - previous) / previous * 100);
79371      return change > 0 ? '+' + change.toFixed(0) : change.toFixed(0);
79372    }
79373  },
79374  computed: {
79375    /**
79376     * Calculate the monthly change in monthly recurring revenue.
79377     */
79378    monthlyChangeInMonthlyRecurringRevenue: function monthlyChangeInMonthlyRecurringRevenue() {
79379      if (!this.lastMonthsIndicators || !this.indicators) {
79380        return false;
79381      }
79382      return this.percentChange(_.takeRight(this.indicators).monthly_recurring_revenue, this.lastMonthsIndicators.monthly_recurring_revenue);
79383    },
79384    /**
79385     * Calculate the yearly change in monthly recurring revenue.
79386     */
79387    yearlyChangeInMonthlyRecurringRevenue: function yearlyChangeInMonthlyRecurringRevenue() {
79388      if (!this.lastYearsIndicators || !this.indicators) {
79389        return false;
79390      }
79391      return this.percentChange(_.takeRight(this.indicators).monthly_recurring_revenue, this.lastYearsIndicators.monthly_recurring_revenue);
79392    },
79393    /**
79394     * Calculate the monthly change in yearly recurring revenue.
79395     */
79396    monthlyChangeInYearlyRecurringRevenue: function monthlyChangeInYearlyRecurringRevenue() {
79397      if (!this.lastMonthsIndicators || !this.indicators) {
79398        return false;
79399      }
79400      return this.percentChange(_.takeRight(this.indicators).yearly_recurring_revenue, this.lastMonthsIndicators.yearly_recurring_revenue);
79401    },
79402    /**
79403     * Calculate the yearly change in yearly recurring revenue.
79404     */
79405    yearlyChangeInYearlyRecurringRevenue: function yearlyChangeInYearlyRecurringRevenue() {
79406      if (!this.lastYearsIndicators || !this.indicators) {
79407        return false;
79408      }
79409      return this.percentChange(_.takeRight(this.indicators).yearly_recurring_revenue, this.lastYearsIndicators.yearly_recurring_revenue);
79410    },
79411    /**
79412     * Get the total number of users trialing.
79413     */
79414    totalTrialUsers: function totalTrialUsers() {
79415      return this.genericTrialUsers + _.reduce(this.plans, function (memo, plan) {
79416        return memo + plan.trialing;
79417      }, 0);
79418    },
79419    /**
79420     * Get the available, formatted chart dates for the current indicators.
79421     */
79422    availableChartDates: function availableChartDates() {
79423      return _.map(this.indicators, function (indicator) {
79424        return moment(indicator.created_at).format('M/D');
79425      });
79426    },
79427    /**
79428     * Get the base chart data set.
79429     */
79430    baseChartDataSet: function baseChartDataSet() {
79431      return {
79432        label: "Dataset",
79433        fillColor: "rgba(151,187,205,0.2)",
79434        strokeColor: "rgba(151,187,205,1)",
79435        pointColor: "rgba(151,187,205,1)",
79436        pointStrokeColor: "#fff",
79437        pointHighlightFill: "#fff",
79438        pointHighlightStroke: "rgba(151,187,205,1)"
79439      };
79440    }
79441  }
79442};
79443
79444/***/ }),
79445
79446/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/profile.js":
79447/*!****************************************************************************!*\
79448  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/profile.js ***!
79449  \****************************************************************************/
79450/*! no static exports found */
79451/***/ (function(module, exports) {
79452
79453module.exports = {
79454  props: ['user', 'plans'],
79455  /**
79456   * The component's data.
79457   */
79458  data: function data() {
79459    return {
79460      loading: false,
79461      profile: null,
79462      revenue: 0
79463    };
79464  },
79465  /**
79466   * The component has been created by Vue.
79467   */
79468  created: function created() {
79469    var self = this;
79470    this.$parent.$on('showUserProfile', function (id) {
79471      self.getUserProfile(id);
79472    });
79473  },
79474  /**
79475   * Prepare the component.
79476   */
79477  mounted: function mounted() {
79478    var _this = this;
79479    Mousetrap.bind('esc', function (e) {
79480      return _this.showSearch();
79481    });
79482  },
79483  methods: {
79484    /**
79485     * Get the profile user.
79486     */
79487    getUserProfile: function getUserProfile(id) {
79488      var _this2 = this;
79489      this.loading = true;
79490      axios.get('/spark/kiosk/users/' + id + '/profile').then(function (response) {
79491        _this2.profile = response.data.user;
79492        _this2.revenue = response.data.revenue;
79493        _this2.loading = false;
79494      });
79495    },
79496    /**
79497     * Impersonate the given user.
79498     */
79499    impersonate: function impersonate(user) {
79500      window.location = '/spark/kiosk/users/impersonate/' + user.id;
79501    },
79502    /**
79503     * Show the discount modal for the given user.
79504     */
79505    addDiscount: function addDiscount(user) {
79506      Bus.$emit('addDiscount', user);
79507    },
79508    /**
79509     * Get the plan the user is actively subscribed to.
79510     */
79511    activePlan: function activePlan(billable) {
79512      if (this.activeSubscription(billable)) {
79513        var activeSubscription = this.activeSubscription(billable);
79514        return _.find(this.plans, function (plan) {
79515          return plan.id === activeSubscription.provider_plan;
79516        });
79517      }
79518    },
79519    /**
79520     * Get the active, valid subscription for the user.
79521     */
79522    activeSubscription: function activeSubscription(billable) {
79523      var subscription = this.subscription(billable);
79524      if (!subscription || subscription.ends_at && moment.utc().isAfter(moment.utc(subscription.ends_at))) {
79525        return;
79526      }
79527      return subscription;
79528    },
79529    /**
79530     * Get the active subscription instance.
79531     */
79532    subscription: function subscription(billable) {
79533      if (!billable) {
79534        return;
79535      }
79536      var subscription = _.find(billable.subscriptions, function (subscription) {
79537        return subscription.name === 'default';
79538      });
79539      if (typeof subscription !== 'undefined') {
79540        return subscription;
79541      }
79542    },
79543    /**
79544     * Get the customer URL on the billing provider's website.
79545     */
79546    customerUrlOnBillingProvider: function customerUrlOnBillingProvider(billable) {
79547      if (!billable) {
79548        return;
79549      }
79550      return 'https://dashboard.stripe.com/customers/' + billable.stripe_id;
79551    },
79552    /**
79553     * Show the search results and hide the user profile.
79554     */
79555    showSearch: function showSearch() {
79556      this.$parent.$emit('showSearch');
79557      this.profile = null;
79558    }
79559  }
79560};
79561
79562/***/ }),
79563
79564/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/users.js":
79565/*!**************************************************************************!*\
79566  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/kiosk/users.js ***!
79567  \**************************************************************************/
79568/*! no static exports found */
79569/***/ (function(module, exports) {
79570
79571module.exports = {
79572  props: ['user'],
79573  /**
79574   * The component's data.
79575   */
79576  data: function data() {
79577    return {
79578      plans: [],
79579      searchForm: new SparkForm({
79580        query: ''
79581      }),
79582      searching: false,
79583      noSearchResults: false,
79584      searchResults: [],
79585      showingUserProfile: false
79586    };
79587  },
79588  /**
79589   * The component has been created by Vue.
79590   */
79591  created: function created() {
79592    var self = this;
79593    this.getPlans();
79594    this.$on('showSearch', function () {
79595      self.navigateToSearch();
79596    });
79597    Bus.$on('sparkHashChanged', function (hash, parameters) {
79598      if (hash != 'users') {
79599        return true;
79600      }
79601      if (parameters && parameters.length > 0) {
79602        self.loadProfile({
79603          id: parameters[0]
79604        });
79605      } else {
79606        self.showSearch();
79607      }
79608      return true;
79609    });
79610  },
79611  methods: {
79612    /**
79613     * Get all of the available subscription plans.
79614     */
79615    getPlans: function getPlans() {
79616      var _this = this;
79617      axios.get('/spark/plans').then(function (response) {
79618        _this.plans = response.data;
79619      });
79620    },
79621    /**
79622     * Perform a search for the given query.
79623     */
79624    search: function search() {
79625      var _this2 = this;
79626      this.searching = true;
79627      this.noSearchResults = false;
79628      axios.post('/spark/kiosk/users/search', this.searchForm).then(function (response) {
79629        _this2.searchResults = response.data;
79630        _this2.noSearchResults = _this2.searchResults.length === 0;
79631        _this2.searching = false;
79632      });
79633    },
79634    /**
79635     * Show the search results and update the browser history.
79636     */
79637    navigateToSearch: function navigateToSearch() {
79638      history.pushState(null, null, '#/users');
79639      this.showSearch();
79640    },
79641    /**
79642     * Show the search results.
79643     */
79644    showSearch: function showSearch() {
79645      this.showingUserProfile = false;
79646      Vue.nextTick(function () {
79647        $('#kiosk-users-search').focus();
79648      });
79649    },
79650    /**
79651     * Show the user profile for the given user.
79652     */
79653    showUserProfile: function showUserProfile(user) {
79654      history.pushState(null, null, '#/users/' + user.id);
79655      this.loadProfile(user);
79656    },
79657    /**
79658     * Load the user profile for the given user.
79659     */
79660    loadProfile: function loadProfile(user) {
79661      this.$emit('showUserProfile', user.id);
79662      this.showingUserProfile = true;
79663    }
79664  }
79665};
79666
79667/***/ }),
79668
79669/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixin.js":
79670/*!********************************************************************!*\
79671  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixin.js ***!
79672  \********************************************************************/
79673/*! no static exports found */
79674/***/ (function(module, exports) {
79675
79676module.exports = {
79677  computed: {
79678    /**
79679     * Get the billable entity.
79680     */
79681    billable: function billable() {
79682      if (this.billableType) {
79683        return this.billableType === 'user' ? this.user : this.team;
79684      } else {
79685        return this.user;
79686      }
79687    },
79688    /**
79689     * Determine if the current billable entity is a user.
79690     */
79691    billingUser: function billingUser() {
79692      return this.billableType && this.billableType === 'user';
79693    },
79694    /**
79695     * Access the global Spark object.
79696     */
79697    spark: function spark() {
79698      return window.Spark;
79699    }
79700  }
79701};
79702
79703/***/ }),
79704
79705/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/discounts.js":
79706/*!*******************************************************************************!*\
79707  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixins/discounts.js ***!
79708  \*******************************************************************************/
79709/*! no static exports found */
79710/***/ (function(module, exports) {
79711
79712module.exports = {
79713  methods: {
79714    /**
79715     * Get the current discount for the given billable entity.
79716     */
79717    getCurrentDiscountForBillable: function getCurrentDiscountForBillable(type, billable) {
79718      if (type === 'user') {
79719        return this.getCurrentDiscountForUser(billable);
79720      } else {
79721        return this.getCurrentDiscountForTeam(billable);
79722      }
79723    },
79724    /**
79725     * Get the current discount for the user.
79726     */
79727    getCurrentDiscountForUser: function getCurrentDiscountForUser(user) {
79728      var _this = this;
79729      this.currentDiscount = null;
79730      this.loadingCurrentDiscount = true;
79731      axios.get("/coupon/user/".concat(user.id)).then(function (response) {
79732        if (response.status === 200) {
79733          _this.currentDiscount = response.data;
79734        }
79735        _this.loadingCurrentDiscount = false;
79736      });
79737    },
79738    /**
79739     * Get the current discount for the team.
79740     */
79741    getCurrentDiscountForTeam: function getCurrentDiscountForTeam(team) {
79742      var _this2 = this;
79743      this.currentDiscount = null;
79744      this.loadingCurrentDiscount = true;
79745      axios.get("/settings/".concat(Spark.teamsPrefix, "/coupon/").concat(team.id)).then(function (response) {
79746        if (response.status === 200) {
79747          _this2.currentDiscount = response.data;
79748        }
79749        _this2.loadingCurrentDiscount = false;
79750      });
79751    },
79752    /**
79753     * Get the formatted discount amount for the given discount.
79754     */
79755    formattedDiscount: function formattedDiscount(discount) {
79756      if (!discount) {
79757        return;
79758      }
79759      if (discount.percent_off) {
79760        return "".concat(discount.percent_off, "%");
79761      } else {
79762        return Vue.filter('currency')(this.calculateAmountOff(discount.amount_off));
79763      }
79764    },
79765    /**
79766     * Calculate the amount off for the given discount amount.
79767     */
79768    calculateAmountOff: function calculateAmountOff(amount) {
79769      return amount / 100;
79770    }
79771  }
79772};
79773
79774/***/ }),
79775
79776/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/plans.js":
79777/*!***************************************************************************!*\
79778  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixins/plans.js ***!
79779  \***************************************************************************/
79780/*! no static exports found */
79781/***/ (function(module, exports) {
79782
79783/*
79784 * This mixin is primarily used to share code for the "interval" selector
79785 * on the registration and subscription screens, which is used to show
79786 * all of the various subscription plans offered by the application.
79787 */
79788module.exports = {
79789  data: function data() {
79790    return {
79791      selectedPlan: null,
79792      detailingPlan: null,
79793      showingMonthlyPlans: true,
79794      showingYearlyPlans: false
79795    };
79796  },
79797  methods: {
79798    /**
79799     * Switch to showing monthly plans.
79800     */
79801    showMonthlyPlans: function showMonthlyPlans() {
79802      this.showingMonthlyPlans = true;
79803      this.showingYearlyPlans = false;
79804    },
79805    /**
79806     * Switch to showing yearly plans.
79807     */
79808    showYearlyPlans: function showYearlyPlans() {
79809      this.showingMonthlyPlans = false;
79810      this.showingYearlyPlans = true;
79811    },
79812    /**
79813     * Show the plan details for the given plan.
79814     */
79815    showPlanDetails: function showPlanDetails(plan) {
79816      this.detailingPlan = plan;
79817      $('#modal-plan-details').modal('show');
79818    }
79819  },
79820  computed: {
79821    /**
79822     * Get the active "interval" being displayed.
79823     */
79824    activeInterval: function activeInterval() {
79825      return this.showingMonthlyPlans ? 'monthly' : 'yearly';
79826    },
79827    /**
79828     * Get all of the plans for the active interval.
79829     */
79830    plansForActiveInterval: function plansForActiveInterval() {
79831      var _this = this;
79832      return _.filter(this.plans, function (plan) {
79833        return plan.active && (plan.price === 0 || plan.interval === _this.activeInterval);
79834      });
79835    },
79836    /**
79837     * Get all of the paid plans.
79838     */
79839    paidPlans: function paidPlans() {
79840      return _.filter(this.plans, function (plan) {
79841        return plan.active && plan.price > 0;
79842      });
79843    },
79844    /**
79845     * Get all of the paid plans for the active interval.
79846     */
79847    paidPlansForActiveInterval: function paidPlansForActiveInterval() {
79848      return _.filter(this.plansForActiveInterval, function (plan) {
79849        return plan.active && plan.price > 0;
79850      });
79851    },
79852    /**
79853     * Determine if both monthly and yearly plans are available.
79854     */
79855    hasMonthlyAndYearlyPlans: function hasMonthlyAndYearlyPlans() {
79856      return this.monthlyPlans.length > 0 && this.yearlyPlans.length > 0;
79857    },
79858    /**
79859     * Determine if both monthly and yearly plans are available.
79860     */
79861    hasMonthlyAndYearlyPaidPlans: function hasMonthlyAndYearlyPaidPlans() {
79862      return _.filter(this.paidPlans, {
79863        interval: 'monthly'
79864      }).length > 0 && _.filter(this.paidPlans, {
79865        interval: 'yearly'
79866      }).length > 0;
79867    },
79868    /**
79869     * Determine if only yearly plans are available.
79870     */
79871    onlyHasYearlyPlans: function onlyHasYearlyPlans() {
79872      return this.monthlyPlans.length === 0 && this.yearlyPlans.length > 0;
79873    },
79874    /**
79875     * Determine if both monthly and yearly plans are available.
79876     */
79877    onlyHasYearlyPaidPlans: function onlyHasYearlyPaidPlans() {
79878      return _.filter(this.paidPlans, {
79879        interval: 'monthly'
79880      }).length === 0 && _.filter(this.paidPlans, {
79881        interval: 'yearly'
79882      }).length > 0;
79883    },
79884    /**
79885     * Get all of the monthly plans.
79886     */
79887    monthlyPlans: function monthlyPlans() {
79888      return _.filter(this.plans, function (plan) {
79889        return plan.active && plan.interval === 'monthly';
79890      });
79891    },
79892    /**
79893     * Get all of the yearly plans.
79894     */
79895    yearlyPlans: function yearlyPlans() {
79896      return _.filter(this.plans, function (plan) {
79897        return plan.active && plan.interval === 'yearly';
79898      });
79899    }
79900  }
79901};
79902
79903/***/ }),
79904
79905/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/register.js":
79906/*!******************************************************************************!*\
79907  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixins/register.js ***!
79908  \******************************************************************************/
79909/*! no static exports found */
79910/***/ (function(module, exports) {
79911
79912module.exports = {
79913  /**
79914   * The mixin's data.
79915   */
79916  data: function data() {
79917    return {
79918      plans: [],
79919      selectedPlan: null,
79920      invitation: null,
79921      invalidInvitation: false
79922    };
79923  },
79924  methods: {
79925    /**
79926     * Get the active plans for the application.
79927     */
79928    getPlans: function getPlans() {
79929      var _this = this;
79930      if (!Spark.cardUpFront) {
79931        return;
79932      }
79933      axios.get('/spark/plans').then(function (response) {
79934        var plans = response.data;
79935        _this.plans = _.filter(plans, {
79936          type: "user"
79937        }).length > 0 ? _.filter(plans, {
79938          type: "user"
79939        }) : _.filter(plans, {
79940          type: "team"
79941        });
79942        _this.selectAppropriateDefaultPlan();
79943      });
79944    },
79945    /**
79946     * Get the invitation specified in the query string.
79947     */
79948    getInvitation: function getInvitation() {
79949      var _this2 = this;
79950      axios.get("/invitations/".concat(this.query.invitation)).then(function (response) {
79951        _this2.invitation = response.data;
79952      })["catch"](function (response) {
79953        _this2.invalidInvitation = true;
79954      });
79955    },
79956    /**
79957     * Select the appropriate default plan for registration.
79958     */
79959    selectAppropriateDefaultPlan: function selectAppropriateDefaultPlan() {
79960      if (this.query.plan) {
79961        this.selectPlanById(this.query.plan) || this.selectPlanByName(this.query.plan);
79962      } else if (this.query.invitation) {
79963        this.selectFreePlan();
79964      } else if (this.paidPlansForActiveInterval.length > 0) {
79965        this.selectPlan(this.paidPlansForActiveInterval[0]);
79966      } else {
79967        this.selectFreePlan();
79968      }
79969      if (this.shouldShowYearlyPlans()) {
79970        this.showYearlyPlans();
79971      }
79972    },
79973    /**
79974     * Select the free plan.
79975     */
79976    selectFreePlan: function selectFreePlan() {
79977      var plan = _.find(this.plans, function (plan) {
79978        return plan.price === 0;
79979      });
79980      if (typeof plan !== 'undefined') {
79981        this.selectPlan(plan);
79982      }
79983    },
79984    /**
79985     * Select the plan with the given id.
79986     */
79987    selectPlanById: function selectPlanById(id) {
79988      var _this3 = this;
79989      _.each(this.plans, function (plan) {
79990        if (plan.id === id) {
79991          _this3.selectPlan(plan);
79992        }
79993      });
79994      return this.selectedPlan;
79995    },
79996    /**
79997     * Select the plan with the given name.
79998     */
79999    selectPlanByName: function selectPlanByName(name) {
80000      var _this4 = this;
80001      _.each(this.plans, function (plan) {
80002        if (plan.name === name) {
80003          _this4.selectPlan(plan);
80004        }
80005      });
80006      return this.selectedPlan;
80007    },
80008    /**
80009     * Determine if the given plan is selected.
80010     */
80011    isSelected: function isSelected(plan) {
80012      return this.selectedPlan && plan.id === this.selectedPlan.id;
80013    },
80014    /**
80015     * Select the given plan.
80016     */
80017    selectPlan: function selectPlan(plan) {
80018      this.selectedPlan = plan;
80019      this.registerForm.plan = plan.id;
80020    },
80021    /**
80022     * Determine if we should show the yearly plans.
80023     */
80024    shouldShowYearlyPlans: function shouldShowYearlyPlans() {
80025      return this.monthlyPlans.length === 0 && this.yearlyPlans.length > 0 || this.selectedPlan.interval === 'yearly';
80026    }
80027  }
80028};
80029
80030/***/ }),
80031
80032/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/stripe.js":
80033/*!****************************************************************************!*\
80034  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixins/stripe.js ***!
80035  \****************************************************************************/
80036/*! no static exports found */
80037/***/ (function(module, exports) {
80038
80039module.exports = {
80040  /**
80041   * The mixin's data.
80042   */
80043  data: function data() {
80044    return {
80045      stripe: Spark.stripeKey ? Stripe(Spark.stripeKey, {
80046        apiVersion: Spark.stripeApiVersion
80047      }) : null
80048    };
80049  },
80050  methods: {
80051    /**
80052     * Create a Stripe Card Element.
80053     */
80054    createCardElement: function createCardElement(container) {
80055      if (!this.stripe) {
80056        throw "Invalid Stripe Key/Secret";
80057      }
80058      var card = this.stripe.elements().create('card', {
80059        hideIcon: true,
80060        hidePostalCode: true,
80061        style: {
80062          base: {
80063            '::placeholder': {
80064              color: '#aab7c4'
80065            },
80066            fontFamily: 'Whitney, Lato, -apple-system, BlinkMacSystemFont,"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji","Segoe UI Emoji", "Segoe UI Symbol"',
80067            color: '#495057',
80068            fontSize: '15px'
80069          }
80070        }
80071      });
80072      card.mount(container);
80073      return card;
80074    },
80075    generateToken: function generateToken(callback) {
80076      return axios.get('/stripe/token').then(function (response) {
80077        return callback(response.data.clientSecret);
80078      });
80079    }
80080  }
80081};
80082
80083/***/ }),
80084
80085/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/subscriptions.js":
80086/*!***********************************************************************************!*\
80087  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixins/subscriptions.js ***!
80088  \***********************************************************************************/
80089/*! no static exports found */
80090/***/ (function(module, exports) {
80091
80092/*
80093 * This mixin is used by most of the subscription related screens to select plans
80094 * and send subscription plan changes to the server. This contains helpers for
80095 * the active subscription, trial information and other convenience helpers.
80096 */
80097module.exports = {
80098  /**
80099   * The mixin's data.
80100   */
80101  data: function data() {
80102    return {
80103      selectingPlan: null,
80104      planForm: new SparkForm({})
80105    };
80106  },
80107  methods: {
80108    /**
80109     * Update the subscription to the given plan.
80110     *
80111     * Used when updating or resuming the subscription plan.
80112     */
80113    updateSubscription: function updateSubscription(plan) {
80114      var _this = this;
80115      this.selectingPlan = plan;
80116      this.planForm.errors.forget();
80117
80118      // Here we will send the request to the server to update the subscription plan and
80119      // update the user and team once the request is complete. This method gets used
80120      // for both updating subscriptions plus resuming any cancelled subscriptions.
80121      axios.put(this.urlForPlanUpdate, {
80122        "plan": plan.id
80123      }).then(function () {
80124        Bus.$emit('updateUser');
80125        Bus.$emit('updateTeam');
80126      })["catch"](function (errors) {
80127        if (errors.response.status == 400) {
80128          window.location = '/' + Spark.cashierPath + '/payment/' + errors.response.data.paymentId + '?redirect=' + _this.urlForPlanRedirect;
80129        } else if (errors.response.status === 422) {
80130          _this.planForm.errors.set(errors.response.data.errors);
80131        } else {
80132          _this.planForm.errors.set({
80133            plan: [__("We were unable to update your subscription. Please contact customer support.")]
80134          });
80135        }
80136      })["finally"](function () {
80137        _this.selectingPlan = null;
80138      });
80139    },
80140    /**
80141     * Determine if the given plan is selected.
80142     */
80143    isActivePlan: function isActivePlan(plan) {
80144      return this.activeSubscription && this.activeSubscription.provider_plan === plan.id;
80145    }
80146  },
80147  computed: {
80148    /**
80149     * Get the active plan instance.
80150     */
80151    activePlan: function activePlan() {
80152      var _this2 = this;
80153      if (this.activeSubscription) {
80154        return _.find(this.plans, function (plan) {
80155          return plan.id === _this2.activeSubscription.provider_plan;
80156        });
80157      }
80158    },
80159    /**
80160     * Determine if the active plan is a monthly plan.
80161     */
80162    activePlanIsMonthly: function activePlanIsMonthly() {
80163      return this.activePlan && this.activePlan.interval === 'monthly';
80164    },
80165    /**
80166     * Get the active subscription instance.
80167     */
80168    activeSubscription: function activeSubscription() {
80169      if (!this.billable) {
80170        return;
80171      }
80172      var subscription = _.find(this.billable.subscriptions, function (subscription) {
80173        return subscription.name === 'default' && !_.includes(['incomplete', 'incomplete_expired', 'past_due', 'unpaid'], subscription.stripe_status);
80174      });
80175      if (typeof subscription !== 'undefined') {
80176        return subscription;
80177      }
80178    },
80179    /**
80180     * Determine if the current subscription is active.
80181     */
80182    subscriptionIsActive: function subscriptionIsActive() {
80183      return this.activeSubscription && !this.activeSubscription.ends_at;
80184    },
80185    /**
80186     * Determine if the billable entity is on a generic trial.
80187     */
80188    onGenericTrial: function onGenericTrial() {
80189      return this.billable.trial_ends_at && moment.utc(this.billable.trial_ends_at).isAfter(moment.utc());
80190    },
80191    /**
80192     * Determine if the current subscription is active.
80193     */
80194    subscriptionIsOnTrial: function subscriptionIsOnTrial() {
80195      if (this.onGenericTrial) {
80196        return true;
80197      }
80198      return this.activeSubscription && this.activeSubscription.tri
80198al_ends_at && moment.utc().isBefore(moment.utc(this.activeSubscription.trial_ends_at));
80199    },
80200    /**
80201     * Get the formatted trial ending date.
80202     */
80203    trialEndsAt: function trialEndsAt() {
80204      if (!this.subscriptionIsOnTrial) {
80205        return;
80206      }
80207      if (this.onGenericTrial) {
80208        return moment.utc(this.billable.trial_ends_at).local().format('MMMM Do, YYYY');
80209      }
80210      return moment.utc(this.activeSubscription.trial_ends_at).local().format('MMMM Do, YYYY');
80211    },
80212    /**
80213     * Determine if the current subscription is active.
80214     */
80215    subscriptionIsOnGracePeriod: function subscriptionIsOnGracePeriod() {
80216      return this.activeSubscription && this.activeSubscription.ends_at && moment.utc().isBefore(moment.utc(this.activeSubscription.ends_at));
80217    },
80218    /**
80219     * Determine if the billable entity has no active subscription.
80220     */
80221    needsSubscription: function needsSubscription() {
80222      return !this.activeSubscription || this.activeSubscription.ends_at && moment.utc().isAfter(moment.utc(this.activeSubscription.ends_at));
80223    },
80224    /**
80225     * Get the URL for the subscription plan update.
80226     */
80227    urlForPlanUpdate: function urlForPlanUpdate() {
80228      return this.billingUser ? '/settings/subscription' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/subscription");
80229    },
80230    /**
80231     * Get the URL to redirect to after confirmation.
80232     */
80233    urlForPlanRedirect: function urlForPlanRedirect() {
80234      return this.billingUser ? "/settings%23/subscription" : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "%23/subscription");
80235    }
80236  }
80237};
80238
80239/***/ }),
80240
80241/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/tab-state.js":
80242/*!*******************************************************************************!*\
80243  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixins/tab-state.js ***!
80244  \*******************************************************************************/
80245/*! no static exports found */
80246/***/ (function(module, exports) {
80247
80248module.exports = {
80249  pushStateSelector: null,
80250  methods: {
80251    /**
80252     * Initialize push state handling for tabs.
80253     */
80254    usePushStateForTabs: function usePushStateForTabs(selector) {
80255      var _this = this;
80256      this.pushStateSelector = selector;
80257      this.registerTabClickHandler();
80258      window.addEventListener('popstate', function (e) {
80259        _this.activateTabForCurrentHash();
80260      });
80261      if (window.location.hash) {
80262        this.activateTabForCurrentHash();
80263      } else {
80264        this.activateFirstTab();
80265      }
80266    },
80267    /**
80268     * Register the click handler for all of the tabs.
80269     */
80270    registerTabClickHandler: function registerTabClickHandler() {
80271      var self = this;
80272      $("".concat(this.pushStateSelector, " a[data-toggle=\"tab\"]")).on('click', function (e) {
80273        self.removeActiveClassFromTabs();
80274        history.pushState(null, null, '#/' + $(this).attr('href').substring(1));
80275        self.broadcastTabChange($(this).attr('href').substring(1));
80276      });
80277    },
80278    /**
80279     * Activate the tab for the current hash in the URL.
80280     */
80281    activateTabForCurrentHash: function activateTabForCurrentHash() {
80282      var hash = window.location.hash.substring(2);
80283      var parameters = hash.split('/');
80284      hash = parameters.shift();
80285      this.removeActiveClassFromTabs();
80286      var tab = $("".concat(this.pushStateSelector, " a[href=\"#").concat(hash, "\"][data-toggle=\"tab\"]"));
80287      if (tab.length > 0) {
80288        tab.tab('show');
80289        this.broadcastTabChange(hash, parameters);
80290      } else {
80291        this.activateFirstTab();
80292      }
80293    },
80294    /**
80295     * Activate the first tab in a list.
80296     */
80297    activateFirstTab: function activateFirstTab() {
80298      var tab = $("".concat(this.pushStateSelector, " a[data-toggle=\"tab\"]")).first();
80299      if (tab.length) {
80300        tab.tab('show');
80301        this.broadcastTabChange(tab.attr('href').substring(1));
80302      }
80303    },
80304    /**
80305     * Remove the active class from the tabs.
80306     */
80307    removeActiveClassFromTabs: function removeActiveClassFromTabs() {
80308      $("".concat(this.pushStateSelector, " a")).removeClass('active');
80309    },
80310    /**
80311     * Broadcast that a tab change happened.
80312     */
80313    broadcastTabChange: function broadcastTabChange(hash, parameters) {
80314      Bus.$emit('sparkHashChanged', hash, parameters);
80315    }
80316  }
80317};
80318
80319/***/ }),
80320
80321/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/vat.js":
80322/*!*************************************************************************!*\
80323  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/mixins/vat.js ***!
80324  \*************************************************************************/
80325/*! no static exports found */
80326/***/ (function(module, exports) {
80327
80328module.exports = {
80329  methods: {
80330    /**
80331     * Determine if the given country collects European VAT.
80332     */
80333    collectsVat: function collectsVat(country) {
80334      return Spark.collectsEuropeanVat ? _.includes(['BE', 'BG', 'CZ', 'DK', 'DE', 'EE', 'IE', 'GR', 'ES', 'FR', 'HR', 'IT', 'CY', 'LV', 'LT', 'LU', 'HU', 'MT', 'NL', 'AT', 'PL', 'PT', 'RO', 'SI', 'SK', 'FI', 'SE', 'GB'], country) : false;
80335    },
80336    /**
80337     * Refresh the tax rate using the given form input.
80338     */
80339    refreshTaxRate: function refreshTaxRate(form) {
80340      var _this = this;
80341      axios.post('/tax-rate', JSON.parse(JSON.stringify(form))).then(function (response) {
80342        _this.taxRate = response.data.rate;
80343      });
80344    },
80345    /**
80346     * Get the tax amount for the selected plan.
80347     */
80348    taxAmount: function taxAmount(plan) {
80349      return plan.price * (this.taxRate / 100);
80350    },
80351    /**
80352     * Get the total plan price including the applicable tax.
80353     */
80354    priceWithTax: function priceWithTax(plan) {
80355      return plan.price + this.taxAmount(plan);
80356    }
80357  }
80358};
80359
80360/***/ }),
80361
80362/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/navbar/navbar.js":
80363/*!****************************************************************************!*\
80364  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/navbar/navbar.js ***!
80365  \****************************************************************************/
80366/*! no static exports found */
80367/***/ (function(module, exports) {
80368
80369module.exports = {
80370  props: ['user', 'teams', 'currentTeam', 'unreadAnnouncementsCount', 'unreadNotificationsCount'],
80371  computed: {
80372    notificationsCount: function notificationsCount() {
80373      return this.unreadAnnouncementsCount + this.unreadNotificationsCount;
80374    }
80375  },
80376  methods: {
80377    /**
80378     * Show the user's notifications.
80379     */
80380    showNotifications: function showNotifications() {
80381      Bus.$emit('showNotifications');
80382    },
80383    /**
80384     * Show the customer support e-mail form.
80385     */
80386    showSupportForm: function showSupportForm() {
80387      Bus.$emit('showSupportForm');
80388    }
80389  }
80390};
80391
80392/***/ }),
80393
80394/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/notifications/notifications.js":
80395/*!******************************************************************************************!*\
80396  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/notifications/notifications.js ***!
80397  \******************************************************************************************/
80398/*! no static exports found */
80399/***/ (function(module, exports) {
80400
80401module.exports = {
80402  props: ['notifications', 'hasUnreadAnnouncements', 'loadingNotifications'],
80403  /**
80404   * The component's data.
80405   */
80406  data: function data() {
80407    return {
80408      showingNotifications: true,
80409      showingAnnouncements: false
80410    };
80411  },
80412  methods: {
80413    /**
80414     * Show the user notifications.
80415     */
80416    showNotifications: function showNotifications() {
80417      this.showingNotifications = true;
80418      this.showingAnnouncements = false;
80419    },
80420    /**
80421     * Show the product announcements.
80422     */
80423    showAnnouncements: function showAnnouncements() {
80424      this.showingNotifications = false;
80425      this.showingAnnouncements = true;
80426      this.updateLastReadAnnouncementsTimestamp();
80427    },
80428    /**
80429     * Update the last read announcements timestamp.
80430     */
80431    updateLastReadAnnouncementsTimestamp: function updateLastReadAnnouncementsTimestamp() {
80432      axios.put('/user/last-read-announcements-at').then(function () {
80433        Bus.$emit('updateUser');
80434      });
80435    }
80436  },
80437  computed: {
80438    /**
80439     * Get the active notifications or announcements.
80440     */
80441    activeNotifications: function activeNotifications() {
80442      if (!this.notifications) {
80443        return [];
80444      }
80445      if (this.showingNotifications) {
80446        return this.notifications.notifications;
80447      } else {
80448        return this.notifications.announcements;
80449      }
80450    },
80451    /**
80452     * Determine if the user has any notifications.
80453     */
80454    hasNotifications: function hasNotifications() {
80455      return this.notifications && this.notifications.notifications.length > 0;
80456    },
80457    /**
80458     * Determine if the user has any announcements.
80459     */
80460    hasAnnouncements: function hasAnnouncements() {
80461      return this.notifications && this.notifications.announcements.length > 0;
80462    }
80463  }
80464};
80465
80466/***/ }),
80467
80468/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/api.js":
80469/*!***************************************************************************!*\
80470  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/api.js ***!
80471  \***************************************************************************/
80472/*! no static exports found */
80473/***/ (function(module, exports) {
80474
80475module.exports = {
80476  /**
80477   * The component's data.
80478   */
80479  data: function data() {
80480    return {
80481      tokens: [],
80482      availableAbilities: []
80483    };
80484  },
80485  /**
80486   * Prepare the component.
80487   */
80488  mounted: function mounted() {
80489    this.getTokens();
80490    this.getAvailableAbilities();
80491  },
80492  /**
80493   * The component has been created by Vue.
80494   */
80495  created: function created() {
80496    var self = this;
80497    this.$on('updateTokens', function () {
80498      self.getTokens();
80499    });
80500  },
80501  methods: {
80502    /**
80503     * Get the current API tokens for the user.
80504     */
80505    getTokens: function getTokens() {
80506      var _this = this;
80507      axios.get('/settings/api/tokens').then(function (response) {
80508        return _this.tokens = response.data;
80509      });
80510    },
80511    /**
80512     * Get all of the available token abilities.
80513     */
80514    getAvailableAbilities: function getAvailableAbilities() {
80515      var _this2 = this;
80516      axios.get('/settings/api/token/abilities').then(function (response) {
80517        return _this2.availableAbilities = response.data;
80518      });
80519    }
80520  }
80521};
80522
80523/***/ }),
80524
80525/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/api/create-token.js":
80526/*!****************************************************************************************!*\
80527  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/api/create-token.js ***!
80528  \****************************************************************************************/
80529/*! no static exports found */
80530/***/ (function(module, exports) {
80531
80532module.exports = {
80533  props: ['availableAbilities'],
80534  /**
80535   * The component's data.
80536   */
80537  data: function data() {
80538    return {
80539      showingToken: null,
80540      allAbilitiesAssigned: false,
80541      form: new SparkForm({
80542        name: '',
80543        abilities: []
80544      })
80545    };
80546  },
80547  computed: {
80548    copyCommandSupported: function copyCommandSupported() {
80549      return document.queryCommandSupported('copy');
80550    }
80551  },
80552  watch: {
80553    /**
80554     * Watch the available abilities for changes.
80555     */
80556    availableAbilities: function availableAbilities() {
80557      if (this.availableAbilities.length > 0) {
80558        this.assignDefaultAbilities();
80559      }
80560    }
80561  },
80562  methods: {
80563    /**
80564     * Assign all of the default abilities.
80565     */
80566    assignDefaultAbilities: function assignDefaultAbilities() {
80567      var defaults = _.filter(this.availableAbilities, function (a) {
80568        return a["default"];
80569      });
80570      this.form.abilities = _.map(defaults, 'value');
80571    },
80572    /**
80573     * Enable all the available abilities for the given token.
80574     */
80575    assignAllAbilities: function assignAllAbilities() {
80576      this.allAbilitiesAssigned = true;
80577      this.form.abilities = _.map(this.availableAbilities, 'value');
80578    },
80579    /**
80580     * Remove all of the abilities from the token.
80581     */
80582    removeAllAbilities: function removeAllAbilities() {
80583      this.allAbilitiesAssigned = false;
80584      this.form.abilities = [];
80585    },
80586    /**
80587     * Toggle the given ability in the list of assigned abilities.
80588     */
80589    toggleAbility: function toggleAbility(ability) {
80590      if (this.abilityIsAssigned(ability)) {
80591        this.form.abilities = _.reject(this.form.abilities, function (a) {
80592          return a == ability;
80593        });
80594      } else {
80595        this.form.abilities.push(ability);
80596      }
80597    },
80598    /**
80599     * Determine if the given ability has been assigned to the token.
80600     */
80601    abilityIsAssigned: function abilityIsAssigned(ability) {
80602      return _.includes(this.form.abilities, ability);
80603    },
80604    /**
80605     * Create a new API token.
80606     */
80607    create: function create() {
80608      var _this = this;
80609      Spark.post('/settings/api/token', this.form).then(function (response) {
80610        _this.showToken(response.token);
80611        _this.resetForm();
80612        _this.$parent.$emit('updateTokens');
80613      });
80614    },
80615    /**
80616     * Display the token to the user.
80617     */
80618    showToken: function showToken(token) {
80619      this.showingToken = token;
80620      $('#modal-show-token').modal('show');
80621    },
80622    /**
80623     * Select the token and copy to Clipboard.
80624     */
80625    selectToken: function selectToken() {
80626      $('#api-token').select();
80627      if (this.copyCommandSupported) {
80628        document.execCommand("copy");
80629      }
80630    },
80631    /**
80632     * Reset the token form back to its default state.
80633     */
80634    resetForm: function resetForm() {
80635      this.form.name = '';
80636      this.assignDefaultAbilities();
80637      this.allAbilitiesAssigned = false;
80638    }
80639  }
80640};
80641
80642/***/ }),
80643
80644/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/api/tokens.js":
80645/*!**********************************************************************************!*\
80646  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/api/tokens.js ***!
80647  \**********************************************************************************/
80648/*! no static exports found */
80649/***/ (function(module, exports) {
80650
80651module.exports = {
80652  props: ['tokens', 'availableAbilities'],
80653  /**
80654   * The component's data.
80655   */
80656  data: function data() {
80657    return {
80658      updatingToken: null,
80659      deletingToken: null,
80660      updateTokenForm: new SparkForm({
80661        name: '',
80662        abilities: []
80663      }),
80664      deleteTokenForm: new SparkForm({})
80665    };
80666  },
80667  methods: {
80668    /**
80669     * Show the edit token modal.
80670     */
80671    editToken: function editToken(token) {
80672      this.updatingToken = token;
80673      this.initializeUpdateFormWith(token);
80674      $('#modal-update-token').modal('show');
80675    },
80676    /**
80677     * Initialize the edit form with the given token.
80678     */
80679    initializeUpdateFormWith: function initializeUpdateFormWith(token) {
80680      this.updateTokenForm.name = token.name;
80681      this.updateTokenForm.abilities = token.metadata.abilities;
80682    },
80683    /**
80684     * Update the token being edited.
80685     */
80686    updateToken: function updateToken() {
80687      var _this = this;
80688      Spark.put("/settings/api/token/".concat(this.updatingToken.id), this.updateTokenForm).then(function (response) {
80689        _this.$parent.$emit('updateTokens');
80690        $('#modal-update-token').modal('hide');
80691      });
80692    },
80693    /**
80694     * Toggle the ability on the current token being edited.
80695     */
80696    toggleAbility: function toggleAbility(ability) {
80697      if (this.abilityIsAssigned(ability)) {
80698        this.updateTokenForm.abilities = _.reject(this.updateTokenForm.abilities, function (a) {
80699          return a == ability;
80700        });
80701      } else {
80702        this.updateTokenForm.abilities.push(ability);
80703      }
80704    },
80705    /**
80706     * Determine if the ability has been assigned to the token being edited.
80707     */
80708    abilityIsAssigned: function abilityIsAssigned(ability) {
80709      return _.includes(this.updateTokenForm.abilities, ability);
80710    },
80711    /**
80712     * Get user confirmation that the token should be deleted.
80713     */
80714    approveTokenDelete: function approveTokenDelete(token) {
80715      this.deletingToken = token;
80716      $('#modal-delete-token').modal('show');
80717    },
80718    /**
80719     * Delete the specified token.
80720     */
80721    deleteToken: function deleteToken() {
80722      var _this2 = this;
80723      Spark["delete"]("/settings/api/token/".concat(this.deletingToken.id), this.deleteTokenForm).then(function () {
80724        _this2.$parent.$emit('updateTokens');
80725        $('#modal-delete-token').modal('hide');
80726      });
80727    }
80728  }
80729};
80730
80731/***/ }),
80732
80733/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices.js":
80734/*!********************************************************************************!*\
80735  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices.js ***!
80736  \********************************************************************************/
80737/*! no static exports found */
80738/***/ (function(module, exports) {
80739
80740module.exports = {
80741  props: ['user', 'team', 'billableType'],
80742  /**
80743   * The component's data.
80744   */
80745  data: function data() {
80746    return {
80747      invoices: []
80748    };
80749  },
80750  /**
80751   * Prepare the component.
80752   */
80753  mounted: function mounted() {
80754    this.getInvoices();
80755  },
80756  methods: {
80757    /**
80758     * Get the user's billing invoices
80759     */
80760    getInvoices: function getInvoices() {
80761      var _this = this;
80762      axios.get(this.urlForInvoices).then(function (response) {
80763        _this.invoices = _.filter(response.data, function (invoice) {
80764          return invoice.total != '$0.00';
80765        });
80766      });
80767    }
80768  },
80769  computed: {
80770    /**
80771     * Get the URL for retrieving the invoices.
80772     */
80773    urlForInvoices: function urlForInvoices() {
80774      return this.billingUser ? '/settings/invoices' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/invoices");
80775    }
80776  }
80777};
80778
80779/***/ }),
80780
80781/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices/invoice-list.js":
80782/*!*********************************************************************************************!*\
80783  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices/invoice-list.js ***!
80784  \*********************************************************************************************/
80785/*! no static exports found */
80786/***/ (function(module, exports) {
80787
80788module.exports = {
80789  props: ['user', 'team', 'invoices', 'billableType'],
80790  methods: {
80791    /**
80792     * Get the URL for downloading a given invoice.
80793     */
80794    downloadUrlFor: function downloadUrlFor(invoice) {
80795      return this.billingUser ? "/settings/invoice/".concat(invoice.id) : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/invoice/").concat(invoice.id);
80796    }
80797  }
80798};
80799
80800/***/ }),
80801
80802/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices/update-extra-billing-information.js":
80803/*!*****************************************************************************************************************!*\
80804  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/invoices/update-extra-billing-information.js ***!
80805  \*****************************************************************************************************************/
80806/*! no static exports found */
80807/***/ (function(module, exports) {
80808
80809module.exports = {
80810  props: ['user', 'team', 'billableType'],
80811  /**
80812   * The component's data.
80813   */
80814  data: function data() {
80815    return {
80816      form: new SparkForm({
80817        information: ''
80818      })
80819    };
80820  },
80821  /**
80822   * Prepare the component.
80823   */
80824  mounted: function mounted() {
80825    this.form.information = this.billable.extra_billing_information;
80826  },
80827  methods: {
80828    /**
80829     * Update the extra billing information.
80830     */
80831    update: function update() {
80832      Spark.put(this.urlForUpdate, this.form);
80833    }
80834  },
80835  computed: {
80836    /**
80837     * Get the URL for the extra billing information method update.
80838     */
80839    urlForUpdate: function urlForUpdate() {
80840      return this.billingUser ? '/settings/extra-billing-information' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/extra-billing-information");
80841    }
80842  }
80843};
80844
80845/***/ }),
80846
80847/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method-stripe.js":
80848/*!*********************************************************************************************!*\
80849  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method-stripe.js ***!
80850  \*********************************************************************************************/
80851/*! no static exports found */
80852/***/ (function(module, exports, __webpack_require__) {
80853
80854module.exports = {
80855  props: ['user', 'team', 'billableType'],
80856  /**
80857   * Load mixins for the component.
80858   */
80859  mixins: [__webpack_require__(/*! ./../mixins/discounts */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/discounts.js")],
80860  /**
80861   * The component's data.
80862   */
80863  data: function data() {
80864    return {
80865      currentDiscount: null,
80866      loadingCurrentDiscount: false
80867    };
80868  },
80869  /**
80870   * The component has been created by Vue.
80871   */
80872  created: function created() {
80873    var self = this;
80874    this.$on('updateDiscount', function () {
80875      self.getCurrentDiscountForBillable(self.billableType, self.billable);
80876      return true;
80877    });
80878  },
80879  /**
80880   * Prepare the component.
80881   */
80882  mounted: function mounted() {
80883    this.getCurrentDiscountForBillable(this.billableType, this.billable);
80884  }
80885};
80886
80887/***/ }),
80888
80889/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/redeem-coupon.js":
80890/*!****************************************************************************************************!*\
80891  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/redeem-coupon.js ***!
80892  \****************************************************************************************************/
80893/*! no static exports found */
80894/***/ (function(module, exports) {
80895
80896module.exports = {
80897  props: ['user', 'team', 'billableType'],
80898  /**
80899   * The component's data.
80900   */
80901  data: function data() {
80902    return {
80903      form: new SparkForm({
80904        coupon: ''
80905      })
80906    };
80907  },
80908  methods: {
80909    /**
80910     * Redeem the given coupon code.
80911     */
80912    redeem: function redeem() {
80913      var _this = this;
80914      Spark.post(this.urlForRedemption, this.form).then(function () {
80915        _this.form.coupon = '';
80916        _this.$parent.$emit('updateDiscount');
80917      });
80918    }
80919  },
80920  computed: {
80921    /**
80922     * Get the URL for redeeming a coupon.
80923     */
80924    urlForRedemption: function urlForRedemption() {
80925      return this.billingUser ? '/settings/payment-method/coupon' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/payment-method/coupon");
80926    }
80927  }
80928};
80929
80930/***/ }),
80931
80932/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/update-payment-method-stripe.js":
80933/*!*******************************************************************************************************************!*\
80934  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/update-payment-method-stripe.js ***!
80935  \*******************************************************************************************************************/
80936/*! no static exports found */
80937/***/ (function(module, exports, __webpack_require__) {
80938
80939module.exports = {
80940  props: ['user', 'team', 'billableType'],
80941  /**
80942   * Load mixins for the component.
80943   */
80944  mixins: [__webpack_require__(/*! ./../../mixins/stripe */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/stripe.js")],
80945  /**
80946   * The component's data.
80947   */
80948  data: function data() {
80949    return {
80950      cardElement: null,
80951      form: new SparkForm({
80952        stripe_payment_method: '',
80953        address: '',
80954        address_line_2: '',
80955        city: '',
80956        state: '',
80957        zip: '',
80958        country: 'US'
80959      }),
80960      cardForm: new SparkForm({
80961        name: ''
80962      })
80963    };
80964  },
80965  /**
80966   * Prepare the component.
80967   */
80968  mounted: function mounted() {
80969    this.cardElement = this.createCardElement('#payment-card-element');
80970    this.initializeBillingAddress();
80971  },
80972  methods: {
80973    /**
80974     * Initialize the billing address form for the billable entity.
80975     */
80976    initializeBillingAddress: function initializeBillingAddress() {
80977      if (!Spark.collectsBillingAddress) {
80978        return;
80979      }
80980      this.form.address = this.billable.billing_address;
80981      this.form.address_line_2 = this.billable.billing_address_line_2;
80982      this.form.city = this.billable.billing_city;
80983      this.form.state = this.billable.billing_state;
80984      this.form.zip = this.billable.billing_zip;
80985      this.form.country = this.billable.billing_country || 'US';
80986    },
80987    /**
80988     * Update the billable's card information.
80989     */
80990    update: function update(e) {
80991      var _this = this;
80992      this.form.busy = true;
80993      this.form.errors.forget();
80994      this.form.successful = false;
80995      this.cardForm.errors.forget();
80996      var payload = {
80997        name: this.cardForm.name,
80998        address: {
80999          line1: this.form.address || '',
81000          line2: this.form.address_line_2 || '',
81001          city: this.form.city || '',
81002          state: this.form.state || '',
81003          postal_code: this.form.zip || '',
81004          country: this.form.country || ''
81005        }
81006      };
81007      this.generateToken(function (secret) {
81008        _this.stripe.handleCardSetup(secret, _this.cardElement, {
81009          payment_method_data: {
81010            billing_details: payload
81011          }
81012        }).then(function (response) {
81013          if (response.error) {
81014            _this.cardForm.errors.set({
81015              card: [response.error.message]
81016            });
81017            _this.form.busy = false;
81018          } else {
81019            _this.sendUpdateToServer(response.setupIntent.payment_method);
81020          }
81021        });
81022      });
81023    },
81024    /**
81025     * Send the credit card update information to the server.
81026     */
81027    sendUpdateToServer: function sendUpdateToServer(paymentMethod) {
81028      var _this2 = this;
81029      this.form.stripe_payment_method = paymentMethod;
81030      Spark.put(this.urlForUpdate, this.form).then(function (response) {
81031        Bus.$emit('updateUser');
81032        Bus.$emit('updateTeam');
81033        _this2.cardForm.name = '';
81034        _this2.cardForm.number = '';
81035        _this2.cardForm.cvc = '';
81036        _this2.cardForm.month = '';
81037        _this2.cardForm.year = '';
81038        if (!Spark.collectsBillingAddress) {
81039          _this2.form.zip = '';
81040        }
81041      });
81042    }
81043  },
81044  computed: {
81045    /**
81046     * Get the billable entity's "billable" name.
81047     */
81048    billableName: function billableName() {
81049      return this.billingUser ? this.user.name : this.team.owner.name;
81050    },
81051    /**
81052     * Get the URL for the payment method update.
81053     */
81054    urlForUpdate: function urlForUpdate() {
81055      return this.billingUser ? '/settings/payment-method' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/payment-method");
81056    },
81057    /**
81058     * Get the proper brand icon for the customer's credit card.
81059     */
81060    cardIcon: function cardIcon() {
81061      if (!this.billable.card_brand) {
81062        return 'fa-cc-stripe';
81063      }
81064      switch (this.billable.card_brand) {
81065        case 'amex':
81066          return 'fa-cc-amex';
81067        case 'diners':
81068          return 'fa-cc-diners-club';
81069        case 'discover':
81070          return 'fa-cc-discover';
81071        case 'jcb':
81072          return 'fa-cc-jcb';
81073        case 'mastercard':
81074          return 'fa-cc-mastercard';
81075        case 'visa':
81076          return 'fa-cc-visa';
81077        default:
81078          return 'fa-cc-stripe';
81079      }
81080    },
81081    /**
81082     * Get the placeholder for the billable entity's credit card.
81083     */
81084    placeholder: function placeholder() {
81085      if (this.billable.card_last_four) {
81086        return "************".concat(this.billable.card_last_four);
81087      }
81088      return '';
81089    }
81090  }
81091};
81092
81093/***/ }),
81094
81095/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/update-vat-id.js":
81096/*!****************************************************************************************************!*\
81097  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/payment-method/update-vat-id.js ***!
81098  \****************************************************************************************************/
81099/*! no static exports found */
81100/***/ (function(module, exports) {
81101
81102module.exports = {
81103  props: ['user', 'team', 'billableType'],
81104  /**
81105   * The component's data.
81106   */
81107  data: function data() {
81108    return {
81109      form: new SparkForm({
81110        vat_id: ''
81111      })
81112    };
81113  },
81114  /**
81115   * Bootstrap the component.
81116   */
81117  mounted: function mounted() {
81118    this.form.vat_id = this.billable.vat_id;
81119  },
81120  methods: {
81121    /**
81122     * Update the customer's VAT ID.
81123     */
81124    update: function update() {
81125      Spark.put(this.urlForUpdate, this.form);
81126    }
81127  },
81128  computed: {
81129    /**
81130     * Get the URL for the VAT ID update.
81131     */
81132    urlForUpdate: function urlForUpdate() {
81133      return this.billingUser ? '/settings/payment-method/vat-id' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/payment-method/vat-id");
81134    }
81135  }
81136};
81137
81138/***/ }),
81139
81140/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile.js":
81141/*!*******************************************************************************!*\
81142  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile.js ***!
81143  \*******************************************************************************/
81144/*! no static exports found */
81145/***/ (function(module, exports) {
81146
81147module.exports = {
81148  props: ['user']
81149};
81150
81151/***/ }),
81152
81153/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile/update-contact-information.js":
81154/*!**********************************************************************************************************!*\
81155  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile/update-contact-information.js ***!
81156  \**********************************************************************************************************/
81157/*! no static exports found */
81158/***/ (function(module, exports) {
81159
81160module.exports = {
81161  props: ['user'],
81162  /**
81163   * The component's data.
81164   */
81165  data: function data() {
81166    return {
81167      form: $.extend(true, new SparkForm({
81168        name: '',
81169        email: ''
81170      }), Spark.forms.updateContactInformation)
81171    };
81172  },
81173  /**
81174   * Bootstrap the component.
81175   */
81176  mounted: function mounted() {
81177    this.form.name = this.user.name;
81178    this.form.email = this.user.email;
81179  },
81180  methods: {
81181    /**
81182     * Update the user's contact information.
81183     */
81184    update: function update() {
81185      Spark.put('/settings/contact', this.form).then(function () {
81186        Bus.$emit('updateUser');
81187      });
81188    }
81189  }
81190};
81191
81192/***/ }),
81193
81194/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile/update-profile-photo.js":
81195/*!****************************************************************************************************!*\
81196  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/profile/update-profile-photo.js ***!
81197  \****************************************************************************************************/
81198/*! no static exports found */
81199/***/ (function(module, exports) {
81200
81201module.exports = {
81202  props: ['user'],
81203  /**
81204   * The component's data.
81205   */
81206  data: function data() {
81207    return {
81208      form: new SparkForm({})
81209    };
81210  },
81211  methods: {
81212    /**
81213     * Update the user's profile photo.
81214     */
81215    update: function update(e) {
81216      e.preventDefault();
81217      if (!this.$refs.photo.files.length) {
81218        return;
81219      }
81220      var self = this;
81221      this.form.startProcessing();
81222
81223      // We need to gather a fresh FormData instance with the profile photo appended to
81224      // the data so we can POST it up to the server. This will allow us to do async
81225      // uploads of the profile photos. We will update the user after this action.
81226      axios.post('/settings/photo', this.gatherFormData()).then(function () {
81227        Bus.$emit('updateUser');
81228        self.form.finishProcessing();
81229      }, function (error) {
81230        self.form.setErrors(error.response.data.errors);
81231      });
81232    },
81233    /**
81234     * Gather the form data for the photo upload.
81235     */
81236    gatherFormData: function gatherFormData() {
81237      var data = new FormData();
81238      data.append('photo', this.$refs.photo.files[0]);
81239      return data;
81240    }
81241  },
81242  computed: {
81243    /**
81244     * Calculate the style attribute for the photo preview.
81245     */
81246    previewStyle: function previewStyle() {
81247      return "background-image: url(".concat(this.user.photo_url, ")");
81248    }
81249  }
81250};
81251
81252/***/ }),
81253
81254/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security.js":
81255/*!********************************************************************************!*\
81256  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/security.js ***!
81257  \********************************************************************************/
81258/*! no static exports found */
81259/***/ (function(module, exports) {
81260
81261module.exports = {
81262  props: ['user'],
81263  /**
81264   * The component's data.
81265   */
81266  data: function data() {
81267    return {
81268      twoFactorResetCode: null
81269    };
81270  },
81271  /**
81272   * The component has been created by Vue.
81273   */
81274  created: function created() {
81275    var self = this;
81276    this.$on('receivedTwoFactorResetCode', function (code) {
81277      self.twoFactorResetCode = code;
81278      $('#modal-show-two-factor-reset-code').modal('show');
81279    });
81280  }
81281};
81282
81283/***/ }),
81284
81285/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/disable-two-factor-auth.js":
81286/*!********************************************************************************************************!*\
81287  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/disable-two-factor-auth.js ***!
81288  \********************************************************************************************************/
81289/*! no static exports found */
81290/***/ (function(module, exports) {
81291
81292module.exports = {
81293  props: ['user'],
81294  /**
81295   * The component's data.
81296   */
81297  data: function data() {
81298    return {
81299      form: new SparkForm({})
81300    };
81301  },
81302  methods: {
81303    /**
81304     * Disable two-factor authentication for the user.
81305     */
81306    disable: function disable() {
81307      Spark["delete"]('/settings/two-factor-auth', this.form).then(function () {
81308        Bus.$emit('updateUser');
81309      });
81310    }
81311  }
81312};
81313
81314/***/ }),
81315
81316/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/enable-two-factor-auth.js":
81317/*!*******************************************************************************************************!*\
81318  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/enable-two-factor-auth.js ***!
81319  \*******************************************************************************************************/
81320/*! no static exports found */
81321/***/ (function(module, exports) {
81322
81323module.exports = {
81324  props: ['user'],
81325  /**
81326   * The component's data.
81327   */
81328  data: function data() {
81329    return {
81330      form: new SparkForm({
81331        country_code: '',
81332        phone: ''
81333      })
81334    };
81335  },
81336  /**
81337   * Prepare the component.
81338   */
81339  mounted: function mounted() {
81340    this.form.country_code = this.user.country_code;
81341    this.form.phone = this.user.phone;
81342  },
81343  methods: {
81344    /**
81345     * Enable two-factor authentication for the user.
81346     */
81347    enable: function enable() {
81348      var _this = this;
81349      Spark.post('/settings/two-factor-auth', this.form).then(function (code) {
81350        _this.$parent.$emit('receivedTwoFactorResetCode', code);
81351        Bus.$emit('updateUser');
81352      });
81353    }
81354  }
81355};
81356
81357/***/ }),
81358
81359/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/update-password.js":
81360/*!************************************************************************************************!*\
81361  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/security/update-password.js ***!
81362  \************************************************************************************************/
81363/*! no static exports found */
81364/***/ (function(module, exports) {
81365
81366module.exports = {
81367  /**
81368   * The component's data.
81369   */
81370  data: function data() {
81371    return {
81372      form: new SparkForm({
81373        current_password: '',
81374        password: '',
81375        password_confirmation: ''
81376      })
81377    };
81378  },
81379  methods: {
81380    /**
81381     * Update the user's password.
81382     */
81383    update: function update() {
81384      Spark.put('/settings/password', this.form);
81385    }
81386  }
81387};
81388
81389/***/ }),
81390
81391/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/settings.js":
81392/*!********************************************************************************!*\
81393  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/settings.js ***!
81394  \********************************************************************************/
81395/*! no static exports found */
81396/***/ (function(module, exports, __webpack_require__) {
81397
81398module.exports = {
81399  props: ['user', 'teams'],
81400  /**
81401   * Load mixins for the component.
81402   */
81403  mixins: [__webpack_require__(/*! ./../mixins/tab-state */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/tab-state.js")],
81404  /**
81405   * The component's data.
81406   */
81407  data: function data() {
81408    return {
81409      billableType: 'user',
81410      team: null
81411    };
81412  },
81413  /**
81414   * Prepare the component.
81415   */
81416  mounted: function mounted() {
81417    this.usePushStateForTabs('.spark-settings-tabs');
81418  }
81419};
81420
81421/***/ }),
81422
81423/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription.js":
81424/*!************************************************************************************!*\
81425  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription.js ***!
81426  \************************************************************************************/
81427/*! no static exports found */
81428/***/ (function(module, exports, __webpack_require__) {
81429
81430module.exports = {
81431  props: ['user', 'team', 'billableType'],
81432  /**
81433   * Load mixins for the component.
81434   */
81435  mixins: [__webpack_require__(/*! ./../mixins/plans */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/plans.js"), __webpack_require__(/*! ./../mixins/subscriptions */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/subscriptions.js")],
81436  /**
81437   * The component's data.
81438   */
81439  data: function data() {
81440    return {
81441      plans: []
81442    };
81443  },
81444  /**
81445   * Prepare the component.
81446   */
81447  mounted: function mounted() {
81448    var self = this;
81449    this.getPlans();
81450    this.$on('showPlanDetails', function (plan) {
81451      self.showPlanDetails(plan);
81452    });
81453  },
81454  methods: {
81455    /**
81456     * Get the active plans for the application.
81457     */
81458    getPlans: function getPlans() {
81459      var _this = this;
81460      axios.get('/spark/plans').then(function (response) {
81461        _this.plans = _this.billingUser ? _.filter(response.data, {
81462          type: "user"
81463        }) : _.filter(response.data, {
81464          type: "team"
81465        });
81466      });
81467    }
81468  }
81469};
81470
81471/***/ }),
81472
81473/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/cancel-subscription.js":
81474/*!********************************************************************************************************!*\
81475  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/cancel-subscription.js ***!
81476  \********************************************************************************************************/
81477/*! no static exports found */
81478/***/ (function(module, exports) {
81479
81480module.exports = {
81481  props: ['user', 'team', 'billableType'],
81482  /**
81483   * The component's data.
81484   */
81485  data: function data() {
81486    return {
81487      form: new SparkForm({})
81488    };
81489  },
81490  methods: {
81491    /**
81492     * Confirm the cancellation operation.
81493     */
81494    confirmCancellation: function confirmCancellation() {
81495      $('#modal-confirm-cancellation').modal('show');
81496    },
81497    /**
81498     * Cancel the current subscription.
81499     */
81500    cancel: function cancel() {
81501      Spark["delete"](this.urlForCancellation, this.form).then(function () {
81502        Bus.$emit('updateUser');
81503        Bus.$emit('updateTeam');
81504        $('#modal-confirm-cancellation').modal('hide');
81505      });
81506    }
81507  },
81508  computed: {
81509    /**
81510     * Get the URL for the subscription cancellation.
81511     */
81512    urlForCancellation: function urlForCancellation() {
81513      return this.billingUser ? '/settings/subscription' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/subscription");
81514    }
81515  }
81516};
81517
81518/***/ }),
81519
81520/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/resume-subscription.js":
81521/*!********************************************************************************************************!*\
81522  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/resume-subscription.js ***!
81523  \********************************************************************************************************/
81524/*! no static exports found */
81525/***/ (function(module, exports, __webpack_require__) {
81526
81527module.exports = {
81528  props: ['user', 'team', 'plans', 'billableType'],
81529  /**
81530   * Load mixins for the component.
81531   */
81532  mixins: [__webpack_require__(/*! ./../../mixins/plans */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/plans.js"), __webpack_require__(/*! ./../../mixins/subscriptions */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/subscriptions.js")],
81533  /**
81534   * Prepare the component.
81535   */
81536  mounted: function mounted() {
81537    if (this.onlyHasYearlyPlans) {
81538      this.showYearlyPlans();
81539    }
81540  },
81541  methods: {
81542    /**
81543     * Show the plan details for the given plan.
81544     *
81545     * We'll ask the parent subscription component to display it.
81546     */
81547    showPlanDetails: function showPlanDetails(plan) {
81548      this.$parent.$emit('showPlanDetails', plan);
81549    },
81550    /**
81551     * Get the plan price with the applicable VAT.
81552     */
81553    priceWithTax: function priceWithTax(plan) {
81554      return plan.price + plan.price * (this.billable.tax_rate / 100);
81555    }
81556  }
81557};
81558
81559/***/ }),
81560
81561/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/subscribe-stripe.js":
81562/*!*****************************************************************************************************!*\
81563  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/subscribe-stripe.js ***!
81564  \*****************************************************************************************************/
81565/*! no static exports found */
81566/***/ (function(module, exports, __webpack_require__) {
81567
81568module.exports = {
81569  props: ['user', 'team', 'plans', 'billableType'],
81570  /**
81571   * Load mixins for the component.
81572   */
81573  mixins: [__webpack_require__(/*! ./../../mixins/plans */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/plans.js"), __webpack_require__(/*! ./../../mixins/subscriptions */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/subscriptions.js"), __webpack_require__(/*! ./../../mixins/vat */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/vat.js"), __webpack_require__(/*! ./../../mixins/stripe */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/stripe.js")],
81574  /**
81575   * The component's data.
81576   */
81577  data: function data() {
81578    return {
81579      taxRate: 0,
81580      cardElement: null,
81581      form: new SparkForm({
81582        use_existing_payment_method: this.hasPaymentMethod() ? '1' : '0',
81583        stripe_payment_method: '',
81584        plan: '',
81585        coupon: null,
81586        address: '',
81587        address_line_2: '',
81588        city: '',
81589        state: '',
81590        zip: '',
81591        country: 'US',
81592        vat_id: ''
81593      }),
81594      cardForm: new SparkForm({
81595        name: ''
81596      })
81597    };
81598  },
81599  watch: {
81600    /**
81601     * Watch for changes on the entire billing address.
81602     */
81603    'currentBillingAddress': function currentBillingAddress(value) {
81604      if (!Spark.collectsEuropeanVat) {
81605        return;
81606      }
81607      this.refreshTaxRate(this.form);
81608    }
81609  },
81610  /**
81611   * Prepare the component.
81612   */
81613  mounted: function mounted() {
81614    this.cardElement = this.createCardElement('#subscription-card-element');
81615    this.initializeBillingAddress();
81616    if (this.onlyHasYearlyPaidPlans) {
81617      this.showYearlyPlans();
81618    }
81619  },
81620  methods: {
81621    /**
81622     * Initialize the billing address form for the billable entity.
81623     */
81624    initializeBillingAddress: function initializeBillingAddress() {
81625      this.form.address = this.billable.billing_address;
81626      this.form.address_line_2 = this.billable.billing_address_line_2;
81627      this.form.city = this.billable.billing_city;
81628      this.form.state = this.billable.billing_state;
81629      this.form.zip = this.billable.billing_zip;
81630      this.form.country = this.billable.billing_country || 'US';
81631      this.form.vat_id = this.billable.vat_id;
81632    },
81633    /**
81634     * Mark the given plan as selected.
81635     */
81636    selectPlan: function selectPlan(plan) {
81637      this.selectedPlan = plan;
81638      this.form.plan = this.selectedPlan.id;
81639    },
81640    /**
81641     * Subscribe to the specified plan.
81642     */
81643    subscribe: function subscribe() {
81644      var _this = this;
81645      this.cardForm.errors.forget();
81646      this.form.startProcessing();
81647      if (this.form.use_existing_payment_method == '1') {
81648        return this.createSubscription();
81649      }
81650      var payload = {
81651        name: this.cardForm.name,
81652        address: {
81653          line1: this.form.address || '',
81654          line2: this.form.address_line_2 || '',
81655          city: this.form.city || '',
81656          state: this.form.state || '',
81657          postal_code: this.form.zip || '',
81658          country: this.form.country || ''
81659        }
81660      };
81661      this.generateToken(function (secret) {
81662        _this.stripe.handleCardSetup(secret, _this.cardElement, {
81663          payment_method_data: {
81664            billing_details: payload
81665          }
81666        }).then(function (response) {
81667          if (response.error) {
81668            _this.cardForm.errors.set({
81669              card: [response.error.message]
81670            });
81671            _this.form.busy = false;
81672          } else {
81673            _this.createSubscription(response.setupIntent.payment_method);
81674          }
81675        });
81676      });
81677    },
81678    /*
81679     * After obtaining the Stripe token, create subscription on the Spark server.
81680     */
81681    createSubscription: function createSubscription(token) {
81682      var _this2 = this;
81683      this.form.stripe_payment_method = token;
81684      axios.post(this.urlForNewSubscription, this.form).then(function (response) {
81685        Bus.$emit('updateUser');
81686        Bus.$emit('updateTeam');
81687      })["catch"](function (errors) {
81688        if (errors.response.status == 400) {
81689          window.location = '/' + Spark.cashierPath + '/payment/' 
81689+ errors.response.data.paymentId + '?redirect=' + _this2.urlForPlanRedirect;
81690        } else {
81691          _this2.form.setErrors(errors.response.data.errors);
81692        }
81693      });
81694    },
81695    /**
81696     * Determine if the user has subscribed to the given plan before.
81697     */
81698    hasSubscribed: function hasSubscribed(plan) {
81699      return !!_.filter(this.billable.subscriptions, {
81700        provider_plan: plan.id
81701      }).length;
81702    },
81703    /**
81704     * Show the plan details for the given plan.
81705     *
81706     * We'll ask the parent subscription component to display it.
81707     */
81708    showPlanDetails: function showPlanDetails(plan) {
81709      this.$parent.$emit('showPlanDetails', plan);
81710    },
81711    /**
81712     * Determine if the user/team has a payment method defined.
81713     */
81714    hasPaymentMethod: function hasPaymentMethod() {
81715      return this.team ? this.team.card_last_four : this.user.card_last_four;
81716    }
81717  },
81718  computed: {
81719    /**
81720     * Get the billable entity's "billable" name.
81721     */
81722    billableName: function billableName() {
81723      return this.billingUser ? this.user.name : this.team.owner.name;
81724    },
81725    /**
81726     * Determine if the selected country collects European VAT.
81727     */
81728    countryCollectsVat: function countryCollectsVat() {
81729      return this.collectsVat(this.form.country);
81730    },
81731    /**
81732     * Get the URL for subscribing to a plan.
81733     */
81734    urlForNewSubscription: function urlForNewSubscription() {
81735      return this.billingUser ? '/settings/subscription' : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/subscription");
81736    },
81737    /**
81738     * Get the URL to redirect to after confirmation.
81739     */
81740    urlForPlanRedirect: function urlForPlanRedirect() {
81741      return this.billingUser ? "/settings%23/subscription" : "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "%23/subscription");
81742    },
81743    /**
81744     * Get the current billing address from the subscribe form.
81745     *
81746     * This used primarily for watching.
81747     */
81748    currentBillingAddress: function currentBillingAddress() {
81749      return this.form.address + this.form.address_line_2 + this.form.city + this.form.state + this.form.zip + this.form.country + this.form.vat_id;
81750    }
81751  }
81752};
81753
81754/***/ }),
81755
81756/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/update-subscription.js":
81757/*!********************************************************************************************************!*\
81758  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/subscription/update-subscription.js ***!
81759  \********************************************************************************************************/
81760/*! no static exports found */
81761/***/ (function(module, exports, __webpack_require__) {
81762
81763module.exports = {
81764  props: ['user', 'team', 'plans', 'billableType'],
81765  /**
81766   * Load mixins for the component.
81767   */
81768  mixins: [__webpack_require__(/*! ./../../mixins/plans */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/plans.js"), __webpack_require__(/*! ./../../mixins/subscriptions */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/subscriptions.js")],
81769  /**
81770   * The component's data.
81771   */
81772  data: function data() {
81773    return {
81774      confirmingPlan: null
81775    };
81776  },
81777  /**
81778   * Prepare the component.
81779   */
81780  mounted: function mounted() {
81781    var _this = this;
81782    this.selectActivePlanInterval();
81783
81784    // We need to watch the activePlan computed property for changes so we can select
81785    // the proper active plan on the plan interval button group. So, we will watch
81786    // this property and fire off a method anytime it changes so it can sync up.
81787    this.$watch('activePlan', function (value) {
81788      _this.selectActivePlanInterval();
81789    });
81790    if (this.onlyHasYearlyPlans) {
81791      this.showYearlyPlans();
81792    }
81793  },
81794  methods: {
81795    /**
81796     * Confirm the plan update with the user.
81797     */
81798    confirmPlanUpdate: function confirmPlanUpdate(plan) {
81799      this.confirmingPlan = plan;
81800      $('#modal-confirm-plan-update').modal('show');
81801    },
81802    /**
81803     * Approve the plan update.
81804     */
81805    approvePlanUpdate: function approvePlanUpdate() {
81806      $('#modal-confirm-plan-update').modal('hide');
81807      this.updateSubscription(this.confirmingPlan);
81808    },
81809    /**
81810     * Select the active plan interval.
81811     */
81812    selectActivePlanInterval: function selectActivePlanInterval() {
81813      if (this.activePlanIsMonthly || this.yearlyPlans.length === 0) {
81814        this.showMonthlyPlans();
81815      } else {
81816        this.showYearlyPlans();
81817      }
81818    },
81819    /**
81820     * Show the plan details for the given plan.
81821     *
81822     * We'll ask the parent subscription component to display it.
81823     */
81824    showPlanDetails: function showPlanDetails(plan) {
81825      this.$parent.$emit('showPlanDetails', plan);
81826    },
81827    /**
81828     * Get the plan price with the applicable VAT.
81829     */
81830    priceWithTax: function priceWithTax(plan) {
81831      return plan.price + plan.price * (this.billable.tax_rate / 100);
81832    }
81833  }
81834};
81835
81836/***/ }),
81837
81838/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams.js":
81839/*!*****************************************************************************!*\
81840  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams.js ***!
81841  \*****************************************************************************/
81842/*! no static exports found */
81843/***/ (function(module, exports) {
81844
81845module.exports = {
81846  props: ['user', 'teams']
81847};
81848
81849/***/ }),
81850
81851/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/create-team.js":
81852/*!*****************************************************************************************!*\
81853  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/create-team.js ***!
81854  \*****************************************************************************************/
81855/*! no static exports found */
81856/***/ (function(module, exports) {
81857
81858module.exports = {
81859  /**
81860   * The component's data.
81861   */
81862  data: function data() {
81863    return {
81864      plans: [],
81865      form: new SparkForm({
81866        name: '',
81867        slug: ''
81868      })
81869    };
81870  },
81871  computed: {
81872    /**
81873     * Get the active subscription instance.
81874     */
81875    activeSubscription: function activeSubscription() {
81876      if (!this.$parent.billable) {
81877        return;
81878      }
81879      var subscription = _.find(this.$parent.billable.subscriptions, function (subscription) {
81880        return subscription.name === 'default';
81881      });
81882      if (typeof subscription !== 'undefined') {
81883        return subscription;
81884      }
81885    },
81886    /**
81887     * Get the active plan instance.
81888     */
81889    activePlan: function activePlan() {
81890      var _this = this;
81891      if (this.activeSubscription) {
81892        return _.find(this.plans, function (plan) {
81893          return plan.id === _this.activeSubscription.provider_plan;
81894        });
81895      }
81896    },
81897    /**
81898     * Check if there's a limit for the number of teams.
81899     */
81900    hasTeamLimit: function hasTeamLimit() {
81901      if (!this.activePlan) {
81902        return false;
81903      }
81904      return !!this.activePlan.attributes.teams;
81905    },
81906    /**
81907     *
81908     * Get the remaining teams in the active plan.
81909     */
81910    remainingTeams: function remainingTeams() {
81911      var ownedTeams = _.filter(this.$parent.teams, {
81912        owner_id: this.$parent.billable.id
81913      });
81914      return this.activePlan ? this.activePlan.attributes.teams - ownedTeams.length : 0;
81915    },
81916    /**
81917     * Check if the user can create more teams.
81918     */
81919    canCreateMoreTeams: function canCreateMoreTeams() {
81920      if (!this.hasTeamLimit) {
81921        return true;
81922      }
81923      return this.remainingTeams > 0;
81924    }
81925  },
81926  /**
81927   * The component has been created by Vue.
81928   */
81929  created: function created() {
81930    this.getPlans();
81931  },
81932  watch: {
81933    /**
81934     * Watch the team name for changes.
81935     */
81936    'form.name': function formName(val, oldVal) {
81937      if (this.form.slug === '' || this.form.slug === oldVal.toLowerCase().replace(/[\s\W-]+/g, '-')) {
81938        this.form.slug = val.toLowerCase().replace(/[\s\W-]+/g, '-');
81939      }
81940    }
81941  },
81942  methods: {
81943    /**
81944     * Create a new team.
81945     */
81946    create: function create() {
81947      var _this2 = this;
81948      Spark.post('/settings/' + Spark.teamsPrefix, this.form).then(function (response) {
81949        _this2.form.name = '';
81950        _this2.form.slug = '';
81951        if (response.pendingPayment) {
81952          window.location = '/' + Spark.cashierPath + '/payment/' + response.pendingPayment + '?redirect=/settings%23/subscription';
81953        } else {
81954          Bus.$emit('updateUser');
81955          Bus.$emit('updateTeams');
81956        }
81957      });
81958    },
81959    /**
81960     * Get all the plans defined in the application.
81961     */
81962    getPlans: function getPlans() {
81963      var _this3 = this;
81964      axios.get('/spark/plans').then(function (response) {
81965        _this3.plans = response.data;
81966      });
81967    }
81968  }
81969};
81970
81971/***/ }),
81972
81973/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/current-teams.js":
81974/*!*******************************************************************************************!*\
81975  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/current-teams.js ***!
81976  \*******************************************************************************************/
81977/*! no static exports found */
81978/***/ (function(module, exports) {
81979
81980module.exports = {
81981  props: ['user', 'teams'],
81982  /**
81983   * The component's data.
81984   */
81985  data: function data() {
81986    return {
81987      leavingTeam: null,
81988      deletingTeam: null,
81989      leaveTeamForm: new SparkForm({}),
81990      deleteTeamForm: new SparkForm({})
81991    };
81992  },
81993  /**
81994   * Prepare the component.
81995   */
81996  mounted: function mounted() {
81997    $('[data-toggle="tooltip"]').tooltip();
81998  },
81999  computed: {
82000    /**
82001     * Get the URL for leaving a team.
82002     */
82003    urlForLeaving: function urlForLeaving() {
82004      return "/settings/".concat(Spark.teamsPrefix, "/").concat(this.leavingTeam.id, "/members/").concat(this.user.id);
82005    }
82006  },
82007  methods: {
82008    /**
82009     * Approve leaving the given team.
82010     */
82011    approveLeavingTeam: function approveLeavingTeam(team) {
82012      this.leavingTeam = team;
82013      $('#modal-leave-team').modal('show');
82014    },
82015    /**
82016     * Leave the given team.
82017     */
82018    leaveTeam: function leaveTeam() {
82019      Spark["delete"](this.urlForLeaving, this.leaveTeamForm).then(function () {
82020        Bus.$emit('updateUser');
82021        Bus.$emit('updateTeams');
82022        $('#modal-leave-team').modal('hide');
82023      });
82024    },
82025    /**
82026     * Approve the deletion of the given team.
82027     */
82028    approveTeamDelete: function approveTeamDelete(team) {
82029      this.deletingTeam = team;
82030      $('#modal-delete-team').modal('show');
82031    },
82032    /**
82033     * Delete the given team.
82034     */
82035    deleteTeam: function deleteTeam() {
82036      Spark["delete"]("/settings/".concat(Spark.teamsPrefix, "/").concat(this.deletingTeam.id), this.deleteTeamForm).then(function () {
82037        Bus.$emit('updateUser');
82038        Bus.$emit('updateTeams');
82039        $('#modal-delete-team').modal('hide');
82040      });
82041    }
82042  }
82043};
82044
82045/***/ }),
82046
82047/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/mailed-invitations.js":
82048/*!************************************************************************************************!*\
82049  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/mailed-invitations.js ***!
82050  \************************************************************************************************/
82051/*! no static exports found */
82052/***/ (function(module, exports) {
82053
82054module.exports = {
82055  props: ['team', 'invitations'],
82056  methods: {
82057    /**
82058     * Cancel the sent invitation.
82059     */
82060    cancel: function cancel(invitation) {
82061      var _this = this;
82062      axios["delete"]("/settings/invitations/".concat(invitation.id)).then(function () {
82063        _this.$parent.$emit('updateInvitations');
82064      });
82065    }
82066  }
82067};
82068
82069/***/ }),
82070
82071/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/pending-invitations.js":
82072/*!*************************************************************************************************!*\
82073  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/pending-invitations.js ***!
82074  \*************************************************************************************************/
82075/*! no static exports found */
82076/***/ (function(module, exports) {
82077
82078module.exports = {
82079  /**
82080   * The component's data.
82081   */
82082  data: function data() {
82083    return {
82084      invitations: []
82085    };
82086  },
82087  /**
82088   * The component has been created by Vue.
82089   */
82090  created: function created() {
82091    this.getPendingInvitations();
82092  },
82093  methods: {
82094    /**
82095     * Get the pending invitations for the user.
82096     */
82097    getPendingInvitations: function getPendingInvitations() {
82098      var _this = this;
82099      axios.get('/settings/invitations/pending').then(function (response) {
82100        _this.invitations = response.data;
82101      });
82102    },
82103    /**
82104     * Accept the given invitation.
82105     */
82106    accept: function accept(invitation) {
82107      var _this2 = this;
82108      axios.post("/settings/invitations/".concat(invitation.id, "/accept")).then(function () {
82109        Bus.$emit('updateTeams');
82110        _this2.getPendingInvitations();
82111      });
82112      this.removeInvitation(invitation);
82113    },
82114    /**
82115     * Reject the given invitation.
82116     */
82117    reject: function reject(invitation) {
82118      var _this3 = this;
82119      axios.post("/settings/invitations/".concat(invitation.id, "/reject")).then(function () {
82120        _this3.getPendingInvitations();
82121      });
82122      this.removeInvitation(invitation);
82123    },
82124    /**
82125     * Remove the given invitation from the list.
82126     */
82127    removeInvitation: function removeInvitation(invitation) {
82128      this.invitations = _.reject(this.invitations, function (i) {
82129        return i.id === invitation.id;
82130      });
82131    }
82132  }
82133};
82134
82135/***/ }),
82136
82137/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/send-invitation.js":
82138/*!*********************************************************************************************!*\
82139  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/send-invitation.js ***!
82140  \*********************************************************************************************/
82141/*! no static exports found */
82142/***/ (function(module, exports) {
82143
82144module.exports = {
82145  props: ['user', 'team', 'billableType', 'defaultRole'],
82146  /**
82147   * The component's data.
82148   */
82149  data: function data() {
82150    return {
82151      plans: [],
82152      roles: [],
82153      form: new SparkForm({
82154        email: '',
82155        role: this.defaultRole
82156      })
82157    };
82158  },
82159  computed: {
82160    /**
82161     * Get the active subscription instance.
82162     */
82163    activeSubscription: function activeSubscription() {
82164      if (!this.billable) {
82165        return;
82166      }
82167      var subscription = _.find(this.billable.subscriptions, function (subscription) {
82168        return subscription.name === 'default';
82169      });
82170      if (typeof subscription !== 'undefined') {
82171        return subscription;
82172      }
82173    },
82174    /**
82175     * Get the active plan instance.
82176     */
82177    activePlan: function activePlan() {
82178      var _this = this;
82179      if (this.activeSubscription) {
82180        return _.find(this.plans, function (plan) {
82181          return plan.id === _this.activeSubscription.provider_plan;
82182        });
82183      }
82184    },
82185    /**
82186     * Check if there's a limit for the number of team members.
82187     */
82188    hasTeamMembersLimit: function hasTeamMembersLimit() {
82189      if (!this.activePlan) {
82190        return false;
82191      }
82192      return !!this.activePlan.attributes.teamMembers;
82193    },
82194    /**
82195     *
82196     * Get the remaining team members in the active plan.
82197     */
82198    remainingTeamMembers: function remainingTeamMembers() {
82199      return this.activePlan ? this.activePlan.attributes.teamMembers - this.$parent.team.users.length : 0;
82200    },
82201    /**
82202     * Check if the user can invite more team members.
82203     */
82204    canInviteMoreTeamMembers: function canInviteMoreTeamMembers() {
82205      if (!this.hasTeamMembersLimit) {
82206        return true;
82207      }
82208      return this.remainingTeamMembers > 0;
82209    }
82210  },
82211  /**
82212   * The component has been created by Vue.
82213   */
82214  created: function created() {
82215    this.getPlans();
82216    this.getRoles();
82217  },
82218  methods: {
82219    /**
82220     * Send a team invitation.
82221     */
82222    send: function send() {
82223      var _this2 = this;
82224      Spark.post("/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/invitations"), this.form).then(function () {
82225        _this2.form.email = '';
82226        _this2.form.role = Spark.defaultRole;
82227        _this2.$parent.$emit('updateInvitations');
82228      });
82229    },
82230    /**
82231     * Get all the plans defined in the application.
82232     */
82233    getPlans: function getPlans() {
82234      var _this3 = this;
82235      axios.get('/spark/plans').then(function (response) {
82236        _this3.plans = response.data;
82237      });
82238    },
82239    /**
82240     * Get the available member roles.
82241     */
82242    getRoles: function getRoles() {
82243      var _this4 = this;
82244      axios.get("/settings/".concat(Spark.teamsPrefix, "/roles")).then(function (response) {
82245        _this4.roles = response.data;
82246      });
82247    }
82248  }
82249};
82250
82251/***/ }),
82252
82253/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-members.js":
82254/*!******************************************************************************************!*\
82255  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-members.js ***!
82256  \******************************************************************************************/
82257/*! no static exports found */
82258/***/ (function(module, exports) {
82259
82260module.exports = {
82261  props: ['user', 'team'],
82262  /**
82263   * The component's data.
82264   */
82265  data: function data() {
82266    return {
82267      roles: [],
82268      updatingTeamMember: null,
82269      deletingTeamMember: null,
82270      updateTeamMemberForm: $.extend(true, new SparkForm({
82271        role: ''
82272      }), Spark.forms.updateTeamMember),
82273      deleteTeamMemberForm: new SparkForm({})
82274    };
82275  },
82276  /**
82277   * The component has been created by Vue.
82278   */
82279  created: function created() {
82280    this.getRoles();
82281  },
82282  computed: {
82283    /**
82284     * Get the URL for updating a team member.
82285     */
82286    urlForUpdating: function urlForUpdating() {
82287      return "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/members/").concat(this.updatingTeamMember.id);
82288    },
82289    /**
82290     * Get the URL for deleting a team member.
82291     */
82292    urlForDeleting: function urlForDeleting() {
82293      return "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/members/").concat(this.deletingTeamMember.id);
82294    }
82295  },
82296  methods: {
82297    /**
82298     * Get the available team member roles.
82299     */
82300    getRoles: function getRoles() {
82301      var _this = this;
82302      axios.get("/settings/".concat(Spark.teamsPrefix, "/roles")).then(function (response) {
82303        _this.roles = response.data;
82304      });
82305    },
82306    /**
82307     * Edit the given team member.
82308     */
82309    editTeamMember: function editTeamMember(member) {
82310      this.updatingTeamMember = member;
82311      this.updateTeamMemberForm.role = member.pivot.role;
82312      $('#modal-update-team-member').modal('show');
82313    },
82314    /**
82315     * Update the team member.
82316     */
82317    update: function update() {
82318      Spark.put(this.urlForUpdating, this.updateTeamMemberForm).then(function () {
82319        Bus.$emit('updateTeam');
82320        $('#modal-update-team-member').modal('hide');
82321      });
82322    },
82323    /**
82324     * Display the approval modal for the deletion of a team member.
82325     */
82326    approveTeamMemberDelete: function approveTeamMemberDelete(member) {
82327      this.deletingTeamMember = member;
82328      $('#modal-delete-member').modal('show');
82329    },
82330    /**
82331     * Delete the given team member.
82332     */
82333    deleteMember: function deleteMember() {
82334      Spark["delete"](this.urlForDeleting, this.deleteTeamMemberForm).then(function () {
82335        Bus.$emit('updateTeam');
82336        $('#modal-delete-member').modal('hide');
82337      });
82338    },
82339    /**
82340     * Determine if the current user can edit a team member.
82341     */
82342    canEditTeamMember: function canEditTeamMember(member) {
82343      return this.user.id === this.team.owner_id && this.user.id !== member.id;
82344    },
82345    /**
82346     * Determine if the current user can delete a team member.
82347     */
82348    canDeleteTeamMember: function canDeleteTeamMember(member) {
82349      return this.user.id === this.team.owner_id && this.user.id !== member.id;
82350    },
82351    /**
82352     * Get the displayable role for the given team member.
82353     */
82354    teamMemberRole: function teamMemberRole(member) {
82355      if (this.roles.length === 0) {
82356        return '';
82357      }
82358      if (member.pivot.role === 'owner') {
82359        return 'Owner';
82360      }
82361      var role = _.find(this.roles, function (role) {
82362        return role.value == member.pivot.role;
82363      });
82364      if (typeof role !== 'undefined') {
82365        return role.text;
82366      }
82367    }
82368  }
82369};
82370
82371/***/ }),
82372
82373/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-membership.js":
82374/*!*********************************************************************************************!*\
82375  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-membership.js ***!
82376  \*********************************************************************************************/
82377/*! no static exports found */
82378/***/ (function(module, exports) {
82379
82380module.exports = {
82381  props: ['user', 'team', 'billableType'],
82382  /**
82383   * The component's data.
82384   */
82385  data: function data() {
82386    return {
82387      invitations: []
82388    };
82389  },
82390  /**
82391   * The component has been created by Vue.
82392   */
82393  created: function created() {
82394    var self = this;
82395    this.getInvitations();
82396    this.$on('updateInvitations', function () {
82397      self.getInvitations();
82398    });
82399  },
82400  methods: {
82401    /**
82402     * Get all of the invitations for the team.
82403     */
82404    getInvitations: function getInvitations() {
82405      var _this = this;
82406      axios.get("/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/invitations")).then(function (response) {
82407        _this.invitations = response.data;
82408      });
82409    }
82410  }
82411};
82412
82413/***/ }),
82414
82415/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-profile.js":
82416/*!******************************************************************************************!*\
82417  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-profile.js ***!
82418  \******************************************************************************************/
82419/*! no static exports found */
82420/***/ (function(module, exports) {
82421
82422module.exports = {
82423  props: ['user', 'team']
82424};
82425
82426/***/ }),
82427
82428/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-settings.js":
82429/*!*******************************************************************************************!*\
82430  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/team-settings.js ***!
82431  \*******************************************************************************************/
82432/*! no static exports found */
82433/***/ (function(module, exports, __webpack_require__) {
82434
82435module.exports = {
82436  props: ['user', 'teamId'],
82437  /**
82438   * Load mixins for the component.
82439   */
82440  mixins: [__webpack_require__(/*! ./../../mixins/tab-state */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixins/tab-state.js")],
82441  /**
82442   * The component's data.
82443   */
82444  data: function data() {
82445    return {
82446      billableType: 'team',
82447      team: null
82448    };
82449  },
82450  /**
82451   * The component has been created by Vue.
82452   */
82453  created: function created() {
82454    var self = this;
82455    this.getTeam();
82456    Bus.$on('updateTeam', function () {
82457      self.getTeam();
82458    });
82459  },
82460  /**
82461   * Prepare the component.
82462   */
82463  mounted: function mounted() {
82464    this.usePushStateForTabs('.spark-settings-tabs');
82465  },
82466  methods: {
82467    /**
82468     * Get the team being managed.
82469     */
82470    getTeam: function getTeam() {
82471      var _this = this;
82472      axios.get("/settings/".concat(Spark.teamsPrefix, "/json/").concat(this.teamId)).then(function (response) {
82473        _this.team = response.data;
82474      });
82475    }
82476  }
82477};
82478
82479/***/ }),
82480
82481/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/update-team-name.js":
82482/*!**********************************************************************************************!*\
82483  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/update-team-name.js ***!
82484  \**********************************************************************************************/
82485/*! no static exports found */
82486/***/ (function(module, exports) {
82487
82488module.exports = {
82489  props: ['user', 'team'],
82490  /**
82491   * The component's data.
82492   */
82493  data: function data() {
82494    return {
82495      form: new SparkForm({
82496        name: ''
82497      })
82498    };
82499  },
82500  /**
82501   * Prepare the component.
82502   */
82503  mounted: function mounted() {
82504    this.form.name = this.team.name;
82505  },
82506  methods: {
82507    /**
82508     * Update the team name.
82509     */
82510    update: function update() {
82511      Spark.put("/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/name"), this.form).then(function () {
82512        Bus.$emit('updateTeam');
82513        Bus.$emit('updateTeams');
82514      });
82515    }
82516  }
82517};
82518
82519/***/ }),
82520
82521/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/update-team-photo.js":
82522/*!***********************************************************************************************!*\
82523  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/settings/teams/update-team-photo.js ***!
82524  \***********************************************************************************************/
82525/*! no static exports found */
82526/***/ (function(module, exports) {
82527
82528module.exports = {
82529  props: ['user', 'team'],
82530  /**
82531   * The component's data.
82532   */
82533  data: function data() {
82534    return {
82535      form: new SparkForm({})
82536    };
82537  },
82538  methods: {
82539    /**
82540     * Update the team's photo.
82541     */
82542    update: function update(e) {
82543      e.preventDefault();
82544      if (!this.$refs.photo.files.length) {
82545        return;
82546      }
82547      var self = this;
82548      this.form.startProcessing();
82549
82550      // We need to gather a fresh FormData instance with the profile photo appended to
82551      // the data so we can POST it up to the server. This will allow us to do async
82552      // uploads of the profile photos. We will update the user after this action.
82553      axios.post(this.urlForUpdate, this.gatherFormData()).then(function () {
82554        Bus.$emit('updateTeam');
82555        Bus.$emit('updateTeams');
82556        self.form.finishProcessing();
82557      }, function (error) {
82558        self.form.setErrors(error.response.data.errors);
82559      });
82560    },
82561    /**
82562     * Gather the form data for the photo upload.
82563     */
82564    gatherFormData: function gatherFormData() {
82565      var data = new FormData();
82566      data.append('photo', this.$refs.photo.files[0]);
82567      return data;
82568    }
82569  },
82570  computed: {
82571    /**
82572     * Get the URL for updating the team photo.
82573     */
82574    urlForUpdate: function urlForUpdate() {
82575      return "/settings/".concat(Spark.teamsPrefix, "/").concat(this.team.id, "/photo");
82576    },
82577    /**
82578     * Calculate the style attribute for the photo preview.
82579     */
82580    previewStyle: function previewStyle() {
82581      return "background-image: url(".concat(this.team.photo_url, ")");
82582    }
82583  }
82584};
82585
82586/***/ }),
82587
82588/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/spark-bootstrap.js":
82589/*!******************************************************************************!*\
82590  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/spark-bootstrap.js ***!
82591  \******************************************************************************/
82592/*! no static exports found */
82593/***/ (function(module, exports, __webpack_require__) {
82594
82595/*
82596 * Load various JavaScript modules that assist Spark.
82597 */
82598window.URI = __webpack_require__(/*! urijs */ "./node_modules/urijs/src/URI.js");
82599window.axios = __webpack_require__(/*! axios */ "./node_modules/axios/index.js");
82600window._ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js");
82601window.moment = __webpack_require__(/*! moment */ "./node_modules/moment/moment.js");
82602window.Promise = __webpack_require__(/*! promise */ "./node_modules/promise/index.js");
82603window.Popper = __webpack_require__(/*! popper.js */ "./node_modules/popper.js/dist/esm/popper.js")["default"];
82604window.__ = function (key, replace) {
82605  var translation = Spark.translations[key] ? Spark.translations[key] : key;
82606  _.forEach(replace, function (value, key) {
82607    translation = translation.replace(':' + key, value);
82608  });
82609  return translation;
82610};
82611
82612/*
82613 * Define Moment locales
82614 */
82615window.moment.defineLocale('en-short', {
82616  parentLocale: 'en',
82617  relativeTime: {
82618    future: "in %s",
82619    past: "%s",
82620    s: "1s",
82621    m: "1m",
82622    mm: "%dm",
82623    h: "1h",
82624    hh: "%dh",
82625    d: "1d",
82626    dd: "%dd",
82627    M: "1 month ago",
82628    MM: "%d months ago",
82629    y: "1y",
82630    yy: "%dy"
82631  }
82632});
82633window.moment.locale('en');
82634
82635/*
82636 * Load jQuery and Bootstrap jQuery, used for front-end interaction.
82637 */
82638if (window.$ === undefined || window.jQuery === undefined) {
82639  window.$ = window.jQuery = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");
82640}
82641__webpack_require__(/*! bootstrap */ "./node_modules/bootstrap/dist/js/bootstrap.js");
82642
82643/**
82644 * Load Vue if this application is using Vue as its framework.
82645 */
82646if ($('#spark-app').length > 0) {
82647  __webpack_require__(/*! vue-bootstrap */ "./vendor/laravel/spark-aurelius/resources/assets/js/vue-bootstrap.js");
82648}
82649
82650/**
82651 * We'll load the axios HTTP library which allows us to easily issue requests
82652 * to our Laravel back-end. This library automatically handles sending the
82653 * CSRF token as a header based on the value of the "XSRF" token cookie.
82654 */
82655window.axios.defaults.headers.common = {
82656  'X-Requested-With': 'XMLHttpRequest',
82657  'X-CSRF-TOKEN': Spark.csrfToken
82658};
82659
82660/**
82661 * Intercept the incoming responses.
82662 *
82663 * Handle any unexpected HTTP errors and pop up modals, etc.
82664 */
82665window.axios.interceptors.response.use(function (response) {
82666  return response;
82667}, function (error) {
82668  if (error.response === undefined) {
82669    return Promise.reject(error);
82670  }
82671  switch (error.response.status) {
82672    case 401:
82673      window.axios.get('/logout');
82674      $('#modal-session-expired').modal('show');
82675      break;
82676    case 402:
82677      window.location = '/settings#/subscription';
82678      break;
82679  }
82680  return Promise.reject(error);
82681});
82682
82683/***/ }),
82684
82685/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/spark.js":
82686/*!********************************************************************!*\
82687  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/spark.js ***!
82688  \********************************************************************/
82689/*! no static exports found */
82690/***/ (function(module, exports) {
82691
82692/**
82693 * Export the root Spark application.
82694 */
82695module.exports = {
82696  el: '#spark-app',
82697  /**
82698   * Holds the timestamp for the last time we updated the API token.
82699   */
82700  lastRefreshedApiTokenAt: null,
82701  /**
82702   * The application's data.
82703   */
82704  data: {
82705    user: Spark.state.user,
82706    teams: Spark.state.teams,
82707    currentTeam: Spark.state.currentTeam,
82708    loadingNotifications: false,
82709    notifications: null,
82710    supportForm: new SparkForm({
82711      from: '',
82712      subject: '',
82713      message: ''
82714    })
82715  },
82716  /**
82717   * The component has been created by Vue.
82718   */
82719  created: function created() {
82720    var self = this;
82721    if (Spark.userId) {
82722      this.loadDataForAuthenticatedUser();
82723    }
82724    if (Spark.userId && Spark.usesApi) {
82725      this.refreshApiTokenEveryFewMinutes();
82726    }
82727    Bus.$on('updateUser', function () {
82728      self.getUser();
82729    });
82730    Bus.$on('updateUserData', function () {
82731      self.loadDataForAuthenticatedUser();
82732    });
82733    Bus.$on('updateTeams', function () {
82734      self.getTeams();
82735    });
82736    Bus.$on('showNotifications', function () {
82737      $('#modal-notifications').modal('show');
82738      self.markNotificationsAsRead();
82739    });
82740    Bus.$on('showSupportForm', function () {
82741      if (self.user) {
82742        self.supportForm.from = self.user.email;
82743      }
82744      $('#modal-support').modal('show');
82745      setTimeout(function () {
82746        $('#support-subject').focus();
82747      }, 500);
82748    });
82749  },
82750  /**
82751   * Prepare the application.
82752   */
82753  mounted: function mounted() {
82754    this.whenReady();
82755  },
82756  methods: {
82757    /**
82758     * Finish bootstrapping the application.
82759     */
82760    whenReady: function whenReady() {
82761      //
82762    },
82763    /**
82764     * Load the data for an authenticated user.
82765     */
82766    loadDataForAuthenticatedUser: function loadDataForAuthenticatedUser() {
82767      this.getNotifications();
82768    },
82769    /**
82770     * Refresh the current API token every few minutes.
82771     */
82772    refreshApiTokenEveryFewMinutes: function refreshApiTokenEveryFewMinutes() {
82773      var _this = this;
82774      this.lastRefreshedApiTokenAt = moment();
82775      setInterval(function () {
82776        _this.refreshApiToken();
82777      }, 240000);
82778      setInterval(function () {
82779        if (moment().diff(_this.lastRefreshedApiTokenAt, 'minutes') >= 5) {
82780          _this.refreshApiToken();
82781        }
82782      }, 5000);
82783    },
82784    /**
82785     * Refresh the current API token.
82786     */
82787    refreshApiToken: function refreshApiToken() {
82788      this.lastRefreshedApiTokenAt = moment();
82789      axios.put('/spark/token');
82790    },
82791    /*
82792     * Get the current user of the application.
82793     */
82794    getUser: function getUser() {
82795      var _this2 = this;
82796      axios.get('/user/current').then(function (response) {
82797        _this2.$set(_this2, 'user', response.data);
82798      });
82799    },
82800    /**
82801     * Get the current team list.
82802     */
82803    getTeams: function getTeams() {
82804      var _this3 = this;
82805      axios.get('/settings/' + Spark.teamsPrefix).then(function (response) {
82806        _this3.$set(_this3, 'teams', response.data);
82807      });
82808    },
82809    /**
82810     * Get the current team.
82811     */
82812    getCurrentTeam: function getCurrentTeam() {
82813      var _this4 = this;
82814      axios.get("/settings/".concat(Spark.teamsPrefix, "/current")).then(function (response) {
82815        _this4.$set(_this4, 'currentTeam', response.data);
82816      })["catch"](function (response) {
82817        //
82818      });
82819    },
82820    /**
82821     * Get the application notifications.
82822     */
82823    getNotifications: function getNotifications() {
82824      var _this5 = this;
82825      this.loadingNotifications = true;
82826      axios.get('/notifications/recent').then(function (response) {
82827        _this5.$set(_this5, 'notifications', response.data);
82828        _this5.loadingNotifications = false;
82829      });
82830    },
82831    /**
82832     * Mark the current notifications as read.
82833     */
82834    markNotificationsAsRead: function markNotificationsAsRead() {
82835      if (!this.hasUnreadNotifications) {
82836        return;
82837      }
82838      axios.put('/notifications/read', {
82839        notifications: _.map(this.notifications.notifications, 'id')
82840      });
82841      _.each(this.notifications.notifications, function (notification) {
82842        notification.read = 1;
82843      });
82844    },
82845    /**
82846     * Send a customer support request.
82847     */
82848    sendSupportRequest: function sendSupportRequest() {
82849      var _this6 = this;
82850      Spark.post('/support/email', this.supportForm).then(function () {
82851        $('#modal-support').modal('hide');
82852        _this6.showSupportRequestSuccessMessage();
82853        _this6.supportForm.subject = '';
82854        _this6.supportForm.message = '';
82855      });
82856    },
82857    /**
82858     * Show an alert informing the user their support request was sent.
82859     */
82860    showSupportRequestSuccessMessage: function showSupportRequestSuccessMessage() {
82861      Swal.fire({
82862        title: __('Got It!'),
82863        text: __('We have received your message and will respond soon!'),
82864        icon: 'success',
82865        showConfirmButton: false,
82866        timer: 2000
82867      });
82868    }
82869  },
82870  computed: {
82871    /**
82872     * The number of unread announcements.
82873     */
82874    unreadAnnouncementsCount: function unreadAnnouncementsCount() {
82875      var _this7 = this;
82876      if (this.notifications && this.user) {
82877        if (this.notifications.announcements.length && !this.user.last_read_announcements_at) {
82878          return this.notifications.announcements.length;
82879        }
82880        return _.filter(this.notifications.announcements, function (announcement) {
82881          return moment.utc(_this7.user.last_read_announcements_at).isBefore(moment.utc(announcement.created_at));
82882        }).length;
82883      }
82884      return 0;
82885    },
82886    /**
82887     * The number of unread notifications.
82888     */
82889    unreadNotificationsCount: function unreadNotificationsCount() {
82890      if (this.notifications) {
82891        return _.filter(this.notifications.notifications, function (notification) {
82892          return !notification.read;
82893        }).length;
82894      }
82895      return 0;
82896    },
82897    /**
82898     * Determine if the user has any unread notifications.
82899     */
82900    hasUnreadAnnouncements: function hasUnreadAnnouncements() {
82901      return this.unreadAnnouncementsCount > 0;
82902    },
82903    /**
82904     * Determine if the user has any unread notifications.
82905     */
82906    hasUnreadNotifications: function hasUnreadNotifications() {
82907      return this.unreadNotificationsCount > 0;
82908    }
82909  }
82910};
82911
82912/***/ }),
82913
82914/***/ "./vendor/laravel/spark-aurelius/resources/assets/js/vue-bootstrap.js":
82915/*!****************************************************************************!*\
82916  !*** ./vendor/laravel/spark-aurelius/resources/assets/js/vue-bootstrap.js ***!
82917  \****************************************************************************/
82918/*! no static exports found */
82919/***/ (function(module, exports, __webpack_require__) {
82920
82921/*
82922 * Load Vue, the JavaScript framework used by Spark.
82923 */
82924if (window.Vue === undefined) {
82925  window.Vue = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.js");
82926  window.Bus = new Vue();
82927}
82928
82929/**
82930 * Load Vue Global Mixin.
82931 */
82932Vue.mixin(__webpack_require__(/*! ./mixin */ "./vendor/laravel/spark-aurelius/resources/assets/js/mixin.js"));
82933
82934/**
82935 * Define the Vue filters.
82936 */
82937__webpack_require__(/*! ./filters */ "./vendor/laravel/spark-aurelius/resources/assets/js/filters.js");
82938
82939/**
82940 * Load the Spark form utilities.
82941 */
82942__webpack_require__(/*! ./forms/bootstrap */ "./vendor/laravel/spark-aurelius/resources/assets/js/forms/bootstrap.js");
82943
82944/***/ })
82944,
82945
82946/***/ 0:
82947/*!*******************************************************************************************!*\
82948  !*** multi ./resources/js/app.js ./resources/sass/app.scss ./resources/sass/app-rtl.scss ***!
82949  \*******************************************************************************************/
82950/*! no static exports found */
82951/***/ (function(module, exports, __webpack_require__) {
82952
82953__webpack_require__(/*! /home/forge/app.sgwidget.com/resources/js/app.js */"./resources/js/app.js");
82954__webpack_require__(/*! /home/forge/app.sgwidget.com/resources/sass/app.scss */"./resources/sass/app.scss");
82955module.exports = __webpack_require__(/*! /home/forge/app.sgwidget.com/resources/sass/app-rtl.scss */"./resources/sass/app-rtl.scss");
82956
82957
82958/***/ })
82959
82960/******/ });

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.