PageSourceSearch

https://workingfilms.org/wp-content/themes/wf2-theme/dist/scripts/app.js?ver=1790274454

js workingfilms.org collected 2026-09-24 18:28:08 UTC 761,478 bytes, 19,798 lines download raw bytes

1/******/ (() => { // webpackBootstrap
2/******/ 	var __webpack_modules__ = ({
3
4/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=script&lang=js&":
5/*!**************************************************************************************************************************************************************************************************************************************************************************!*\
6  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=script&lang=js& ***!
7  \**************************************************************************************************************************************************************************************************************************************************************************/
8/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9
10"use strict";
11__webpack_require__.r(__webpack_exports__);
12/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
14/* harmony export */ });
15/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
16  props: ['slides'],
17  data: function data() {
18    return {
19      currentSlide: 0
20    };
21  },
22  mounted: function mounted() {
23    var _this = this;
24    setInterval(function () {
25      return _this.currentSlide = (_this.currentSlide + 1) % _this.slides.length;
26    }, 4000);
27  }
28});
29
30/***/ }),
31
32/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true&":
33/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
34  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true& ***!
35  \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
36/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37
38"use strict";
39__webpack_require__.r(__webpack_exports__);
40/* harmony export */ __webpack_require__.d(__webpack_exports__, {
41/* harmony export */   "render": () => (/* binding */ render),
42/* harmony export */   "staticRenderFns": () => (/* binding */ staticRenderFns)
43/* harmony export */ });
44var render = function render() {
45  var _vm = this,
46    _c = _vm._self._c;
47  return _vm.slides.length ? _c("div", {
48    staticClass: "background-slider"
49  }, _vm._l(_vm.slides, function (slide, key) {
50    return _c("div", {
51      "class": {
52        "slide-item": true,
53        showing: key === _vm.currentSlide
54      },
55      style: {
56        "background-image": "url('".concat(slide, "')")
57      }
58    });
59  }), 0) : _vm._e();
60};
61var staticRenderFns = [];
62render._withStripped = true;
63
64
65/***/ }),
66
67/***/ "./resources/assets/scripts/app.js":
68/*!*****************************************!*\
69  !*** ./resources/assets/scripts/app.js ***!
70  \*****************************************/
71/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
72
73"use strict";
74__webpack_require__.r(__webpack_exports__);
75/* harmony import */ var _autoload_bootstrap_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./autoload/_bootstrap.js */ "./resources/assets/scripts/autoload/_bootstrap.js");
76/* harmony import */ var _utils_Router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/Router */ "./resources/assets/scripts/utils/Router.js");
77/* harmony import */ var _routes_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./routes/common */ "./resources/assets/scripts/routes/common.js");
78/* harmony import */ var _routes_home__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./routes/home */ "./resources/assets/scripts/routes/home.js");
79/* harmony import */ var _routes_about__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./routes/about */ "./resources/assets/scripts/routes/about.js");
80/* harmony import */ var _routes_blog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./routes/blog */ "./resources/assets/scripts/routes/blog.js");
81/* harmony import */ var _routes_single__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./routes/single */ "./resources/assets/scripts/routes/single.js");
82/* harmony import */ var _routes_projects__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./routes/projects */ "./resources/assets/scripts/routes/projects.js");
83// import external dependencies
84
85// Import everything from autoload
86
87
88// import local dependencies
89
90
91
92
93
94
95
96document.addEventListener('DOMContentLoaded', function load() {
97  if (!window.jQuery) return setTimeout(load, 50);
98  var jQuery = __webpack_require__(/*! jquery */ "jquery");
99
100  /** Populate Router instance with DOM routes */
101  var routes = new _utils_Router__WEBPACK_IMPORTED_MODULE_1__["default"]({
102    // All pages
103    common: _routes_common__WEBPACK_IMPORTED_MODULE_2__["default"],
104    // Home page
105    home: _routes_home__WEBPACK_IMPORTED_MODULE_3__["default"],
106    // About page.
107    about: _routes_about__WEBPACK_IMPORTED_MODULE_4__["default"],
108    // Home page.
109    blog: _routes_blog__WEBPACK_IMPORTED_MODULE_5__["default"],
110    single: _routes_single__WEBPACK_IMPORTED_MODULE_6__["default"],
111    projects: _routes_projects__WEBPACK_IMPORTED_MODULE_7__["default"]
112  });
113
114  // Load Events
115  jQuery(function ($) {
116    return routes.loadEvents($);
117  });
118  var Parallax = __webpack_require__(/*! parallax-js */ "./node_modules/parallax-js/dist/parallax.js");
119  jQuery(function ($) {
120    var scene = document.getElementById("scene");
121    var scene2 = document.getElementById("scene2");
122    var scene3 = document.getElementById("scene3");
123    if (scene) {
124      var parallaxInstance = new Parallax(scene, {
125        onReady: myAwesomeCallback
126      });
127      var parallaxInstance2 = new Parallax(scene2, {
128        onReady: myAwesomeCallback
129      });
130    }
131    if (scene3) {
132      var parallaxInstance3 = new Parallax(scene3, {
133        calibrateX: true,
134        calibrateY: true,
135        onReady: myAwesomeCallback
136      });
137    }
138    function myAwesomeCallback() {
139      // console.log('myAwesomeCallback');
140      $("#spinnerWrap").delay(2000).fadeOut(1200);
141    }
142  });
143}, false);
144
145/***/ }),
146
147/***/ "./resources/assets/scripts/autoload/_bootstrap.js":
148/*!*********************************************************!*\
149  !*** ./resources/assets/scripts/autoload/_bootstrap.js ***!
150  \*********************************************************/
151/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
152
153"use strict";
154__webpack_require__.r(__webpack_exports__);
155/* harmony import */ var bootstrap_js_dist_modal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap/js/dist/modal */ "./node_modules/bootstrap/js/dist/modal.js");
156/* harmony import */ var bootstrap_js_dist_modal__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(bootstrap_js_dist_modal__WEBPACK_IMPORTED_MODULE_0__);
157// `sage preset` installed this file automatically.
158// Running `sage preset` again could result in automatic deletion of this file.
159// Because of this, we do not recommend editing this file.
160
161
162// import 'bootstrap/js/dist/alert';
163// import 'bootstrap/js/dist/tab';
164// import 'bootstrap/js/dist/util';
165window.Vue = (__webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js")["default"]);
166
167/**
168 * The following block of code may be used to automatically register your
169 * Vue components. It will recursively scan this directory for the Vue
170 * components and automatically register them with their "basename".
171 *
172 * Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
173 */
174
175var files = __webpack_require__("./resources/assets/scripts/components sync recursive \\.vue$/");
176files.keys().map(function (key) {
177  return Vue.component(key.split("/").pop().split(".")[0], files(key)["default"]);
178});
179
180/**
181 * Next, we will create a fresh Vue application instance and attach it to
182 * the page. Then, you may begin adding components to this application
183 * or customize the JavaScript scaffolding to fit your unique needs.
184 */
185
186new Vue({
187  el: "#app"
188});
189
190/***/ }),
191
192/***/ "./resources/assets/scripts/routes/about.js":
193/*!**************************************************!*\
194  !*** ./resources/assets/scripts/routes/about.js ***!
195  \**************************************************/
196/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
197
198"use strict";
199__webpack_require__.r(__webpack_exports__);
200/* harmony export */ __webpack_require__.d(__webpack_exports__, {
201/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
202/* harmony export */ });
203/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
204  init: function init() {
205    // JavaScript to be fired on the about page
206  },
207  finalize: function finalize($) {
208    // JavaScript to be fired on the about page, after the init JS
209    // console.log('about');
210    var cell = $(".card");
211    $(cell).each(function () {
212      $(this).children(".card__inner").height($(this).height());
213    });
214    //open and close card when clicked on card
215    cell.find(".js-expander").click(function () {
216      var thisCell = $(this).closest(".card"),
217        wrappCells = $(this).closest(".cards"),
218        naerCells = wrappCells.children(".card");
219      if (thisCell.hasClass("is-collapsed")) {
220        naerCells.not(thisCell).removeClass("is-expanded").addClass("is-collapsed").addClass("is-inactive");
221        thisCell.removeClass("is-collapsed").addClass("is-expanded").removeClass("is-inactive");
222        thisCell.children(".card__expander").css("transform", "translateX(" + (wrappCells.offset().left + parseInt(wrappCells.css("paddingLeft"), 10) - thisCell.offset().left) + "px)");
223      } else {
224        thisCell.removeClass("is-expanded").addClass("is-collapsed");
225        naerCells.not(thisCell).removeClass("is-expanded").addClass("is-collapsed").removeClass("is-inactive");
226      }
227    });
228
229    //close card when click on cross
230    cell.find(".js-collapser").click(function () {
231      var thisCell = $(this).closest(".card"),
232        wrappCells = $(this).closest(".cards"),
233        naerCells = wrappCells.children(".card");
234      thisCell.removeClass("is-expanded").addClass("is-collapsed");
235      naerCells.not(thisCell).removeClass("is-expanded").addClass("is-collapsed").removeClass("is-inactive");
236    });
237  }
238});
239
240/***/ }),
241
242/***/ "./resources/assets/scripts/routes/blog.js":
243/*!*************************************************!*\
244  !*** ./resources/assets/scripts/routes/blog.js ***!
245  \*************************************************/
246/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
247
248"use strict";
249__webpack_require__.r(__webpack_exports__);
250/* harmony export */ __webpack_require__.d(__webpack_exports__, {
251/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
252/* harmony export */ });
253/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
254  init: function init($) {
255    // JavaScript to be fired on the blog page
256    var filterBar = document.querySelector('.filter');
257    var headerBar = document.querySelector('#headerBar');
258    var urlParams = new URLSearchParams(window.location.search);
259    var cat = urlParams.get('cat');
260    var search = urlParams.get('search');
261    if (filterBar && (cat || search) && headerBar) {
262      var elementPosition = filterBar.offsetTop;
263      var offset = document.querySelector('#headerBar').getBoundingClientRect().top + document.querySelector('#headerBar').getBoundingClientRect().height;
264      window.scrollTo({
265        top: elementPosition - offset,
266        behavior: 'smooth'
267      });
268    }
269  },
270  finalize: function finalize($) {
271    // JavaScript to be fired on the blog page, after the init JS
272  }
273});
274
275/***/ }),
276
277/***/ "./resources/assets/scripts/routes/common.js":
278/*!***************************************************!*\
279  !*** ./resources/assets/scripts/routes/common.js ***!
280  \***************************************************/
281/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
282
283"use strict";
284__webpack_require__.r(__webpack_exports__);
285/* harmony export */ __webpack_require__.d(__webpack_exports__, {
286/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
287/* harmony export */ });
288/* harmony import */ var _utils_adjustMenus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/adjustMenus */ "./resources/assets/scripts/utils/adjustMenus.js");
289/* harmony import */ var throttle_debounce__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! throttle-debounce */ "./node_modules/throttle-debounce/index.umd.js");
290/* harmony import */ var throttle_debounce__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(throttle_debounce__WEBPACK_IMPORTED_MODULE_5__);
291/* harmony import */ var _utils_adjustStickyHeader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/adjustStickyHeader */ "./resources/assets/scripts/utils/adjustStickyHeader.js");
292/* harmony import */ var _utils_animate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/animate */ "./resources/assets/scripts/utils/animate.js");
293/* harmony import */ var owl_carousel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! owl.carousel */ "./node_modules/owl.carousel/dist/owl.carousel.js");
294/* harmony import */ var owl_carousel__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(owl_carousel__WEBPACK_IMPORTED_MODULE_3__);
295/* harmony import */ var venobox__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! venobox */ "./node_modules/venobox/dist/venobox.min.js");
296/* harmony import */ var venobox__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(venobox__WEBPACK_IMPORTED_MODULE_4__);
297
298
299
300
301
302
303// require('venobox');
304
305/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
306  init: function init($, classRoutes) {
307    // animateOnScroll($('body:not(.home) [data-animate]'));
308
309    $(".menu-trigger-button").on("click", function () {
310      return $("body").toggleClass("menu-open");
311    });
312    $(".category-dynamic-selector").on("change", function (event) {
313      // const data = $(event.target).find(':selected').data();
314
315      window.location.href = "?cat=".concat(event.target.value);
316    });
317    $(".main-content a").attr("target", "_blank");
318    var adjustElements = (0,throttle_debounce__WEBPACK_IMPORTED_MODULE_5__.throttle)(100, function () {
319      (0,_utils_adjustMenus__WEBPACK_IMPORTED_MODULE_0__["default"])();
320      (0,_utils_adjustStickyHeader__WEBPACK_IMPORTED_MODULE_1__["default"])();
321      if (classRoutes.indexOf("pageTemplateHome") === -1) {}
322    });
323    $(window).on("resize", adjustElements).trigger("resize");
324    $(window).on("scroll", (0,throttle_debounce__WEBPACK_IMPORTED_MODULE_5__.throttle)(10, function () {
325      if (!$("body").hasClass("scroll") && $(window).scrollTop() > 50) {
326        $("body").addClass("scroll");
327      } else if ($("body").hasClass("scroll") && $(window).scrollTop() <= 50) {
328        $("body").removeClass("scroll");
329      }
330    })).trigger("scroll");
331    $(document).ready(function () {
332      var owl1 = $(".project-carusel.owl-carousel, .feature-projects .owl-carousel"),
333        owl2 = $(".wrapp-banner.owl-carousel");
334      owl1.owlCarousel({
335        loop: true,
336        autoplay: true,
337        dots: true,
338        autoplayTimeout: 5000,
339        autoplayHoverPause: true,
340        responsiveClass: true,
341        mouseDrag: false,
342        responsive: {
343          0: {
344            items: 1
345          },
346          700: {
347            items: 3,
348            onChanged: callback,
349            onInitialized: callback
350          }
351        }
352      });
353      owl2.owlCarousel({
354        loop: true,
355        items: 1,
356        autoplay: true,
357        autoplayTimeout: 8000,
358        autoplayHoverPause: true,
359        mouseDrag: false,
360        onInitialized: showTitle
361      });
362      function showTitle(event) {
363        (0,_utils_animate__WEBPACK_IMPORTED_MODULE_2__.animate)($(".wrapp-banner [data-animate]"));
364      }
365      function callback(event) {
366        $(".project-carusel .owl-item").removeClass("middle").removeClass("prev-to-mid").removeClass("next-to-mid");
367        setTimeout(function () {
368          $(".project-carusel .active").eq(1).addClass("middle");
369          $(".project-carusel .active").eq(0).addClass("prev-to-mid");
370          $(".project-carusel .active").eq(2).addClass("next-to-mid");
371        }, 1);
372      }
373    });
374  },
375  finalize: function finalize($) {
376    var isIOS = /iphone|ipad/gi.test(navigator.appVersion);
377    var click = isIOS ? "touchstart" : "click";
378    setTimeout(function () {
379      $("body").addClass("loaded");
380      (0,_utils_animate__WEBPACK_IMPORTED_MODULE_2__.animateOnScroll)($('[data-animate]:not([data-animate*="customLine"])'));
381      (0,_utils_animate__WEBPACK_IMPORTED_MODULE_2__.animate)($('[data-animate*="customLine"]'));
382      $("#ic_signupform .submit-container > input").val("GO");
383      // $("#ic_signupform .formEl.fieldtype-input.required input").attr("placeholder", "Enter your email to subscribe")
384    }, 1000);
385    $(".scroll-arrow > .fa-angle-double-down").click(function (e) {
386      e.preventDefault();
387      e.stopPropagation();
388      window.scrollBy({
389        top: window.innerHeight - 150,
390        behavior: "smooth"
391      });
392    });
393    $(".lines-button").on(click, function (e) {
394      e.preventDefault();
395      $(this).toggleClass("x close");
396      $("#top-menu").toggleClass("open");
397    });
398    $(".open-in-popup").click(function (event) {
399      event.preventDefault();
400      event.stopPropagation();
401      var $currentTarget = $(event.currentTarget);
402      var popupDataAttrs = $currentTarget.data();
403      var $slide = $currentTarget.closest(".post-item");
404      var $modal = $(popupDataAttrs.target);
405      $(popupDataAttrs.target).modal();
406      var categoryHTML = $slide.find(".post-category").html();
407      var title = $slide.find(".post-title").html();
408      var subtitle = $slide.find(".post-subtitle").html();
409      var details = $slide.find(".post-full-details").html();
410      var image = $slide.find(".post-image-wrapp").html();
411      var $modalBody = $modal.find(".modal-body");
412      $modalBody.find(".image").html(image);
413      $modalBody.find(".title").html(title);
414      $modalBody.find(".subtitle").html(subtitle);
415      $modalBody.find(".details").html(details);
416      $modal.find(".modal-header").find(".modal-title").html(categoryHTML);
417      $modal.modal("handleUpdate");
418    });
419    new (venobox__WEBPACK_IMPORTED_MODULE_4___default())({
420      selector: ".venobox",
421      autoplay: true
422    });
423  }
424});
425
426/***/ }),
427
428/***/ "./resources/assets/scripts/routes/home.js":
429/*!*************************************************!*\
430  !*** ./resources/assets/scripts/routes/home.js ***!
431  \*************************************************/
432/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
433
434"use strict";
435__webpack_require__.r(__webpack_exports__);
436/* harmony export */ __webpack_require__.d(__webpack_exports__, {
437/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
438/* harmony export */ });
439// import '../util/scrollToNextSection';
440// import {animateOnScroll, animate} from "../utils/animate";
441// import adjustStickyHeader from "../util/adjustStickyHeader";
442
443/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
444  init: function init($) {
445    // JavaScript to be fired on the home page
446  },
447  finalize: function finalize($) {
448    $(document);
449  }
450});
451
452/***/ }),
453
454/***/ "./resources/assets/scripts/routes/projects.js":
455/*!*****************************************************!*\
456  !*** ./resources/assets/scripts/routes/projects.js ***!
457  \*****************************************************/
458/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
459
460"use strict";
461__webpack_require__.r(__webpack_exports__);
462/* harmony export */ __webpack_require__.d(__webpack_exports__, {
463/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
464/* harmony export */ });
465/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
466  init: function init() {
467    // JavaScript to be fired on the about page
468  },
469  finalize: function finalize($) {
470    // JavaScript to be fired on the about page, after the init JS
471    $("#project-film-chooser").on('change', function (event) {
472      location.href = event.currentTarget.value;
473    });
474  }
475});
476
477/***/ }),
478
479/***/ "./resources/assets/scripts/routes/single.js":
480/*!***************************************************!*\
481  !*** ./resources/assets/scripts/routes/single.js ***!
482  \***************************************************/
483/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
484
485"use strict";
486__webpack_require__.r(__webpack_exports__);
487/* harmony export */ __webpack_require__.d(__webpack_exports__, {
488/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
489/* harmony export */ });
490/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
491  init: function init($) {
492    // JavaScript to be fired on the blog page
493  },
494  finalize: function finalize($) {
495    // JavaScript to be fired on the blog page, after the init JS
496    var AddToAnyBlock = $('.addtoany_share_save_container.addtoany_content');
497    if (AddToAnyBlock.length) {
498      $('.share-wrap').html(AddToAnyBlock);
499    }
500  }
501});
502
503/***/ }),
504
505/***/ "./resources/assets/scripts/utils/Router.js":
506/*!**************************************************!*\
507  !*** ./resources/assets/scripts/utils/Router.js ***!
508  \**************************************************/
509/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
510
511"use strict";
512__webpack_require__.r(__webpack_exports__);
513/* harmony export */ __webpack_require__.d(__webpack_exports__, {
514/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
515/* harmony export */ });
516/* harmony import */ var _camelCase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./camelCase */ "./resources/assets/scripts/utils/camelCase.js");
517function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
518function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
519function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
520function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
521function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
522function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
523
524
525/**
526 * DOM-based Routing
527 *
528 * Based on {@link http://goo.gl/EUTi53|Markup-based Unobtrusive Comprehensive DOM-ready Execution} by Paul Irish
529 *
530 * The routing fires all common scripts, followed by the page specific scripts.
531 * Add additional events for more control over timing e.g. a finalize event
532 */
533var Router = /*#__PURE__*/function () {
534  /**
535   * Create a new Router
536   * @param {Object} routes
537   */
538  function Router(routes) {
539    _classCallCheck(this, Router);
540    this.routes = routes;
541  }
542
543  /**
544   * Fire Router events
545   * @param {string} route DOM-based route derived from body classes (`<body class="...">`)
546   * @param {string} [event] Events on the route. By default, `init` and `finalize` events are called.
547   * @param {string} [arg] Any custom argument to be passed to the event.
548   */
549  _createClass(Router, [{
550    key: "fire",
551    value: function fire(route) {
552      var event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'init';
553      var arg = arguments.length > 2 ? arguments[2] : undefined;
554      var classRoutes = arguments.length > 3 ? arguments[3] : undefined;
555      document.dispatchEvent(new CustomEvent('routed', {
556        bubbles: true,
557        detail: {
558          route: route,
559          fn: event
560        }
561      }));
562      var fire = route !== '' && this.routes[route] && typeof this.routes[route][event] === 'function';
563      if (fire) {
564        this.routes[route][event](arg, classRoutes);
565      }
566    }
567
568    /**
569     * Automatically load and fire Router events
570     *
571     * Events are fired in the following order:
572     *  * common init
573     *  * page-specific init
574     *  * page-specific finalize
575     *  * common finalize
576     */
577  }, {
578    key: "loadEvents",
579    value: function loadEvents(arg) {
580      var _this = this;
581      var classRoutes = document.body.className.toLowerCase().replace(/-/g, '_').split(/\s+/).map(_camelCase__WEBPACK_IMPORTED_MODULE_0__["default"]);
582
583      // Fire common init JS
584      this.fire('common', 'init', arg, classRoutes);
585
586      // Fire page-specific init JS, and then finalize JS
587      classRoutes.forEach(function (className) {
588        _this.fire(className, 'init', arg, classRoutes);
589        _this.fire(className, 'finalize', arg, classRoutes);
590      });
591
592      // Fire common finalize JS
593      this.fire('common', 'finalize', arg, classRoutes);
594    }
595  }]);
596  return Router;
597}();
598/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Router);
599
600/***/ }),
601
602/***/ "./resources/assets/scripts/utils/adjustMenus.js":
603/*!*******************************************************!*\
604  !*** ./resources/assets/scripts/utils/adjustMenus.js ***!
605  \*******************************************************/
606/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
607
608"use strict";
609__webpack_require__.r(__webpack_exports__);
610/* harmony export */ __webpack_require__.d(__webpack_exports__, {
611/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
612/* harmony export */ });
613/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery");
614/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);
615
616/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function () {
617  var $ = (jquery__WEBPACK_IMPORTED_MODULE_0___default());
618  var ddMenu = $('.menu-dropdown').not('#top-menu');
619  // 1st level sub-menus
620  ddMenu.find('>.menu-item').each(function () {
621    if ($(this).hasClass('menu-item-has-children')) {
622      var _1stLevelSubMenu = $(this).find('>.sub-menu');
623      if (_1stLevelSubMenu.length) {
624        var _1stLevelSubMenuOffset = _1stLevelSubMenu.offset().left + (_1stLevelSubMenu.outerWidth(true) + 5);
625        if (_1stLevelSubMenuOffset > $(window).width() && !_1stLevelSubMenu.attr('style')) {
626          _1stLevelSubMenu.css('left', $(window).width() - _1stLevelSubMenuOffset);
627        }
628      }
629    }
630  });
631
632  // 2nd+ level sub-menus
633  ddMenu.find('>.menu-item>.sub-menu .sub-menu').each(function () {
634    var _2ndLevelSubMenu = $(this);
635    var parentSubmenu = _2ndLevelSubMenu.parents('.sub-menu');
636    if (parentSubmenu.hasClass('sub-menus-on-left')) return;
637    var _2ndLevelSubMenuOffset = _2ndLevelSubMenu.offset().left + _2ndLevelSubMenu.outerWidth(true);
638    if (_2ndLevelSubMenuOffset > $(window).width()) {
639      parentSubmenu.addClass('sub-menus-on-left');
640    }
641  });
642});
643
644/***/ }),
645
646/***/ "./resources/assets/scripts/utils/adjustStickyHeader.js":
647/*!**************************************************************!*\
648  !*** ./resources/assets/scripts/utils/adjustStickyHeader.js ***!
649  \**************************************************************/
650/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
651
652"use strict";
653__webpack_require__.r(__webpack_exports__);
654/* harmony export */ __webpack_require__.d(__webpack_exports__, {
655/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
656/* harmony export */ });
657/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery");
658/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);
659
660/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (callback) {
661  var $ = (jquery__WEBPACK_IMPORTED_MODULE_0___default());
662  var stickyHeader = $(".sticky-header");
663  if (stickyHeader.length) {
664    //console.log("");
665    $(".main-container").css("padding-top", stickyHeader.outerHeight(true));
666    if (typeof callback == "function") {
667      callback(stickyHeader.outerHeight(true));
668    }
669  }
670});
671
672/***/ }),
673
674/***/ "./resources/assets/scripts/utils/animate.js":
675/*!***************************************************!*\
676  !*** ./resources/assets/scripts/utils/animate.js ***!
677  \***************************************************/
678/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
679
680"use strict";
681__webpack_require__.r(__webpack_exports__);
682/* harmony export */ __webpack_require__.d(__webpack_exports__, {
683/* harmony export */   "animate": () => (/* binding */ animate),
684/* harmony export */   "animateOnScroll": () => (/* binding */ animateOnScroll)
685/* harmony export */ });
686/* harmony import */ var scrollmonitor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! scrollmonitor */ "./node_modules/scrollmonitor/dist/module/index.js");
687/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jquery */ "jquery");
688/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_1__);
689/* harmony 
689import */ var _pseudoStyle_jquery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./pseudoStyle.jquery */ "./resources/assets/scripts/utils/pseudoStyle.jquery.js");
690/* harmony import */ var _pseudoStyle_jquery__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_pseudoStyle_jquery__WEBPACK_IMPORTED_MODULE_2__);
691
692
693
694var $ = (jquery__WEBPACK_IMPORTED_MODULE_1___default());
695var isAnyPartInViewport = function isAnyPartInViewport(element) {
696  var top = element.offsetTop;
697  var left = element.offsetLeft;
698  var width = element.offsetWidth;
699  var height = element.offsetHeight;
700  while (element.offsetParent) {
701    element = element.offsetParent;
702    top += element.offsetTop;
703    left += element.offsetLeft;
704  }
705  return top < window.pageYOffset + window.innerHeight && left < window.pageXOffset + window.innerWidth && top + height > window.pageYOffset && left + width > window.pageXOffset;
706};
707var parseAnimation = function parseAnimation($element) {
708  var params = $element.data("animate") || ":,";
709  var animation = params.split(":")[0] || "";
710  var dd = params.split(":")[1] || "";
711  var duration = dd.split(",")[0] || null;
712  var delay = dd.split(",")[1] || null;
713  var once = !!(dd.split(",")[2] || false);
714  return {
715    animation: animation,
716    duration: duration,
717    delay: delay,
718    once: once
719  };
720};
721var toMs = function toMs(s) {
722  return parseFloat(s) * (/\ds$/.test(s) ? 1000 : 1);
723};
724var animateElement = function animateElement($element, once, instant) {
725  if ($element.hasClass("animation-end")) return;
726  var _parseAnimation = parseAnimation($element),
727    animation = _parseAnimation.animation,
728    duration = _parseAnimation.duration,
729    delay = _parseAnimation.delay,
730    _once = _parseAnimation._once;
731  delay = instant ? false : delay;
732  var isPseudo = animation.match(/pseudo/i);
733  var cssObj = {};
734  if (duration) cssObj["animation-duration"] = duration;
735  if (delay) cssObj["animation-delay"] = delay;
736  if (isPseudo) {
737    cssObj["animation-fill-mode"] = "both";
738    $element.addClass("animated ".concat(animation));
739    $element.psBeforeAfter(cssObj);
740  } else {
741    cssObj["animation-fill-mode"] = "both";
742    $element.addClass("animated ".concat(animation));
743    $element.css(cssObj);
744  }
745  once = _once || once;
746  if (duration || delay) {
747    var off = toMs(duration);
748    off += delay ? toMs(delay) : 0;
749    setTimeout(function ($element, animation) {
750      return function () {
751        if (!isPseudo) {
752          $element.css({
753            "animation-duration": "",
754            "animation-delay": ""
755          }); //.removeClass(`${animation}`);
756
757          if (once === true) {
758            $element.removeAttr("data-animate").removeClass("animated").addClass("animation-end");
759            //   .removeClass(`${animation}`);
760          }
761        }
762      };
763    }($element, animation), off + 10);
764  }
765};
766var makeWatcherOrAnimate = function makeWatcherOrAnimate(element, once) {
767  once = once === undefined ? true : once;
768  var watcher = scrollmonitor__WEBPACK_IMPORTED_MODULE_0__["default"].create(element);
769  if (isAnyPartInViewport(element)) {
770    animateElement($(element), once);
771  }
772  watcher.stateChange(function () {
773    var $element = $(this.watchItem);
774    var instant = true;
775    if (this.isInViewport) {
776      animateElement($element, once, instant);
777    } else if (this.isAboveViewport || this.isBelowViewport) {
778      // if (!once) {
779      //     $element.removeClass(`animated ${animation}`)
780      //         .removeAttr('style')
781      //         .removeAttr('data-animate');
782      // }
783    }
784  });
785  return watcher;
786};
787var animateOnScroll = function animateOnScroll($elements) {
788  $elements.each(function () {
789    makeWatcherOrAnimate($(this)[0]);
790  });
791};
792var animate = function animate($elements, once) {
793  $elements.each(function () {
794    animateElement($(this), once);
795  });
796};
797
798
799/***/ }),
800
801/***/ "./resources/assets/scripts/utils/camelCase.js":
802/*!*****************************************************!*\
803  !*** ./resources/assets/scripts/utils/camelCase.js ***!
804  \*****************************************************/
805/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
806
807"use strict";
808__webpack_require__.r(__webpack_exports__);
809/* harmony export */ __webpack_require__.d(__webpack_exports__, {
810/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
811/* harmony export */ });
812/**
813 * the most terrible camelizer on the internet, guaranteed!
814 * @param {string} str String that isn't camel-case, e.g., CAMeL_CaSEiS-harD
815 * @return {string} String converted to camel-case, e.g., camelCaseIsHard
816 */
817/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (str) {
818  return "".concat(str.charAt(0).toLowerCase()).concat(str.replace(/[\W_]/g, '|').split('|').map(function (part) {
819    return "".concat(part.charAt(0).toUpperCase()).concat(part.slice(1));
820  }).join('').slice(1));
821});
822
823/***/ }),
824
825/***/ "./resources/assets/scripts/utils/pseudoStyle.jquery.js":
826/*!**************************************************************!*\
827  !*** ./resources/assets/scripts/utils/pseudoStyle.jquery.js ***!
828  \**************************************************************/
829/***/ ((module, exports, __webpack_require__) => {
830
831var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
832function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
833function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
834function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
835function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
836function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
837function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
838(function (factory) {
839  if (true) {
840    // AMD
841    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "jquery")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
842		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
843		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
844		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
845  } else {}
846})(function ($) {
847  var UID = {
848    _current: 0,
849    getNew: function getNew() {
850      this._current++;
851      return this._current;
852    }
853  };
854  var pseudoStyle = function pseudoStyle(element, pseudo, cssPropsObject, options) {
855    var settings = $.extend({
856      // append : false
857    }, options);
858    if (Object.keys(cssPropsObject).length === 0 && cssPropsObject.constructor === Object) return this;
859    var _this = element;
860    var pseudoId = _this.getAttribute('data-pseudo-id') || UID.getNew();
861    var _sheetId = "pseudoStyles".concat(pseudoId);
862    var _head = document.head || document.getElementsByTagName('head')[0];
863    var _sheet = document.getElementById(_sheetId) || document.createElement('style');
864    _sheet.id = _sheetId;
865    var selector = "[data-pseudo-id=\"".concat(pseudoId, "\"]");
866    _this.setAttribute('data-pseudo-id', pseudoId);
867    if (pseudo === 'both') {
868      _sheet.innerHTML = "".concat(selector, ":before,").concat(selector, ":after{");
869    } else {
870      _sheet.innerHTML = "".concat(selector, ":").concat(pseudo, "{");
871    }
872    var hasContent = false;
873    for (var _i = 0, _Object$entries = Object.entries(cssPropsObject); _i < _Object$entries.length; _i++) {
874      var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
875        prop = _Object$entries$_i[0],
876        value = _Object$entries$_i[1];
877      _sheet.innerHTML += "".concat(prop, ":").concat(value, ";");
878      if (prop == 'content') {
879        hasContent = true;
880      }
881    }
882    if (!hasContent) {
883      _sheet.innerHTML += "content:'';";
884    }
885    _sheet.innerHTML += "}";
886    _head.appendChild(_sheet);
887    return this;
888  };
889  $.fn.psBeforeAfter = function (cssPropsObject, options) {
890    return this.each(function () {
891      pseudoStyle(this, 'both', cssPropsObject, options);
892    });
893    return this;
894  };
895  $.fn.psBefore = function (cssPropsObject, options) {
896    return this.each(function () {
897      pseudoStyle(this, 'before', cssPropsObject, options);
898    });
899    return this;
900  };
901  $.fn.psAfter = function (cssPropsObject, options) {
902    return this.each(function () {
903      pseudoStyle(this, 'after', cssPropsObject, options);
904    });
905    return this;
906  };
907});
908
909/***/ }),
910
911/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLo
911ader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true&":
912/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
913  !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true& ***!
914  \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
915/***/ ((module, __webpack_exports__, __webpack_require__) => {
916
917"use strict";
918__webpack_require__.r(__webpack_exports__);
919/* harmony export */ __webpack_require__.d(__webpack_exports__, {
920/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
921/* harmony export */ });
922/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js");
923/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
924// Imports
925
926var ___CSS_LOADER_EXPORT___ = _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
927// Module
928___CSS_LOADER_EXPORT___.push([module.id, ".background-slider .slide-item[data-v-e19de8a6], .background-slider[data-v-e19de8a6]:after, .background-slider[data-v-e19de8a6] {\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  position: absolute;\n}\n.background-slider[data-v-e19de8a6] {\n  z-index: 0;\n}\n.background-slider[data-v-e19de8a6]:after {\n  content: \"\";\n  z-index: -1;\n  background-color: #000;\n}\n.background-slider .slide-item[data-v-e19de8a6] {\n  opacity: 0;\n  z-index: 0;\n  transition: opacity 1.5s;\n  background-size: cover;\n  background-repeat: no-repeat;\n  background-position: 50% 50%;\n}\n.background-slider .slide-item.showing[data-v-e19de8a6] {\n  opacity: 0.7;\n  z-index: 1;\n}", ""]);
929// Exports
930/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
931
932
933/***/ }),
934
935/***/ "./resources/assets/styles/app.scss":
936/*!******************************************!*\
937  !*** ./resources/assets/styles/app.scss ***!
938  \******************************************/
939/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
940
941"use strict";
942__webpack_require__.r(__webpack_exports__);
943// extracted by mini-css-extract-plugin
944
945
946/***/ }),
947
948/***/ "./resources/assets/styles/editor-styles.scss":
949/*!****************************************************!*\
950  !*** ./resources/assets/styles/editor-styles.scss ***!
951  \****************************************************/
952/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
953
954"use strict";
955__webpack_require__.r(__webpack_exports__);
956// extracted by mini-css-extract-plugin
957
958
959/***/ }),
960
961/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true&":
962/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
963  !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true& ***!
964  \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
965/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
966
967"use strict";
968__webpack_require__.r(__webpack_exports__);
969/* harmony export */ __webpack_require__.d(__webpack_exports__, {
970/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
971/* harmony export */ });
972/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
973/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
974/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_13_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_13_use_3_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_style_index_0_id_e19de8a6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!../../../../node_modules/vue-loader/lib/loaders/stylePostLo
974ader.js!../../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!../../../../node_modules/webpack-import-glob-loader/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true& */ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true&");
975
976            
977
978var options = {};
979
980options.insert = "head";
981options.singleton = false;
982
983var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_13_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_13_use_3_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_style_index_0_id_e19de8a6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_1__["default"], options);
984
985
986
987/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_13_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_13_use_3_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_style_index_0_id_e19de8a6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
988
989/***/ }),
990
vendor: 7,200 bytes, lines 991-1269
991/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
992/*!****************************************************************************!*\
993  !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
994  \****************************************************************************/
995/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
996
997"use strict";
998
999
1000var isOldIE = function isOldIE() {
1001  var memo;
1002  return function memorize() {
1003    if (typeof memo === 'undefined') {
1004      // Test for IE <= 9 as proposed by Browserhacks
1005      // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
1006      // Tests for existence of standard globals is to allow style-loader
1007      // to operate correctly into non-standard environments
1008      // @see https://github.com/webpack-contrib/style-loader/issues/177
1009      memo = Boolean(window && document && document.all && !window.atob);
1010    }
1011
1012    return memo;
1013  };
1014}();
1015
1016var getTarget = function getTarget() {
1017  var memo = {};
1018  return function memorize(target) {
1019    if (typeof memo[target] === 'undefined') {
1020      var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself
1021
1022      if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
1023        try {
1024          // This will throw an exception if access to iframe is blocked
1025          // due to cross-origin restrictions
1026          styleTarget = styleTarget.contentDocument.head;
1027        } catch (e) {
1028          // istanbul ignore next
1029          styleTarget = null;
1030        }
1031      }
1032
1033      memo[target] = styleTarget;
1034    }
1035
1036    return memo[target];
1037  };
1038}();
1039
1040var stylesInDom = [];
1041
1042function getIndexByIdentifier(identifier) {
1043  var result = -1;
1044
1045  for (var i = 0; i < stylesInDom.length; i++) {
1046    if (stylesInDom[i].identifier === identifier) {
1047      result = i;
1048      break;
1049    }
1050  }
1051
1052  return result;
1053}
1054
1055function modulesToDom(list, options) {
1056  var idCountMap = {};
1057  var identifiers = [];
1058
1059  for (var i = 0; i < list.length; i++) {
1060    var item = list[i];
1061    var id = options.base ? item[0] + options.base : item[0];
1062    var count = idCountMap[id] || 0;
1063    var identifier = "".concat(id, " ").concat(count);
1064    idCountMap[id] = count + 1;
1065    var index = getIndexByIdentifier(identifier);
1066    var obj = {
1067      css: item[1],
1068      media: item[2],
1069      sourceMap: item[3]
1070    };
1071
1072    if (index !== -1) {
1073      stylesInDom[index].references++;
1074      stylesInDom[index].updater(obj);
1075    } else {
1076      stylesInDom.push({
1077        identifier: identifier,
1078        updater: addStyle(obj, options),
1079        references: 1
1080      });
1081    }
1082
1083    identifiers.push(identifier);
1084  }
1085
1086  return identifiers;
1087}
1088
1089function insertStyleElement(options) {
1090  var style = document.createElement('style');
1091  var attributes = options.attributes || {};
1092
1093  if (typeof attributes.nonce === 'undefined') {
1094    var nonce =  true ? __webpack_require__.nc : 0;
1095
1096    if (nonce) {
1097      attributes.nonce = nonce;
1098    }
1099  }
1100
1101  Object.keys(attributes).forEach(function (key) {
1102    style.setAttribute(key, attributes[key]);
1103  });
1104
1105  if (typeof options.insert === 'function') {
1106    options.insert(style);
1107  } else {
1108    var target = getTarget(options.insert || 'head');
1109
1110    if (!target) {
1111      throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
1112    }
1113
1114    target.appendChild(style);
1115  }
1116
1117  return style;
1118}
1119
1120function removeStyleElement(style) {
1121  // istanbul ignore if
1122  if (style.parentNode === null) {
1123    return false;
1124  }
1125
1126  style.parentNode.removeChild(style);
1127}
1128/* istanbul ignore next  */
1129
1130
1131var replaceText = function replaceText() {
1132  var textStore = [];
1133  return function replace(index, replacement) {
1134    textStore[index] = replacement;
1135    return textStore.filter(Boolean).join('\n');
1136  };
1137}();
1138
1139function applyToSingletonTag(style, index, remove, obj) {
1140  var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE
1141
1142  /* istanbul ignore if  */
1143
1144  if (style.styleSheet) {
1145    style.styleSheet.cssText = replaceText(index, css);
1146  } else {
1147    var cssNode = document.createTextNode(css);
1148    var childNodes = style.childNodes;
1149
1150    if (childNodes[index]) {
1151      style.removeChild(childNodes[index]);
1152    }
1153
1154    if (childNodes.length) {
1155      style.insertBefore(cssNode, childNodes[index]);
1156    } else {
1157      style.appendChild(cssNode);
1158    }
1159  }
1160}
1161
1162function applyToTag(style, options, obj) {
1163  var css = obj.css;
1164  var media = obj.media;
1165  var sourceMap = obj.sourceMap;
1166
1167  if (media) {
1168    style.setAttribute('media', media);
1169  } else {
1170    style.removeAttribute('media');
1171  }
1172
1173  if (sourceMap && typeof btoa !== 'undefined') {
1174    css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
1175  } // For old IE
1176
1177  /* istanbul ignore if  */
1178
1179
1180  if (style.styleSheet) {
1181    style.styleSheet.cssText = css;
1182  } else {
1183    while (style.firstChild) {
1184      style.removeChild(style.firstChild);
1185    }
1186
1187    style.appendChild(document.createTextNode(css));
1188  }
1189}
1190
1191var singleton = null;
1192var singletonCounter = 0;
1193
1194function addStyle(obj, options) {
1195  var style;
1196  var update;
1197  var remove;
1198
1199  if (options.singleton) {
1200    var styleIndex = singletonCounter++;
1201    style = singleton || (singleton = insertStyleElement(options));
1202    update = applyToSingletonTag.bind(null, style, styleIndex, false);
1203    remove = applyToSingletonTag.bind(null, style, styleIndex, true);
1204  } else {
1205    style = insertStyleElement(options);
1206    update = applyToTag.bind(null, style, options);
1207
1208    remove = function remove() {
1209      removeStyleElement(style);
1210    };
1211  }
1212
1213  update(obj);
1214  return function updateStyle(newObj) {
1215    if (newObj) {
1216      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {
1217        return;
1218      }
1219
1220      update(obj = newObj);
1221    } else {
1222      remove();
1223    }
1224  };
1225}
1226
1227module.exports = function (list, options) {
1228  options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
1229  // tags it will allow on a page
1230
1231  if (!options.singleton && typeof options.singleton !== 'boolean') {
1232    options.singleton = isOldIE();
1233  }
1234
1235  list = list || [];
1236  var lastIdentifiers = modulesToDom(list, options);
1237  return function update(newList) {
1238    newList = newList || [];
1239
1240    if (Object.prototype.toString.call(newList) !== '[object Array]') {
1241      return;
1242    }
1243
1244    for (var i = 0; i < lastIdentifiers.length; i++) {
1245      var identifier = lastIdentifiers[i];
1246      var index = getIndexByIdentifier(identifier);
1247      stylesInDom[index].references--;
1248    }
1249
1250    var newLastIdentifiers = modulesToDom(newList, options);
1251
1252    for (var _i = 0; _i < lastIdentifiers.length; _i++) {
1253      var _identifier = lastIdentifiers[_i];
1254
1255      var _index = getIndexByIdentifier(_identifier);
1256
1257      if (stylesInDom[_index].references === 0) {
1258        stylesInDom[_index].updater();
1259
1260        stylesInDom.splice(_index, 1);
1261      }
1262    }
1263
1264    lastIdentifiers = newLastIdentifiers;
1265  };
1266};
1267
1268/***/ }),
1269
1270/***/ "./resources/assets/scripts/components/backgroundSlider.vue":
1271/*!******************************************************************!*\
1272  !*** ./resources/assets/scripts/components/backgroundSlider.vue ***!
1273  \******************************************************************/
1274/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1275
1276"use strict";
1277__webpack_require__.r(__webpack_exports__);
1278/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1279/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1280/* harmony export */ });
1281/* harmony import */ var _backgroundSlider_vue_vue_type_template_id_e19de8a6_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true& */ "./resources/assets/scripts/components/backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true&");
1282/* harmony import */ var _backgroundSlider_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./backgroundSlider.vue?vue&type=script&lang=js& */ "./resources/assets/scripts/components/backgroundSlider.vue?vue&type=script&lang=js&");
1283/* harmony import */ var _backgroundSlider_vue_vue_type_style_index_0_id_e19de8a6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true& */ "./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true&");
1284/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
1285
1286
1287
1288;
1289
1290
1291/* normalize component */
1292
1293var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
1294  _backgroundSlider_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
1295  _backgroundSlider_vue_vue_type_template_id_e19de8a6_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
1296  _backgroundSlider_vue_vue_type_template_id_e19de8a6_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
1297  false,
1298  null,
1299  "e19de8a6",
1300  null
1301  
1302)
1303
1304/* hot reload */
1305if (false) { var api; }
1306component.options.__file = "resources/assets/scripts/components/backgroundSlider.vue"
1307/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
1308
1309/***/ }),
1310
1311/***/ "./resources/assets/scripts/components/backgroundSlider.vue?vue&type=script&lang=js&":
1312/*!*******************************************************************************************!*\
1313  !*** ./resources/assets/scripts/components/backgroundSlider.vue?vue&type=script&lang=js& ***!
1314  \*******************************************************************************************/
1315/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1316
1317"use strict";
1318__webpack_require__.r(__webpack_exports__);
1319/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1320/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1321/* harmony export */ });
1322/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/webpack-import-glob-loader/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backgroundSlider.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=script&lang=js&");
1323 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); 
1324
1325/***/ }),
1326
1327/***/ "./resources/assets/scripts/components/backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true&":
1328/*!*************************************************************************************************************!*\
1329  !*** ./resources/assets/scripts/components/backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true& ***!
1330  \*************************************************************************************************************/
1331/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1332
1333"use strict";
1334__webpack_require__.r(__webpack_exports__);
1335/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1336/* harmony export */   "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_template_id_e19de8a6_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render),
1337/* harmony export */   "staticRenderFns": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_template_id_e19de8a6_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
1338/* harmony export */ });
1339/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_template_id_e19de8a6_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/webpack-import-glob-loader/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true&");
1340
1341
1342/***/ }),
1343
1344/***/ "./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true&":
1345/*!****************************************************************************************************************************!*\
1346  !*** ./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true& ***!
1347  \****************************************************************************************************************************/
1348/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1349
1350"use strict";
1351__webpack_require__.r(__webpack_exports__);
1352/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_13_use_1_node_modules_vue_loader_lib_loaders_stylePostLo
1352ader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_13_use_3_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_style_index_0_id_e19de8a6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!../../../../node_modules/webpack-import-glob-loader/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true&");
1353
1354
1355/***/ }),
1356
vendor: 3,357 bytes, lines 1357-1467
1357/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
1358/*!********************************************************************!*\
1359  !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
1360  \********************************************************************/
1361/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1362
1363"use strict";
1364__webpack_require__.r(__webpack_exports__);
1365/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1366/* harmony export */   "default": () => (/* binding */ normalizeComponent)
1367/* harmony export */ });
1368/* globals __VUE_SSR_CONTEXT__ */
1369
1370// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
1371// This module is a runtime utility for cleaner component module output and will
1372// be included in the final webpack user bundle.
1373
1374function normalizeComponent(
1375  scriptExports,
1376  render,
1377  staticRenderFns,
1378  functionalTemplate,
1379  injectStyles,
1380  scopeId,
1381  moduleIdentifier /* server only */,
1382  shadowMode /* vue-cli only */
1383) {
1384  // Vue.extend constructor export interop
1385  var options =
1386    typeof scriptExports === 'function' ? scriptExports.options : scriptExports
1387
1388  // render functions
1389  if (render) {
1390    options.render = render
1391    options.staticRenderFns = staticRenderFns
1392    options._compiled = true
1393  }
1394
1395  // functional template
1396  if (functionalTemplate) {
1397    options.functional = true
1398  }
1399
1400  // scopedId
1401  if (scopeId) {
1402    options._scopeId = 'data-v-' + scopeId
1403  }
1404
1405  var hook
1406  if (moduleIdentifier) {
1407    // server build
1408    hook = function (context) {
1409      // 2.3 injection
1410      context =
1411        context || // cached call
1412        (this.$vnode && this.$vnode.ssrContext) || // stateful
1413        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
1414      // 2.2 with runInNewContext: true
1415      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
1416        context = __VUE_SSR_CONTEXT__
1417      }
1418      // inject component styles
1419      if (injectStyles) {
1420        injectStyles.call(this, context)
1421      }
1422      // register component module identifier for async chunk inferrence
1423      if (context && context._registeredComponents) {
1424        context._registeredComponents.add(moduleIdentifier)
1425      }
1426    }
1427    // used by ssr in case component is cached and beforeCreate
1428    // never gets called
1429    options._ssrRegister = hook
1430  } else if (injectStyles) {
1431    hook = shadowMode
1432      ? function () {
1433          injectStyles.call(
1434            this,
1435            (options.functional ? this.parent : this).$root.$options.shadowRoot
1436          )
1437        }
1438      : injectStyles
1439  }
1440
1441  if (hook) {
1442    if (options.functional) {
1443      // for template-only hot-reload because in that case the render fn doesn't
1444      // go through the normalizer
1445      options._injectStyles = hook
1446      // register for functional component in vue file
1447      var originalRender = options.render
1448      options.render = function renderWithStyleInjection(h, context) {
1449        hook.call(context)
1450        return originalRender(h, context)
1451      }
1452    } else {
1453      // inject component registration as beforeCreate hook
1454      var existing = options.beforeCreate
1455      options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
1456    }
1457  }
1458
1459  return {
1460    exports: scriptExports,
1461    options: options
1462  }
1463}
1464
1465
1466/***/ }),
1467
vendor: 22,936 bytes, lines 1468-2139
1468/***/ "./node_modules/bootstrap/js/dist/modal.js":
1469/*!*************************************************!*\
1470  !*** ./node_modules/bootstrap/js/dist/modal.js ***!
1471  \*************************************************/
1472/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
1473
1474/*!
1475  * Bootstrap modal.js v4.6.2 (https://getbootstrap.com/)
1476  * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
1477  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1478  */
1479(function (global, factory) {
1480   true ? module.exports = factory(__webpack_require__(/*! jquery */ "jquery"), __webpack_require__(/*! ./util.js */ "./node_modules/bootstrap/js/dist/util.js")) :
1481  0;
1482})(this, (function ($, Util) { 'use strict';
1483
1484  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
1485
1486  var $__default = /*#__PURE__*/_interopDefaultLegacy($);
1487  var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
1488
1489  function _defineProperties(target, props) {
1490    for (var i = 0; i < props.length; i++) {
1491      var descriptor = props[i];
1492      descriptor.enumerable = descriptor.enumerable || false;
1493      descriptor.configurable = true;
1494      if ("value" in descriptor) descriptor.writable = true;
1495      Object.defineProperty(target, descriptor.key, descriptor);
1496    }
1497  }
1498
1499  function _createClass(Constructor, protoProps, staticProps) {
1500    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
1501    if (staticProps) _defineProperties(Constructor, staticProps);
1502    Object.defineProperty(Constructor, "prototype", {
1503      writable: false
1504    });
1505    return Constructor;
1506  }
1507
1508  function _extends() {
1509    _extends = Object.assign ? Object.assign.bind() : function (target) {
1510      for (var i = 1; i < arguments.length; i++) {
1511        var source = arguments[i];
1512
1513        for (var key in source) {
1514          if (Object.prototype.hasOwnProperty.call(source, key)) {
1515            target[key] = source[key];
1516          }
1517        }
1518      }
1519
1520      return target;
1521    };
1522    return _extends.apply(this, arguments);
1523  }
1524
1525  /**
1526   * Constants
1527   */
1528
1529  var NAME = 'modal';
1530  var VERSION = '4.6.2';
1531  var DATA_KEY = 'bs.modal';
1532  var EVENT_KEY = "." + DATA_KEY;
1533  var DATA_API_KEY = '.data-api';
1534  var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
1535  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
1536
1537  var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
1538  var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
1539  var CLASS_NAME_BACKDROP = 'modal-backdrop';
1540  var CLASS_NAME_OPEN = 'modal-open';
1541  var CLASS_NAME_FADE = 'fade';
1542  var CLASS_NAME_SHOW = 'show';
1543  var CLASS_NAME_STATIC = 'modal-static';
1544  var EVENT_HIDE = "hide" + EVENT_KEY;
1545  var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY;
1546  var EVENT_HIDDEN = "hidden" + EVENT_KEY;
1547  var EVENT_SHOW = "show" + EVENT_KEY;
1548  var EVENT_SHOWN = "shown" + EVENT_KEY;
1549  var EVENT_FOCUSIN = "focusin" + EVENT_KEY;
1550  var EVENT_RESIZE = "resize" + EVENT_KEY;
1551  var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY;
1552  var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY;
1553  var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY;
1554  var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY;
1555  var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
1556  var SELECTOR_DIALOG = '.modal-dialog';
1557  var SELECTOR_MODAL_BODY = '.modal-body';
1558  var SELECTOR_DATA_TOGGLE = '[data-toggle="modal"]';
1559  var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]';
1560  var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
1561  var SELECTOR_STICKY_CONTENT = '.sticky-top';
1562  var Default = {
1563    backdrop: true,
1564    keyboard: true,
1565    focus: true,
1566    show: true
1567  };
1568  var DefaultType = {
1569    backdrop: '(boolean|string)',
1570    keyboard: 'boolean',
1571    focus: 'boolean',
1572    show: 'boolean'
1573  };
1574  /**
1575   * Class definition
1576   */
1577
1578  var Modal = /*#__PURE__*/function () {
1579    function Modal(element, config) {
1580      this._config = this._getConfig(config);
1581      this._element = element;
1582      this._dialog = element.querySelector(SELECTOR_DIALOG);
1583      this._backdrop = null;
1584      this._isShown = false;
1585      this._isBodyOverflowing = false;
1586      this._ignoreBackdropClick = false;
1587      this._isTransitioning = false;
1588      this._scrollbarWidth = 0;
1589    } // Getters
1590
1591
1592    var _proto = Modal.prototype;
1593
1594    // Public
1595    _proto.toggle = function toggle(relatedTarget) {
1596      return this._isShown ? this.hide() : this.show(relatedTarget);
1597    };
1598
1599    _proto.show = function show(relatedTarget) {
1600      var _this = this;
1601
1602      if (this._isShown || this._isTransitioning) {
1603        return;
1604      }
1605
1606      var showEvent = $__default["default"].Event(EVENT_SHOW, {
1607        relatedTarget: relatedTarget
1608      });
1609      $__default["default"](this._element).trigger(showEvent);
1610
1611      if (showEvent.isDefaultPrevented()) {
1612        return;
1613      }
1614
1615      this._isShown = true;
1616
1617      if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE)) {
1618        this._isTransitioning = true;
1619      }
1620
1621      this._checkScrollbar();
1622
1623      this._setScrollbar();
1624
1625      this._adjustDialog();
1626
1627      this._setEscapeEvent();
1628
1629      this._setResizeEvent();
1630
1631      $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
1632        return _this.hide(event);
1633      });
1634      $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
1635        $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
1636          if ($__default["default"](event.target).is(_this._element)) {
1637            _this._ignoreBackdropClick = true;
1638          }
1639        });
1640      });
1641
1642      this._showBackdrop(function () {
1643        return _this._showElement(relatedTarget);
1644      });
1645    };
1646
1647    _proto.hide = function hide(event) {
1648      var _this2 = this;
1649
1650      if (event) {
1651        event.preventDefault();
1652      }
1653
1654      if (!this._isShown || this._isTransitioning) {
1655        return;
1656      }
1657
1658      var hideEvent = $__default["default"].Event(EVENT_HIDE);
1659      $__default["default"](this._element).trigger(hideEvent);
1660
1661      if (!this._isShown || hideEvent.isDefaultPrevented()) {
1662        return;
1663      }
1664
1665      this._isShown = false;
1666      var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE);
1667
1668      if (transition) {
1669        this._isTransitioning = true;
1670      }
1671
1672      this._setEscapeEvent();
1673
1674      this._setResizeEvent();
1675
1676      $__default["default"](document).off(EVENT_FOCUSIN);
1677      $__default["default"](this._element).removeClass(CLASS_NAME_SHOW);
1678      $__default["default"](this._element).off(EVENT_CLICK_DISMISS);
1679      $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
1680
1681      if (transition) {
1682        var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._element);
1683        $__default["default"](this._element).one(Util__default["default"].TRANSITION_END, function (event) {
1684          return _this2._hideModal(event);
1685        }).emulateTransitionEnd(transitionDuration);
1686      } else {
1687        this._hideModal();
1688      }
1689    };
1690
1691    _proto.dispose = function dispose() {
1692      [window, this._element, this._dialog].forEach(function (htmlElement) {
1693        return $__default["default"](htmlElement).off(EVENT_KEY);
1694      });
1695      /**
1696       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
1697       * Do not move `document` in `htmlElements` array
1698       * It will remove `EVENT_CLICK_DATA_API` event that should remain
1699       */
1700
1701      $__default["default"](document).off(EVENT_FOCUSIN);
1702      $__default["default"].removeData(this._element, DATA_KEY);
1703      this._config = null;
1704      this._element = null;
1705      this._dialog = null;
1706      this._backdrop = null;
1707      this._isShown = null;
1708      this._isBodyOverflowing = null;
1709      this._ignoreBackdropClick = null;
1710      this._isTransitioning = null;
1711      this._scrollbarWidth = null;
1712    };
1713
1714    _proto.handleUpdate = function handleUpdate() {
1715      this._adjustDialog();
1716    } // Private
1717    ;
1718
1719    _proto._getConfig = function _getConfig(config) {
1720      config = _extends({}, Default, config);
1721      Util__default["default"].typeCheckConfig(NAME, config, DefaultType);
1722      return config;
1723    };
1724
1725    _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
1726      var _this3 = this;
1727
1728      var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED);
1729      $__default["default"](this._element).trigger(hideEventPrevented);
1730
1731      if (hideEventPrevented.isDefaultPrevented()) {
1732        return;
1733      }
1734
1735      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
1736
1737      if (!isModalOverflowing) {
1738        this._element.style.overflowY = 'hidden';
1739      }
1740
1741      this._element.classList.add(CLASS_NAME_STATIC);
1742
1743      var modalTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._dialog);
1744      $__default["default"](this._element).off(Util__default["default"].TRANSITION_END);
1745      $__default["default"](this._element).one(Util__default["default"].TRANSITION_END, function () {
1746        _this3._element.classList.remove(CLASS_NAME_STATIC);
1747
1748        if (!isModalOverflowing) {
1749          $__default["default"](_this3._element).one(Util__default["default"].TRANSITION_END, function () {
1750            _this3._element.style.overflowY = '';
1751          }).emulateTransitionEnd(_this3._element, modalTransitionDuration);
1752        }
1753      }).emulateTransitionEnd(modalTransitionDuration);
1754
1755      this._element.focus();
1756    };
1757
1758    _proto._showElement = function _showElement(relatedTarget) {
1759      var _this4 = this;
1760
1761      var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE);
1762      var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
1763
1764      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
1765        // Don't move modal's DOM position
1766        document.body.appendChild(this._element);
1767      }
1768
1769      this._element.style.display = 'block';
1770
1771      this._element.removeAttribute('aria-hidden');
1772
1773      this._element.setAttribute('aria-modal', true);
1774
1775      this._element.setAttribute('role', 'dialog');
1776
1777      if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
1778        modalBody.scrollTop = 0;
1779      } else {
1780        this._element.scrollTop = 0;
1781      }
1782
1783      if (transition) {
1784        Util__default["default"].reflow(this._element);
1785      }
1786
1787      $__default["default"](this._element).addClass(CLASS_NAME_SHOW);
1788
1789      if (this._config.focus) {
1790        this._enforceFocus();
1791      }
1792
1793      var shownEvent = $__default["default"].Event(EVENT_SHOWN, {
1794        relatedTarget: relatedTarget
1795      });
1796
1797      var transitionComplete = function transitionComplete() {
1798        if (_this4._config.focus) {
1799          _this4._element.focus();
1800        }
1801
1802        _this4._isTransitioning = false;
1803        $__default["default"](_this4._element).trigger(shownEvent);
1804      };
1805
1806      if (transition) {
1807        var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._dialog);
1808        $__default["default"](this._dialog).one(Util__default["default"].TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
1809      } else {
1810        transitionComplete();
1811      }
1812    };
1813
1814    _proto._enforceFocus = function _enforceFocus() {
1815      var _this5 = this;
1816
1817      $__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
1818      .on(EVENT_FOCUSIN, function (event) {
1819        if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) {
1820          _this5._element.focus();
1821        }
1822      });
1823    };
1824
1825    _proto._setEscapeEvent = function _setEscapeEvent() {
1826      var _this6 = this;
1827
1828      if (this._isShown) {
1829        $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
1830          if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
1831            event.preventDefault();
1832
1833            _this6.hide();
1834          } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
1835            _this6._triggerBackdropTransition();
1836          }
1837        });
1838      } else if (!this._isShown) {
1839        $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS);
1840      }
1841    };
1842
1843    _proto._setResizeEvent = function _setResizeEvent() {
1844      var _this7 = this;
1845
1846      if (this._isShown) {
1847        $__default["default"](window).on(EVENT_RESIZE, function (event) {
1848          return _this7.handleUpdate(event);
1849        });
1850      } else {
1851        $__default["default"](window).off(EVENT_RESIZE);
1852      }
1853    };
1854
1855    _proto._hideModal = function _hideModal() {
1856      var _this8 = this;
1857
1858      this._element.style.display = 'none';
1859
1860      this._element.setAttribute('aria-hidden', true);
1861
1862      this._element.removeAttribute('aria-modal');
1863
1864      this._element.removeAttribute('role');
1865
1866      this._isTransitioning = false;
1867
1868      this._showBackdrop(function () {
1869        $__default["default"](document.body).removeClass(CLASS_NAME_OPEN);
1870
1871        _this8._resetAdjustments();
1872
1873        _this8._resetScrollbar();
1874
1875        $__default["default"](_this8._element).trigger(EVENT_HIDDEN);
1876      });
1877    };
1878
1879    _proto._removeBackdrop = function _removeBackdrop() {
1880      if (this._backdrop) {
1881        $__default["default"](this._backdrop).remove();
1882        this._backdrop = null;
1883      }
1884    };
1885
1886    _proto._showBackdrop = function _showBackdrop(callback) {
1887      var _this9 = this;
1888
1889      var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE) ? CLASS_NAME_FADE : '';
1890
1891      if (this._isShown && this._config.backdrop) {
1892        this._backdrop = document.createElement('div');
1893        this._backdrop.className = CLASS_NAME_BACKDROP;
1894
1895        if (animate) {
1896          this._backdrop.classList.add(animate);
1897        }
1898
1899        $__default["default"](this._backdrop).appendTo(document.body);
1900        $__default["default"](this._element).on(EVENT_CLICK_DISMISS, function (event) {
1901          if (_this9._ignoreBackdropClick) {
1902            _this9._ignoreBackdropClick = false;
1903            return;
1904          }
1905
1906          if (event.target !== event.currentTarget) {
1907            return;
1908          }
1909
1910          if (_this9._config.backdrop === 'static') {
1911            _this9._triggerBackdropTransition();
1912          } else {
1913            _this9.hide();
1914          }
1915        });
1916
1917        if (animate) {
1918          Util__default["default"].reflow(this._backdrop);
1919        }
1920
1921        $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW);
1922
1923        if (!callback) {
1924          return;
1925        }
1926
1927        if (!animate) {
1928          callback();
1929          return;
1930        }
1931
1932        var backdropTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._backdrop);
1933        $__default["default"](this._backdrop).one(Util__default["default"].TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
1934      } else if (!this._isShown && this._backdrop) {
1935        $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW);
1936
1937        var callbackRemove = function callbackRemove() {
1938          _this9._removeBackdrop();
1939
1940          if (callback) {
1941            callback();
1942          }
1943        };
1944
1945        if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE)) {
1946          var _backdropTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._backdrop);
1947
1948          $__default["default"](this._backdrop).one(Util__default["default"].TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
1949        } else {
1950          callbackRemove();
1951        }
1952      } else if (callback) {
1953        callback();
1954      }
1955    } // ----------------------------------------------------------------------
1956    // the following methods are used to handle overflowing modals
1957    // todo (fat): these should probably be refactored out of modal.js
1958    // ----------------------------------------------------------------------
1959    ;
1960
1961    _proto._adjustDialog = function _adjustDialog() {
1962      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
1963
1964      if (!this._isBodyOverflowing && isModalOverflowing) {
1965        this._element.style.paddingLeft = this._scrollbarWidth + "px";
1966      }
1967
1968      if (this._isBodyOverflowing && !isModalOverflowing) {
1969        this._element.style.paddingRight = this._scrollbarWidth + "px";
1970      }
1971    };
1972
1973    _proto._resetAdjustments = function _resetAdjustments() {
1974      this._element.style.paddingLeft = '';
1975      this._element.style.paddingRight = '';
1976    };
1977
1978    _proto._checkScrollbar = function _checkScrollbar() {
1979      var rect = document.body.getBoundingClientRect();
1980      this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
1981      this._scrollbarWidth = this._getScrollbarWidth();
1982    };
1983
1984    _proto._setScrollbar = function _setScrollbar() {
1985      var _this10 = this;
1986
1987      if (this._isBodyOverflowing) {
1988        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
1989        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
1990        var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
1991        var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
1992
1993        $__default["default"](fixedContent).each(function (index, element) {
1994          var actualPadding = element.style.paddingRight;
1995          var calculatedPadding = $__default["default"](element).css('padding-right');
1996          $__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px");
1997        }); // Adjust sticky content margin
1998
1999        $__default["default"](stickyContent).each(function (index, element) {
2000          var actualMargin = element.style.marginRight;
2001          var calculatedMargin = $__default["default"](element).css('margin-right');
2002          $__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px");
2003        }); // Adjust body padding
2004
2005        var actualPadding = document.body.style.paddingRight;
2006        var calculatedPadding = $__default["default"](document.body).css('padding-right');
2007        $__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
2008      }
2009
2010      $__default["default"](document.body).addClass(CLASS_NAME_OPEN);
2011    };
2012
2013    _proto._resetScrollbar = function _resetScrollbar() {
2014      // Restore fixed content padding
2015      var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
2016      $__default["default"](fixedContent).each(function (index, element) {
2017        var padding = $__default["default"](element).data('padding-right');
2018        $__default["default"](element).removeData('padding-right');
2019        element.style.paddingRight = padding ? padding : '';
2020      }); // Restore sticky content
2021
2022      var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
2023      $__default["default"](elements).each(function (index, element) {
2024        var margin = $__default["default"](element).data('margin-right');
2025
2026        if (typeof margin !== 'undefined') {
2027          $__default["default"](element).css('margin-right', margin).removeData('margin-right');
2028        }
2029      }); // Restore body padding
2030
2031      var padding = $__default["default"](document.body).data('padding-right');
2032      $__default["default"](document.body).removeData('padding-right');
2033      document.body.style.paddingRight = padding ? padding : '';
2034    };
2035
2036    _proto._getScrollbarWidth = function _getScrollbarWidth() {
2037      // thx d.walsh
2038      var scrollDiv = document.createElement('div');
2039      scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
2040      document.body.appendChild(scrollDiv);
2041      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
2042      document.body.removeChild(scrollDiv);
2043      return scrollbarWidth;
2044    } // Static
2045    ;
2046
2047    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
2048      return this.each(function () {
2049        var data = $__default["default"](this).data(DATA_KEY);
2050
2051        var _config = _extends({}, Default, $__default["default"](this).data(), typeof config === 'object' && config ? config : {});
2052
2053        if (!data) {
2054          data = new Modal(this, _config);
2055          $__default["default"](this).data(DATA_KEY, data);
2056        }
2057
2058        if (typeof config === 'string') {
2059          if (typeof data[config] === 'undefined') {
2060            throw new TypeError("No method named \"" + config + "\"");
2061          }
2062
2063          data[config](relatedTarget);
2064        } else if (_config.show) {
2065          data.show(relatedTarget);
2066        }
2067      });
2068    };
2069
2070    _createClass(Modal, null, [{
2071      key: "VERSION",
2072      get: function get() {
2073        return VERSION;
2074      }
2075    }, {
2076      key: "Default",
2077      get: function get() {
2078        return Default;
2079      }
2080    }]);
2081
2082    return Modal;
2083  }();
2084  /**
2085   * Data API implementation
2086   */
2087
2088
2089  $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
2090    var _this11 = this;
2091
2092    var target;
2093    var selector = Util__default["default"].getSelectorFromElement(this);
2094
2095    if (selector) {
2096      target = document.querySelector(selector);
2097    }
2098
2099    var config = $__default["default"](target).data(DATA_KEY) ? 'toggle' : _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
2100
2101    if (this.tagName === 'A' || this.tagName === 'AREA') {
2102      event.preventDefault();
2103    }
2104
2105    var $target = $__default["default"](target).one(EVENT_SHOW, function (showEvent) {
2106      if (showEvent.isDefaultPrevented()) {
2107        // Only register focus restorer if modal will actually get shown
2108        return;
2109      }
2110
2111      $target.one(EVENT_HIDDEN, function () {
2112        if ($__default["default"](_this11).is(':visible')) {
2113          _this11.focus();
2114        }
2115      });
2116    });
2117
2118    Modal._jQueryInterface.call($__default["default"](target), config, this);
2119  });
2120  /**
2121   * jQuery
2122   */
2123
2124  $__default["default"].fn[NAME] = Modal._jQueryInterface;
2125  $__default["default"].fn[NAME].Constructor = Modal;
2126
2127  $__default["default"].fn[NAME].noConflict = function () {
2128    $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
2129    return Modal._jQueryInterface;
2130  };
2131
2132  return Modal;
2133
2134}));
2135//# sourceMappingURL=modal.js.map
2136
2137
2138/***/ }),
2139
vendor: 6,712 bytes, lines 2140-2338
2140/***/ "./node_modules/bootstrap/js/dist/util.js":
2141/*!************************************************!*\
2142  !*** ./node_modules/bootstrap/js/dist/util.js ***!
2143  \************************************************/
2144/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
2145
2146/*!
2147  * Bootstrap util.js v4.6.2 (https://getbootstrap.com/)
2148  * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2149  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2150  */
2151(function (global, factory) {
2152   true ? module.exports = factory(__webpack_require__(/*! jquery */ "jquery")) :
2153  0;
2154})(this, (function ($) { 'use strict';
2155
2156  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
2157
2158  var $__default = /*#__PURE__*/_interopDefaultLegacy($);
2159
2160  /**
2161   * --------------------------------------------------------------------------
2162   * Bootstrap (v4.6.2): util.js
2163   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2164   * --------------------------------------------------------------------------
2165   */
2166  /**
2167   * Private TransitionEnd Helpers
2168   */
2169
2170  var TRANSITION_END = 'transitionend';
2171  var MAX_UID = 1000000;
2172  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
2173
2174  function toType(obj) {
2175    if (obj === null || typeof obj === 'undefined') {
2176      return "" + obj;
2177    }
2178
2179    return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
2180  }
2181
2182  function getSpecialTransitionEndEvent() {
2183    return {
2184      bindType: TRANSITION_END,
2185      delegateType: TRANSITION_END,
2186      handle: function handle(event) {
2187        if ($__default["default"](event.target).is(this)) {
2188          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
2189        }
2190
2191        return undefined;
2192      }
2193    };
2194  }
2195
2196  function transitionEndEmulator(duration) {
2197    var _this = this;
2198
2199    var called = false;
2200    $__default["default"](this).one(Util.TRANSITION_END, function () {
2201      called = true;
2202    });
2203    setTimeout(function () {
2204      if (!called) {
2205        Util.triggerTransitionEnd(_this);
2206      }
2207    }, duration);
2208    return this;
2209  }
2210
2211  function setTransitionEndSupport() {
2212    $__default["default"].fn.emulateTransitionEnd = transitionEndEmulator;
2213    $__default["default"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
2214  }
2215  /**
2216   * Public Util API
2217   */
2218
2219
2220  var Util = {
2221    TRANSITION_END: 'bsTransitionEnd',
2222    getUID: function getUID(prefix) {
2223      do {
2224        // eslint-disable-next-line no-bitwise
2225        prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
2226      } while (document.getElementById(prefix));
2227
2228      return prefix;
2229    },
2230    getSelectorFromElement: function getSelectorFromElement(element) {
2231      var selector = element.getAttribute('data-target');
2232
2233      if (!selector || selector === '#') {
2234        var hrefAttr = element.getAttribute('href');
2235        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
2236      }
2237
2238      try {
2239        return document.querySelector(selector) ? selector : null;
2240      } catch (_) {
2241        return null;
2242      }
2243    },
2244    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
2245      if (!element) {
2246        return 0;
2247      } // Get transition-duration of the element
2248
2249
2250      var transitionDuration = $__default["default"](element).css('transition-duration');
2251      var transitionDelay = $__default["default"](element).css('transition-delay');
2252      var floatTransitionDuration = parseFloat(transitionDuration);
2253      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
2254
2255      if (!floatTransitionDuration && !floatTransitionDelay) {
2256        return 0;
2257      } // If multiple durations are defined, take the first
2258
2259
2260      transitionDuration = transitionDuration.split(',')[0];
2261      transitionDelay = transitionDelay.split(',')[0];
2262      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
2263    },
2264    reflow: function reflow(element) {
2265      return element.offsetHeight;
2266    },
2267    triggerTransitionEnd: function triggerTransitionEnd(element) {
2268      $__default["default"](element).trigger(TRANSITION_END);
2269    },
2270    supportsTransitionEnd: function supportsTransitionEnd() {
2271      return Boolean(TRANSITION_END);
2272    },
2273    isElement: function isElement(obj) {
2274      return (obj[0] || obj).nodeType;
2275    },
2276    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
2277      for (var property in configTypes) {
2278        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
2279          var expectedTypes = configTypes[property];
2280          var value = config[property];
2281          var valueType = value && Util.isElement(value) ? 'element' : toType(value);
2282
2283          if (!new RegExp(expectedTypes).test(valueType)) {
2284            throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
2285          }
2286        }
2287      }
2288    },
2289    findShadowRoot: function findShadowRoot(element) {
2290      if (!document.documentElement.attachShadow) {
2291        return null;
2292      } // Can find the shadow root otherwise it'll return the document
2293
2294
2295      if (typeof element.getRootNode === 'function') {
2296        var root = element.getRootNode();
2297        return root instanceof ShadowRoot ? root : null;
2298      }
2299
2300      if (element instanceof ShadowRoot) {
2301        return element;
2302      } // when we don't find a shadow root
2303
2304
2305      if (!element.parentNode) {
2306        return null;
2307      }
2308
2309      return Util.findShadowRoot(element.parentNode);
2310    },
2311    jQueryDetection: function jQueryDetection() {
2312      if (typeof $__default["default"] === 'undefined') {
2313        throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
2314      }
2315
2316      var version = $__default["default"].fn.jquery.split(' ')[0].split('.');
2317      var minMajor = 1;
2318      var ltMajor = 2;
2319      var minMinor = 9;
2320      var minPatch = 1;
2321      var maxMajor = 4;
2322
2323      if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {
2324        throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');
2325      }
2326    }
2327  };
2328  Util.jQueryDetection();
2329  setTransitionEndSupport();
2330
2331  return Util;
2332
2333}));
2334//# sourceMappingURL=util.js.map
2335
2336
2337/***/ }),
2338
vendor: 1,972 bytes, lines 2339-2414
2339/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js":
2340/*!******************************************************************************!*\
2341  !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js ***!
2342  \******************************************************************************/
2343/***/ ((module) => {
2344
2345"use strict";
2346
2347
2348/*
2349  MIT License http://www.opensource.org/licenses/mit-license.php
2350  Author Tobias Koppers @sokra
2351*/
2352// css base code, injected by the css-loader
2353// eslint-disable-next-line func-names
2354module.exports = function (cssWithMappingToString) {
2355  var list = []; // return the list of modules as css string
2356
2357  list.toString = function toString() {
2358    return this.map(function (item) {
2359      var content = cssWithMappingToString(item);
2360
2361      if (item[2]) {
2362        return "@media ".concat(item[2], " {").concat(content, "}");
2363      }
2364
2365      return content;
2366    }).join("");
2367  }; // import a list of modules into the list
2368  // eslint-disable-next-line func-names
2369
2370
2371  list.i = function (modules, mediaQuery, dedupe) {
2372    if (typeof modules === "string") {
2373      // eslint-disable-next-line no-param-reassign
2374      modules = [[null, modules, ""]];
2375    }
2376
2377    var alreadyImportedModules = {};
2378
2379    if (dedupe) {
2380      for (var i = 0; i < this.length; i++) {
2381        // eslint-disable-next-line prefer-destructuring
2382        var id = this[i][0];
2383
2384        if (id != null) {
2385          alreadyImportedModules[id] = true;
2386        }
2387      }
2388    }
2389
2390    for (var _i = 0; _i < modules.length; _i++) {
2391      var item = [].concat(modules[_i]);
2392
2393      if (dedupe && alreadyImportedModules[item[0]]) {
2394        // eslint-disable-next-line no-continue
2395        continue;
2396      }
2397
2398      if (mediaQuery) {
2399        if (!item[2]) {
2400          item[2] = mediaQuery;
2401        } else {
2402          item[2] = "".concat(mediaQuery, " and ").concat(item[2]);
2403        }
2404      }
2405
2406      list.push(item);
2407    }
2408  };
2409
2410  return list;
2411};
2412
2413/***/ }),
2414
vendor: 90,264 bytes, lines 2415-5872
2415/***/ "./node_modules/owl.carousel/dist/owl.carousel.js":
2416/*!********************************************************!*\
2417  !*** ./node_modules/owl.carousel/dist/owl.carousel.js ***!
2418  \********************************************************/
2419/***/ (() => {
2420
2421/**
2422 * Owl Carousel v2.3.4
2423 * Copyright 2013-2018 David Deutsch
2424 * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
2425 */
2426/**
2427 * Owl carousel
2428 * @version 2.3.4
2429 * @author Bartosz Wojciechowski
2430 * @author David Deutsch
2431 * @license The MIT License (MIT)
2432 * @todo Lazy Load Icon
2433 * @todo prevent animationend bubling
2434 * @todo itemsScaleUp
2435 * @todo Test Zepto
2436 * @todo stagePadding calculate wrong active classes
2437 */
2438;(function($, window, document, undefined) {
2439
2440	/**
2441	 * Creates a carousel.
2442	 * @class The Owl Carousel.
2443	 * @public
2444	 * @param {HTMLElement|jQuery} element - The element to create the carousel for.
2445	 * @param {Object} [options] - The options
2446	 */
2447	function Owl(element, options) {
2448
2449		/**
2450		 * Current settings for the carousel.
2451		 * @public
2452		 */
2453		this.settings = null;
2454
2455		/**
2456		 * Current options set by the caller including defaults.
2457		 * @public
2458		 */
2459		this.options = $.extend({}, Owl.Defaults, options);
2460
2461		/**
2462		 * Plugin element.
2463		 * @public
2464		 */
2465		this.$element = $(element);
2466
2467		/**
2468		 * Proxied event handlers.
2469		 * @protected
2470		 */
2471		this._handlers = {};
2472
2473		/**
2474		 * References to the running plugins of this carousel.
2475		 * @protected
2476		 */
2477		this._plugins = {};
2478
2479		/**
2480		 * Currently suppressed events to prevent them from being retriggered.
2481		 * @protected
2482		 */
2483		this._supress = {};
2484
2485		/**
2486		 * Absolute current position.
2487		 * @protected
2488		 */
2489		this._current = null;
2490
2491		/**
2492		 * Animation speed in milliseconds.
2493		 * @protected
2494		 */
2495		this._speed = null;
2496
2497		/**
2498		 * Coordinates of all items in pixel.
2499		 * @todo The name of this member is missleading.
2500		 * @protected
2501		 */
2502		this._coordinates = [];
2503
2504		/**
2505		 * Current breakpoint.
2506		 * @todo Real media queries would be nice.
2507		 * @protected
2508		 */
2509		this._breakpoint = null;
2510
2511		/**
2512		 * Current width of the plugin element.
2513		 */
2514		this._width = null;
2515
2516		/**
2517		 * All real items.
2518		 * @protected
2519		 */
2520		this._items = [];
2521
2522		/**
2523		 * All cloned items.
2524		 * @protected
2525		 */
2526		this._clones = [];
2527
2528		/**
2529		 * Merge values of all items.
2530		 * @todo Maybe this could be part of a plugin.
2531		 * @protected
2532		 */
2533		this._mergers = [];
2534
2535		/**
2536		 * Widths of all items.
2537		 */
2538		this._widths = [];
2539
2540		/**
2541		 * Invalidated parts within the update process.
2542		 * @protected
2543		 */
2544		this._invalidated = {};
2545
2546		/**
2547		 * Ordered list of workers for the update process.
2548		 * @protected
2549		 */
2550		this._pipe = [];
2551
2552		/**
2553		 * Current state information for the drag operation.
2554		 * @todo #261
2555		 * @protected
2556		 */
2557		this._drag = {
2558			time: null,
2559			target: null,
2560			pointer: null,
2561			stage: {
2562				start: null,
2563				current: null
2564			},
2565			direction: null
2566		};
2567
2568		/**
2569		 * Current state information and their tags.
2570		 * @type {Object}
2571		 * @protected
2572		 */
2573		this._states = {
2574			current: {},
2575			tags: {
2576				'initializing': [ 'busy' ],
2577				'animating': [ 'busy' ],
2578				'dragging': [ 'interacting' ]
2579			}
2580		};
2581
2582		$.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) {
2583			this._handlers[handler] = $.proxy(this[handler], this);
2584		}, this));
2585
2586		$.each(Owl.Plugins, $.proxy(function(key, plugin) {
2587			this._plugins[key.charAt(0).toLowerCase() + key.slice(1)]
2588				= new plugin(this);
2589		}, this));
2590
2591		$.each(Owl.Workers, $.proxy(function(priority, worker) {
2592			this._pipe.push({
2593				'filter': worker.filter,
2594				'run': $.proxy(worker.run, this)
2595			});
2596		}, this));
2597
2598		this.setup();
2599		this.initialize();
2600	}
2601
2602	/**
2603	 * Default options for the carousel.
2604	 * @public
2605	 */
2606	Owl.Defaults = {
2607		items: 3,
2608		loop: false,
2609		center: false,
2610		rewind: false,
2611		checkVisibility: true,
2612
2613		mouseDrag: true,
2614		touchDrag: true,
2615		pullDrag: true,
2616		freeDrag: false,
2617
2618		margin: 0,
2619		stagePadding: 0,
2620
2621		merge: false,
2622		mergeFit: true,
2623		autoWidth: false,
2624
2625		startPosition: 0,
2626		rtl: false,
2627
2628		smartSpeed: 250,
2629		fluidSpeed: false,
2630		dragEndSpeed: false,
2631
2632		responsive: {},
2633		responsiveRefreshRate: 200,
2634		responsiveBaseElement: window,
2635
2636		fallbackEasing: 'swing',
2637		slideTransition: '',
2638
2639		info: false,
2640
2641		nestedItemSelector: false,
2642		itemElement: 'div',
2643		stageElement: 'div',
2644
2645		refreshClass: 'owl-refresh',
2646		loadedClass: 'owl-loaded',
2647		loadingClass: 'owl-loading',
2648		rtlClass: 'owl-rtl',
2649		responsiveClass: 'owl-responsive',
2650		dragClass: 'owl-drag',
2651		itemClass: 'owl-item',
2652		stageClass: 'owl-stage',
2653		stageOuterClass: 'owl-stage-outer',
2654		grabClass: 'owl-grab'
2655	};
2656
2657	/**
2658	 * Enumeration for width.
2659	 * @public
2660	 * @readonly
2661	 * @enum {String}
2662	 */
2663	Owl.Width = {
2664		Default: 'default',
2665		Inner: 'inner',
2666		Outer: 'outer'
2667	};
2668
2669	/**
2670	 * Enumeration for types.
2671	 * @public
2672	 * @readonly
2673	 * @enum {String}
2674	 */
2675	Owl.Type = {
2676		Event: 'event',
2677		State: 'state'
2678	};
2679
2680	/**
2681	 * Contains all registered plugins.
2682	 * @public
2683	 */
2684	Owl.Plugins = {};
2685
2686	/**
2687	 * List of workers involved in the update process.
2688	 */
2689	Owl.Workers = [ {
2690		filter: [ 'width', 'settings' ],
2691		run: function() {
2692			this._width = this.$element.width();
2693		}
2694	}, {
2695		filter: [ 'width', 'items', 'settings' ],
2696		run: function(cache) {
2697			cache.current = this._items && this._items[this.relative(this._current)];
2698		}
2699	}, {
2700		filter: [ 'items', 'settings' ],
2701		run: function() {
2702			this.$stage.children('.cloned').remove();
2703		}
2704	}, {
2705		filter: [ 'width', 'items', 'settings' ],
2706		run: function(cache) {
2707			var margin = this.settings.margin || '',
2708				grid = !this.settings.autoWidth,
2709				rtl = this.settings.rtl,
2710				css = {
2711					'width': 'auto',
2712					'margin-left': rtl ? margin : '',
2713					'margin-right': rtl ? '' : margin
2714				};
2715
2716			!grid && this.$stage.children().css(css);
2717
2718			cache.css = css;
2719		}
2720	}, {
2721		filter: [ 'width', 'items', 'settings' ],
2722		run: function(cache) {
2723			var width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,
2724				merge = null,
2725				iterator = this._items.length,
2726				grid = !this.settings.autoWidth,
2727				widths = [];
2728
2729			cache.items = {
2730				merge: false,
2731				width: width
2732			};
2733
2734			while (iterator--) {
2735				merge = this._mergers[iterator];
2736				merge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;
2737
2738				cache.items.merge = merge > 1 || cache.items.merge;
2739
2740				widths[iterator] = !grid ? this._items[iterator].width() : width * merge;
2741			}
2742
2743			this._widths = widths;
2744		}
2745	}, {
2746		filter: [ 'items', 'settings' ],
2747		run: function() {
2748			var clones = [],
2749				items = this._items,
2750				settings = this.settings,
2751				// TODO: Should be computed from number of min width items in stage
2752				view = Math.max(settings.items * 2, 4),
2753				size = Math.ceil(items.length / 2) * 2,
2754				repeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,
2755				append = '',
2756				prepend = '';
2757
2758			repeat /= 2;
2759
2760			while (repeat > 0) {
2761				// Switch to only using appended clones
2762				clones.push(this.normalize(clones.length / 2, true));
2763				append = append + items[clones[clones.length - 1]][0].outerHTML;
2764				clones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));
2765				prepend = items[clones[clones.length - 1]][0].outerHTML + prepend;
2766				repeat -= 1;
2767			}
2768
2769			this._clones = clones;
2770
2771			$(append).addClass('cloned').appendTo(this.$stage);
2772			$(prepend).addClass('cloned').prependTo(this.$stage);
2773		}
2774	}, {
2775		filter: [ 'width', 'items', 'settings' ],
2776		run: function() {
2777			var rtl = this.settings.rtl ? 1 : -1,
2778				size = this._clones.length + this._items.length,
2779				iterator = -1,
2780				previous = 0,
2781				current = 0,
2782				coordinates = [];
2783
2784			while (++iterator < size) {
2785				previous = coordinates[iterator - 1] || 0;
2786				current = this._widths[this.relative(iterator)] + this.settings.margin;
2787				coordinates.push(previous + current * rtl);
2788			}
2789
2790			this._coordinates = coordinates;
2791		}
2792	}, {
2793		filter: [ 'width', 'items', 'settings' ],
2794		run: function() {
2795			var padding = this.settings.stagePadding,
2796				coordinates = this._coordinates,
2797				css = {
2798					'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,
2799					'padding-left': padding || '',
2800					'padding-right': padding || ''
2801				};
2802
2803			this.$stage.css(css);
2804		}
2805	}, {
2806		filter: [ 'width', 'items', 'settings' ],
2807		run: function(cache) {
2808			var iterator = this._coordinates.length,
2809				grid = !this.settings.autoWidth,
2810				items = this.$stage.children();
2811
2812			if (grid && cache.items.merge) {
2813				while (iterator--) {
2814					cache.css.width = this._widths[this.relative(iterator)];
2815					items.eq(iterator).css(cache.css);
2816				}
2817			} else if (grid) {
2818				cache.css.width = cache.items.width;
2819				items.css(cache.css);
2820			}
2821		}
2822	}, {
2823		filter: [ 'items' ],
2824		run: function() {
2825			this._coordinates.length < 1 && this.$stage.removeAttr('style');
2826		}
2827	}, {
2828		filter: [ 'width', 'items', 'settings' ],
2829		run: function(cache) {
2830			cache.current = cache.current ? this.$stage.children().index(cache.current) : 0;
2831			cache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));
2832			this.reset(cache.current);
2833		}
2834	}, {
2835		filter: [ 'position' ],
2836		run: function() {
2837			this.animate(this.coordinates(this._current));
2838		}
2839	}, {
2840		filter: [ 'width', 'position', 'items', 'settings' ],
2841		run: function() {
2842			var rtl = this.settings.rtl ? 1 : -1,
2843				padding = this.settings.stagePadding * 2,
2844				begin = this.coordinates(this.current()) + padding,
2845				end = begin + this.width() * rtl,
2846				inner, outer, matches = [], i, n;
2847
2848			for (i = 0, n = this._coordinates.length; i < n; i++) {
2849				inner = this._coordinates[i - 1] || 0;
2850				outer = Math.abs(this._coordinates[i]) + padding * rtl;
2851
2852				if ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))
2853					|| (this.op(outer, '<', begin) && this.op(outer, '>', end))) {
2854					matches.push(i);
2855				}
2856			}
2857
2858			this.$stage.children('.active').removeClass('active');
2859			this.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');
2860
2861			this.$stage.children('.center').removeClass('center');
2862			if (this.settings.center) {
2863				this.$stage.children().eq(this.current()).addClass('center');
2864			}
2865		}
2866	} ];
2867
2868	/**
2869	 * Create the stage DOM element
2870	 */
2871	Owl.prototype.initializeStage = function() {
2872		this.$stage = this.$element.find('.' + this.settings.stageClass);
2873
2874		// if the stage is already in the DOM, grab it and skip stage initialization
2875		if (this.$stage.length) {
2876			return;
2877		}
2878
2879		this.$element.addClass(this.options.loadingClass);
2880
2881		// create stage
2882		this.$stage = $('<' + this.settings.stageElement + '>', {
2883			"class": this.settings.stageClass
2884		}).wrap( $( '<div/>', {
2885			"class": this.settings.stageOuterClass
2886		}));
2887
2888		// append stage
2889		this.$element.append(this.$stage.parent());
2890	};
2891
2892	/**
2893	 * Create item DOM elements
2894	 */
2895	Owl.prototype.initializeItems = function() {
2896		var $items = this.$element.find('.owl-item');
2897
2898		// if the items are already in the DOM, grab them and skip item initialization
2899		if ($items.length) {
2900			this._items = $items.get().map(function(item) {
2901				return $(item);
2902			});
2903
2904			this._mergers = this._items.map(function() {
2905				return 1;
2906			});
2907
2908			this.refresh();
2909
2910			return;
2911		}
2912
2913		// append content
2914		this.replace(this.$element.children().not(this.$stage.parent()));
2915
2916		// check visibility
2917		if (this.isVisible()) {
2918			// update view
2919			this.refresh();
2920		} else {
2921			// invalidate width
2922			this.invalidate('width');
2923		}
2924
2925		this.$element
2926			.removeClass(this.options.loadingClass)
2927			.addClass(this.options.loadedClass);
2928	};
2929
2930	/**
2931	 * Initializes the carousel.
2932	 * @protected
2933	 */
2934	Owl.prototype.initialize = function() {
2935		this.enter('initializing');
2936		this.trigger('initialize');
2937
2938		this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);
2939
2940		if (this.settings.autoWidth && !this.is('pre-loading')) {
2941			var imgs, nestedSelector, width;
2942			imgs = this.$element.find('img');
2943			nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;
2944			width = this.$element.children(nestedSelector).width();
2945
2946			if (imgs.length && width <= 0) {
2947				this.preloadAutoWidthImages(imgs);
2948			}
2949		}
2950
2951		this.initializeStage();
2952		this.initializeItems();
2953
2954		// register event handlers
2955		this.registerEventHandlers();
2956
2957		this.leave('initializing');
2958		this.trigger('initialized');
2959	};
2960
2961	/**
2962	 * @returns {Boolean} visibility of $element
2963	 *                    if you know the carousel will always be visible you can set `checkVisibility` to `false` to
2964	 *                    prevent the expensive browser layout forced reflow the $element.is(':visible') does
2965	 */
2966	Owl.prototype.isVisible = function() {
2967		return this.settings.checkVisibility
2968			? this.$element.is(':visible')
2969			: true;
2970	};
2971
2972	/**
2973	 * Setups the current settings.
2974	 * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?
2975	 * @todo Support for media queries by using `matchMedia` would be nice.
2976	 * @public
2977	 */
2978	Owl.prototype.setup = function() {
2979		var viewport = this.viewport(),
2980			overwrites = this.options.responsive,
2981			match = -1,
2982			settings = null;
2983
2984		if (!overwrites) {
2985			settings = $.extend({}, this.options);
2986		} else {
2987			$.each(overwrites, function(breakpoint) {
2988				if (breakpoint <= viewport && breakpoint > match) {
2989					match = Number(breakpoint);
2990				}
2991			});
2992
2993			settings = $.extend({}, this.options, overwrites[match]);
2994			if (typeof settings.stagePadding === 'function') {
2995				settings.stagePadding = settings.stagePadding();
2996			}
2997			delete settings.responsive;
2998
2999			// responsive class
3000			if (settings.responsiveClass) {
3001				this.$element.attr('class',
3002					this.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\S+\\s', 'g'), '$1' + match)
3003				);
3004			}
3005		}
3006
3007		this.trigger('change', { property: { name: 'settings', value: settings } });
3008		this._breakpoint = match;
3009		this.settings = settings;
3010		this.invalidate('settings');
3011		this.trigger('changed', { property: { name: 'settings', value: this.settings } });
3012	};
3013
3014	/**
3015	 * Updates option logic if necessery.
3016	 * @protected
3017	 */
3018	Owl.prototype.optionsLogic = function() {
3019		if (this.settings.autoWidth) {
3020			this.settings.stagePadding = false;
3021			this.settings.merge = false;
3022		}
3023	};
3024
3025	/**
3026	 * Prepares an item before add.
3027	 * @todo Rename event parameter `content` to `item`.
3028	 * @protected
3029	 * @returns {jQuery|HTMLElement} - The item container.
3030	 */
3031	Owl.prototype.prepare = function(item) {
3032		var event = this.trigger('prepare', { content: item });
3033
3034		if (!event.data) {
3035			event.data = $('<' + this.settings.itemElement + '/>')
3036				.addClass(this.options.itemClass).append(item)
3037		}
3038
3039		this.trigger('prepared', { content: event.data });
3040
3041		return event.data;
3042	};
3043
3044	/**
3045	 * Updates the view.
3046	 * @public
3047	 */
3048	Owl.prototype.update = function() {
3049		var i = 0,
3050			n = this._pipe.length,
3051			filter = $.proxy(function(p) { return this[p] }, this._invalidated),
3052			cache = {};
3053
3054		while (i < n) {
3055			if (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {
3056				this._pipe[i].run(cache);
3057			}
3058			i++;
3059		}
3060
3061		this._invalidated = {};
3062
3063		!this.is('valid') && this.enter('valid');
3064	};
3065
3066	/**
3067	 * Gets the width of the view.
3068	 * @public
3069	 * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.
3070	 * @returns {Number} - The width of the view in pixel.
3071	 */
3072	Owl.prototype.width = function(dimension) {
3073		dimension = dimension || Owl.Width.Default;
3074		switch (dimension) {
3075			case Owl.Width.Inner:
3076			case Owl.Width.Outer:
3077				return this._width;
3078			default:
3079				return this._width - this.settings.stagePadding * 2 + this.settings.margin;
3080		}
3081	};
3082
3083	/**
3084	 * Refreshes the carousel primarily for adaptive purposes.
3085	 * @public
3086	 */
3087	Owl.prototype.refresh = function() {
3088		this.enter('refreshing');
3089		this.trigger('refresh');
3090
3091		this.setup();
3092
3093		this.optionsLogic();
3094
3095		this.$element.addClass(this.options.refreshClass);
3096
3097		this.update();
3098
3099		this.$element.removeClass(this.options.refreshClass);
3100
3101		this.leave('refreshing');
3102		this.trigger('refreshed');
3103	};
3104
3105	/**
3106	 * Checks window `resize` event.
3107	 * @protected
3108	 */
3109	Owl.prototype.onThrottledResize = function() {
3110		window.clearTimeout(this.resizeTimer);
3111		this.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);
3112	};
3113
3114	/**
3115	 * Checks window `resize` event.
3116	 * @protected
3117	 */
3118	Owl.prototype.onResize = function() {
3119		if (!this._items.length) {
3120			return false;
3121		}
3122
3123		if (this._width === this.$element.width()) {
3124			return false;
3125		}
3126
3127		if (!this.isVisible()) {
3128			return false;
3129		}
3130
3131		this.enter('resizing');
3132
3133		if (this.trigger('resize').isDefaultPrevented()) {
3134			this.leave('resizing');
3135			return false;
3136		}
3137
3138		this.invalidate('width');
3139
3140		this.refresh();
3141
3142		this.leave('resizing');
3143		this.trigger('resized');
3144	};
3145
3146	/**
3147	 * Registers event handlers.
3148	 * @todo Check `msPointerEnabled`
3149	 * @todo #261
3150	 * @protected
3151	 */
3152	Owl.prototype.registerEventHandlers = function() {
3153		if ($.support.transition) {
3154			this.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));
3155		}
3156
3157		if (this.settings.responsive !== false) {
3158			this.on(window, 'resize', this._handlers.onThrottledResize);
3159		}
3160
3161		if (this.settings.mouseDrag) {
3162			this.$element.addClass(this.options.dragClass);
3163			this.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));
3164			this.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false });
3165		}
3166
3167		if (this.settings.touchDrag){
3168			this.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));
3169			this.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));
3170		}
3171	};
3172
3173	/**
3174	 * Handles `touchstart` and `mousedown` events.
3175	 * @todo Horizontal swipe threshold as option
3176	 * @todo #261
3177	 * @protected
3178	 * @param {Event} event - The event arguments.
3179	 */
3180	Owl.prototype.onDragStart = function(event) {
3181		var stage = null;
3182
3183		if (event.which === 3) {
3184			return;
3185		}
3186
3187		if ($.support.transform) {
3188			stage = this.$stage.css('transform').replace(/.*\(|\)| /g, '').split(',');
3189			stage = {
3190				x: stage[stage.length === 16 ? 12 : 4],
3191				y: stage[stage.length === 16 ? 13 : 5]
3192			};
3193		} else {
3194			stage = this.$stage.position();
3195			stage = {
3196				x: this.settings.rtl ?
3197					stage.left + this.$stage.width() - this.width() + this.settings.margin :
3198					stage.left,
3199				y: stage.top
3200			};
3201		}
3202
3203		if (this.is('animating')) {
3204			$.support.transform ? this.animate(stage.x) : this.$stage.stop()
3205			this.invalidate('position');
3206		}
3207
3208		this.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');
3209
3210		this.speed(0);
3211
3212		this._drag.time = new Date().getTime();
3213		this._drag.target = $(event.target);
3214		this._drag.stage.start = stage;
3215		this._drag.stage.current = stage;
3216		this._drag.pointer = this.pointer(event);
3217
3218		$(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));
3219
3220		$(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) {
3221			var delta = this.difference(this._drag.pointer, this.pointer(event));
3222
3223			$(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));
3224
3225			if (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {
3226				return;
3227			}
3228
3229			event.preventDefault();
3230
3231			this.enter('dragging');
3232			this.trigger('drag');
3233		}, this));
3234	};
3235
3236	/**
3237	 * Handles the `touchmove` and `mousemove` events.
3238	 * @todo #261
3239	 * @protected
3240	 * @param {Event} event - The event arguments.
3241	 */
3242	Owl.prototype.onDragMove = function(event) {
3243		var minimum = null,
3244			maximum = null,
3245			pull = null,
3246			delta = this.difference(this._drag.pointer, this.pointer(event)),
3247			stage = this.difference(this._drag.stage.start, delta);
3248
3249		if (!this.is('dragging')) {
3250			return;
3251		}
3252
3253		event.preventDefault();
3254
3255		if (this.settings.loop) {
3256			minimum = this.coordinates(this.minimum());
3257			maximum = this.coordinates(this.maximum() + 1) - minimum;
3258			stage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum;
3259		} else {
3260			minimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());
3261			maximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());
3262			pull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;
3263			stage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);
3264		}
3265
3266		this._drag.stage.current = stage;
3267
3268		this.animate(stage.x);
3269	};
3270
3271	/**
3272	 * Handles the `touchend` and `mouseup` events.
3273	 * @todo #261
3274	 * @todo Threshold for click event
3275	 * @protected
3276	 * @param {Event} event - The event arguments.
3277	 */
3278	Owl.prototype.onDragEnd = function(event) {
3279		var delta = this.difference(this._drag.pointer, this.pointer(event)),
3280			stage = this._drag.stage.current,
3281			direction = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';
3282
3283		$(document).off('.owl.core');
3284
3285		this.$element.removeClass(this.options.grabClass);
3286
3287		if (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {
3288			this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);
3289			this.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));
3290			this.invalidate('position');
3291			this.update();
3292
3293			this._drag.direction = direction;
3294
3295			if (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {
3296				this._drag.target.one('click.owl.core', function() { return false; });
3297			}
3298		}
3299
3300		if (!this.is('dragging')) {
3301			return;
3302		}
3303
3304		this.leave('dragging');
3305		this.trigger('dragged');
3306	};
3307
3308	/**
3309	 * Gets absolute position of the closest item for a coordinate.
3310	 * @todo Setting `freeDrag` makes `closest` not reusable. See #165.
3311	 * @protected
3312	 * @param {Number} coordinate - The coordinate in pixel.
3313	 * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.
3314	 * @return {Number} - The absolute position of the closest item.
3315	 */
3316	Owl.prototype.closest = function(coordinate, direction) {
3317		var position = -1,
3318			pull = 30,
3319			width = this.width(),
3320			coordinates = this.coordinates();
3321
3322		if (!this.settings.freeDrag) {
3323			// check closest item
3324			$.each(coordinates, $.proxy(function(index, value) {
3325				// on a left pull, check on current index
3326				if (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {
3327					position = index;
3328				// on a right pull, check on previous index
3329				// to do so, subtract width from value and set position = index + 1
3330				} else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {
3331					position = index + 1;
3332				} else if (this.op(coordinate, '<', value)
3333					&& this.op(coordinate, '>', coordinates[index + 1] !== undefined ? coordinates[index + 1] : value - width)) {
3334					position = direction === 'left' ? index + 1 : index;
3335				}
3336				return position === -1;
3337			}, this));
3338		}
3339
3340		if (!this.settings.loop) {
3341			// non loop boundries
3342			if (this.op(coordinate, '>', coordinates[this.minimum()])) {
3343				position = coordinate = this.minimum();
3344			} else if (this.op(coordinate, '<', coordinates[this.maximum()])) {
3345				position = coordinate = this.maximum();
3346			}
3347		}
3348
3349		return position;
3350	};
3351
3352	/**
3353	 * Animates the stage.
3354	 * @todo #270
3355	 * @public
3356	 * @param {Number} coordinate - The coordinate in pixels.
3357	 */
3358	Owl.prototype.animate = function(coordinate) {
3359		var animate = this.speed() > 0;
3360
3361		this.is('animating') && this.onTransitionEnd();
3362
3363		if (animate) {
3364			this.enter('animating');
3365			this.trigger('translate');
3366		}
3367
3368		if ($.support.transform3d && $.support.transition) {
3369			this.$stage.css({
3370				transform: 'translate3d(' + coordinate + 'px,0px,0px)',
3371				transition: (this.speed() / 1000) + 's' + (
3372					this.settings.slideTransition ? ' ' + this.settings.slideTransition : ''
3373				)
3374			});
3375		} else if (animate) {
3376			this.$stage.animate({
3377				left: coordinate + 'px'
3378			}, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));
3379		} else {
3380			this.$stage.css({
3381				left: coordinate + 'px'
3382			});
3383		}
3384	};
3385
3386	/**
3387	 * Checks whether the carousel is in a specific state or not.
3388	 * @param {String} state - The state to check.
3389	 * @returns {Boolean} - The flag which indicates if the carousel is busy.
3390	 */
3391	Owl.prototype.is = function(state) {
3392		return this._states.current[state] && this._states.current[state] > 0;
3393	};
3394
3395	/**
3396	 * Sets the absolute position of the current item.
3397	 * @public
3398	 * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.
3399	 * @returns {Number} - The absolute position of the current item.
3400	 */
3401	Owl.prototype.current = function(position) {
3402		if (position === undefined) {
3403			return this._current;
3404		}
3405
3406		if (this._items.length === 0) {
3407			return undefined;
3408		}
3409
3410		position = this.normalize(position);
3411
3412		if (this._current !== position) {
3413			var event = this.trigger('change', { property: { name: 'position', value: position } });
3414
3415			if (event.data !== undefined) {
3416				position = this.normalize(event.data);
3417			}
3418
3419			this._current = position;
3420
3421			this.invalidate('position');
3422
3423			this.trigger('changed', { property: { name: 'position', value: this._current } });
3424		}
3425
3426		return this._current;
3427	};
3428
3429	/**
3430	 * Invalidates the given part of the update routine.
3431	 * @param {String} [part] - The part to invalidate.
3432	 * @returns {Array.<String>} - The invalidated parts.
3433	 */
3434	Owl.prototype.invalidate = function(part) {
3435		if ($.type(part) === 'string') {
3436			this._invalidated[part] = true;
3437			this.is('valid') && this.leave('valid');
3438		}
3439		return $.map(this._invalidated, function(v, i) { return i });
3440	};
3441
3442	/**
3443	 * Resets the absolute position of the current item.
3444	 * @public
3445	 * @param {Number} position - The absolute position of the new item.
3446	 */
3447	Owl.prototype.reset = function(position) {
3448		position = this.normalize(position);
3449
3450		if (position === undefined) {
3451			return;
3452		}
3453
3454		this._speed = 0;
3455		this._current = position;
3456
3457		this.suppress([ 'translate', 'translated' ]);
3458
3459		this.animate(this.coordinates(position));
3460
3461		this.release([ 'translate', 'translated' ]);
3462	};
3463
3464	/**
3465	 * Normalizes an absolute or a relative position of an item.
3466	 * @public
3467	 * @param {Number} position - The absolute or relative position to normalize.
3468	 * @param {Boolean} [relative=false] - Whether the given position is relative or not.
3469	 * @returns {Number} - The normalized position.
3470	 */
3471	Owl.prototype.normalize = function(position, relative) {
3472		var n = this._items.length,
3473			m = relative ? 0 : this._clones.length;
3474
3475		if (!this.isNumeric(position) || n < 1) {
3476			position = undefined;
3477		} else if (position < 0 || position >= n + m) {
3478			position = ((position - m / 2) % n + n) % n + m / 2;
3479		}
3480
3481		return position;
3482	};
3483
3484	/**
3485	 * Converts an absolute position of an item into a relative one.
3486	 * @public
3487	 * @param {Number} position - The absolute position to convert.
3488	 * @returns {Number} - The converted position.
3489	 */
3490	Owl.prototype.relative = function(position) {
3491		position -= this._clones.length / 2;
3492		return this.normalize(position, true);
3493	};
3494
3495	/**
3496	 * Gets the maximum position for the current item.
3497	 * @public
3498	 * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
3499	 * @returns {Number}
3500	 */
3501	Owl.prototype.maximum = function(relative) {
3502		var settings = this.settings,
3503			maximum = this._coordinates.length,
3504			iterator,
3505			reciprocalItemsWidth,
3506			elementWidth;
3507
3508		if (settings.loop) {
3509			maximum = this._clones.length / 2 + this._items.length - 1;
3510		} else if (settings.autoWidth || settings.merge) {
3511			iterator = this._items.length;
3512			if (iterator) {
3513				reciprocalItemsWidth = this._items[--iterator].width();
3514				elementWidth = this.$element.width();
3515				while (iterator--) {
3516					reciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;
3517					if (reciprocalItemsWidth > elementWidth) {
3518						break;
3519					}
3520				}
3521			}
3522			maximum = iterator + 1;
3523		} else if (settings.center) {
3524			maximum = this._items.length - 1;
3525		} else {
3526			maximum = this._items.length - settings.items;
3527		}
3528
3529		if (relative) {
3530			maximum -= this._clones.length / 2;
3531		}
3532
3533		return Math.max(maximum, 0);
3534	};
3535
3536	/**
3537	 * Gets the minimum position for the current item.
3538	 * @public
3539	 * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
3540	 * @returns {Number}
3541	 */
3542	Owl.prototype.minimum = function(relative) {
3543		return relative ? 0 : this._clones.length / 2;
3544	};
3545
3546	/**
3547	 * Gets an item at the specified relative position.
3548	 * @public
3549	 * @param {Number} [position] - The relative position of the item.
3550	 * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.
3551	 */
3552	Owl.prototype.items = function(position) {
3553		if (position === undefined) {
3554			return this._items.slice();
3555		}
3556
3557		position = this.normalize(position, true);
3558		return this._items[position];
3559	};
3560
3561	/**
3562	 * Gets an item at the specified relative position.
3563	 * @public
3564	 * @param {Number} [position] - The relative position of the item.
3565	 * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.
3566	 */
3567	Owl.prototype.mergers = function(position) {
3568		if (position === undefined) {
3569			return this._mergers.slice();
3570		}
3571
3572		position = this.normalize(position, true);
3573		return this._mergers[position];
3574	};
3575
3576	/**
3577	 * Gets the absolute positions of clones for an item.
3578	 * @public
3579	 * @param {Number} [position] - The relative position of the item.
3580	 * @returns {Array.<Number>} - The absolute positions of clones for the item or all if no position was given.
3581	 */
3582	Owl.prototype.clones = function(position) {
3583		var odd = this._clones.length / 2,
3584			even = odd + this._items.length,
3585			map = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };
3586
3587		if (position === undefined) {
3588			return $.map(this._clones, function(v, i) { return map(i) });
3589		}
3590
3591		return $.map(this._clones, function(v, i) { return v === position ? map(i) : null });
3592	};
3593
3594	/**
3595	 * Sets the current animation speed.
3596	 * @public
3597	 * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.
3598	 * @returns {Number} - The current animation speed in milliseconds.
3599	 */
3600	Owl.prototype.speed = function(speed) {
3601		if (speed !== undefined) {
3602			this._speed = speed;
3603		}
3604
3605		return this._speed;
3606	};
3607
3608	/**
3609	 * Gets the coordinate of an item.
3610	 * @todo The name of this method is missleanding.
3611	 * @public
3612	 * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.
3613	 * @returns {Number|Array.<Number>} - The coordinate of the item in pixel or all coordinates.
3614	 */
3615	Owl.prototype.coordinates = function(position) {
3616		var multiplier = 1,
3617			newPosition = position - 1,
3618			coordinate;
3619
3620		if (position === undefined) {
3621			return $.map(this._coordinates, $.proxy(function(coordinate, index) {
3622				return this.coordinates(index);
3623			}, this));
3624		}
3625
3626		if (this.settings.center) {
3627			if (this.settings.rtl) {
3628				multiplier = -1;
3629				newPosition = position + 1;
3630			}
3631
3632			coordinate = this._coordinates[position];
3633			coordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;
3634		} else {
3635			coordinate = this._coordinates[newPosition] || 0;
3636		}
3637
3638		coordinate = Math.ceil(coordinate);
3639
3640		return coordinate;
3641	};
3642
3643	/**
3644	 * Calculates the speed for a translation.
3645	 * @protected
3646	 * @param {Number} from - The absolute position of the start item.
3647	 * @param {Number} to - The absolute position of the target item.
3648	 * @param {Number} [factor=undefined] - The time factor in milliseconds.
3649	 * @returns {Number} - The time in milliseconds for the translation.
3650	 */
3651	Owl.prototype.duration = function(from, to, factor) {
3652		if (factor === 0) {
3653			return 0;
3654		}
3655
3656		return Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));
3657	};
3658
3659	/**
3660	 * Slides to the specified item.
3661	 * @public
3662	 * @param {Number} position - The position of the item.
3663	 * @param {Number} [speed] - The time in milliseconds for the transition.
3664	 */
3665	Owl.prototype.to = function(position, speed) {
3666		var current = this.current(),
3667			revert = null,
3668			distance = position - this.relative(current),
3669			direction = (distance > 0) - (distance < 0),
3670			items = this._items.length,
3671			minimum = this.minimum(),
3672			maximum = this.maximum();
3673
3674		if (this.settings.loop) {
3675			if (!this.settings.rewind && Math.abs(distance) > items / 2) {
3676				distance += direction * -1 * items;
3677			}
3678
3679			position = current + distance;
3680			revert = ((position - minimum) % items + items) % items + minimum;
3681
3682			if (revert !== position && revert - distance <= maximum && revert - distance > 0) {
3683				current = revert - distance;
3684				position = revert;
3685				this.reset(current);
3686			}
3687		} else if (this.settings.rewind) {
3688			maximum += 1;
3689			position = (position % maximum + maximum) % maximum;
3690		} else {
3691			position = Math.max(minimum, Math.min(maximum, position));
3692		}
3693
3694		this.speed(this.duration(current, position, speed));
3695		this.current(position);
3696
3697		if (this.isVisible()) {
3698			this.update();
3699		}
3700	};
3701
3702	/**
3703	 * Slides to the next item.
3704	 * @public
3705	 * @param {Number} [speed] - The time in milliseconds for the transition.
3706	 */
3707	Owl.prototype.next = function(speed) {
3708		speed = speed || false;
3709		this.to(this.relative(this.current()) + 1, speed);
3710	};
3711
3712	/**
3713	 * Slides to the previous item.
3714	 * @public
3715	 * @param {Number} [speed] - The time in milliseconds for the transition.
3716	 */
3717	Owl.prototype.prev = function(speed) {
3718		speed = speed || false;
3719		this.to(this.relative(this.current()) - 1, speed);
3720	};
3721
3722	/**
3723	 * Handles the end of an animation.
3724	 * @protected
3725	 * @param {Event} event - The event arguments.
3726	 */
3727	Owl.prototype.onTransitionEnd = function(event) {
3728
3729		// if css2 animation then event object is undefined
3730		if (event !== undefined) {
3731			event.stopPropagation();
3732
3733			// Catch only owl-stage transitionEnd event
3734			if ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {
3735				return false;
3736			}
3737		}
3738
3739		this.leave('animating');
3740		this.trigger('translated');
3741	};
3742
3743	/**
3744	 * Gets viewport width.
3745	 * @protected
3746	 * @return {Number} - The width in pixel.
3747	 */
3748	Owl.prototype.viewport = function() {
3749		var width;
3750		if (this.options.responsiveBaseElement !== window) {
3751			width = $(this.options.responsiveBaseElement).width();
3752		} else if (window.innerWidth) {
3753			width = window.innerWidth;
3754		} else if (document.documentElement && document.documentElement.clientWidth) {
3755			width = document.documentElement.clientWidth;
3756		} else {
3757			console.warn('Can not detect viewport width.');
3758		}
3759		return width;
3760	};
3761
3762	/**
3763	 * Replaces the current content.
3764	 * @public
3765	 * @param {HTMLElement|jQuery|String} content - The new content.
3766	 */
3767	Owl.prototype.replace = function(content) {
3768		this.$stage.empty();
3769		this._items = [];
3770
3771		if (content) {
3772			content = (content instanceof jQuery) ? content : $(content);
3773		}
3774
3775		if (this.settings.nestedItemSelector) {
3776			content = content.find('.' + this.settings.nestedItemSelector);
3777		}
3778
3779		content.filter(function() {
3780			return this.nodeType === 1;
3781		}).each($.proxy(function(index, item) {
3782			item = this.prepare(item);
3783			this.$stage.append(item);
3784			this._items.push(item);
3785			this._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
3786		}, this));
3787
3788		this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);
3789
3790		this.invalidate('items');
3791	};
3792
3793	/**
3794	 * Adds an item.
3795	 * @todo Use `item` instead of `content` for the event arguments.
3796	 * @public
3797	 * @param {HTMLElement|jQuery|String} content - The item content to add.
3798	 * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.
3799	 */
3800	Owl.prototype.add = function(content, position) {
3801		var current = this.relative(this._current);
3802
3803		position = position === undefined ? this._items.length : this.normalize(position, true);
3804		content = content instanceof jQuery ? content : $(content);
3805
3806		this.trigger('add', { content: content, position: position });
3807
3808		content = this.prepare(content);
3809
3810		if (this._items.length === 0 || position === this._items.length) {
3811			this._items.length === 0 && this.$stage.append(content);
3812			this._items.length !== 0 && this._items[position - 1].after(content);
3813			this._items.push(content);
3814			this._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
3815		} else {
3816			this._items[position].before(content);
3817			this._items.splice(position, 0, content);
3818			this._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
3819		}
3820
3821		this._items[current] && this.reset(this._items[current].index());
3822
3823		this.invalidate('items');
3824
3825		this.trigger('added', { content: content, position: position });
3826	};
3827
3828	/**
3829	 * Removes an item by its position.
3830	 * @todo Use `item` instead of `content` for the event arguments.
3831	 * @public
3832	 * @param {Number} position - The relative position of the item to remove.
3833	 */
3834	Owl.prototype.remove = function(position) {
3835		position = this.normalize(position, true);
3836
3837		if (position === undefined) {
3838			return;
3839		}
3840
3841		this.trigger('remove', { content: this._items[position], position: position });
3842
3843		this._items[position].remove();
3844		this._items.splice(position, 1);
3845		this._mergers.splice(position, 1);
3846
3847		this.invalidate('items');
3848
3849		this.trigger('removed', { content: null, position: position });
3850	};
3851
3852	/**
3853	 * Preloads images with auto width.
3854	 * @todo Replace by a more generic approach
3855	 * @protected
3856	 */
3857	Owl.prototype.preloadAutoWidthImages = function(images) {
3858		images.each($.proxy(function(i, element) {
3859			this.enter('pre-loading');
3860			element = $(element);
3861			$(new Image()).one('load', $.proxy(function(e) {
3862				element.attr('src', e.target.src);
3863				element.css('opacity', 1);
3864				this.leave('pre-loading');
3865				!this.is('pre-loading') && !this.is('initializing') && this.refresh();
3866			}, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));
3867		}, this));
3868	};
3869
3870	/**
3871	 * Destroys the carousel.
3872	 * @public
3873	 */
3874	Owl.prototype.destroy = function() {
3875
3876		this.$element.off('.owl.core');
3877		this.$stage.off('.owl.core');
3878		$(document).off('.owl.core');
3879
3880		if (this.settings.responsive !== false) {
3881			window.clearTimeout(this.resizeTimer);
3882			this.off(window, 'resize', this._handlers.onThrottledResize);
3883		}
3884
3885		for (var i in this._plugins) {
3886			this._plugins[i].destroy();
3887		}
3888
3889		this.$stage.children('.cloned').remove();
3890
3891		this.$stage.unwrap();
3892		this.$stage.children().contents().unwrap();
3893		this.$stage.children().unwrap();
3894		this.$stage.remove();
3895		this.$element
3896			.removeClass(this.options.refreshClass)
3897			.removeClass(this.options.loadingClass)
3898			.removeClass(this.options.loadedClass)
3899			.removeClass(this.options.rtlClass)
3900			.removeClass(this.options.dragClass)
3901			.removeClass(this.options.grabClass)
3902			.attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\S+\\s', 'g'), ''))
3903			.removeData('owl.carousel');
3904	};
3905
3906	/**
3907	 * Operators to calculate right-to-left and left-to-right.
3908	 * @protected
3909	 * @param {Number} [a] - The left side operand.
3910	 * @param {String} [o] - The operator.
3911	 * @param {Number} [b] - The right side operand.
3912	 */
3913	Owl.prototype.op = function(a, o, b) {
3914		var rtl = this.settings.rtl;
3915		switch (o) {
3916			case '<':
3917				return rtl ? a > b : a < b;
3918			case '>':
3919				return rtl ? a < b : a > b;
3920			case '>=':
3921				return rtl ? a <= b : a >= b;
3922			case '<=':
3923				return rtl ? a >= b : a <= b;
3924			default:
3925				break;
3926		}
3927	};
3928
3929	/**
3930	 * Attaches to an internal event.
3931	 * @protected
3932	 * @param {HTMLElement} element - The event source.
3933	 * @param {String} event - The event name.
3934	 * @param {Function} listener - The event handler to attach.
3935	 * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.
3936	 */
3937	Owl.prototype.on = function(element, event, listener, capture) {
3938		if (element.addEventListener) {
3939			element.addEventListener(event, listener, capture);
3940		} else if (element.attachEvent) {
3941			element.attachEvent('on' + event, listener);
3942		}
3943	};
3944
3945	/**
3946	 * Detaches from an internal event.
3947	 * @protected
3948	 * @param {HTMLElement} element - The event source.
3949	 * @param {String} event - The event name.
3950	 * @param {Function} listener - The attached event handler to detach.
3951	 * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.
3952	 */
3953	Owl.prototype.off = function(element, event, listener, capture) {
3954		if (element.removeEventListener) {
3955			element.removeEventListener(event, listener, capture);
3956		} else if (element.detachEvent) {
3957			element.detachEvent('on' + event, listener);
3958		}
3959	};
3960
3961	/**
3962	 * Triggers a public event.
3963	 * @todo Remove `status`, `relatedTarget` should be used instead.
3964	 * @protected
3965	 * @param {String} name - The event name.
3966	 * @param {*} [data=null] - The event data.
3967	 * @param {String} [namespace=carousel] - The event namespace.
3968	 * @param {String} [state] - The state which is associated with the event.
3969	 * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.
3970	 * @returns {Event} - The event arguments.
3971	 */
3972	Owl.prototype.trigger = function(name, data, namespace, state, enter) {
3973		var status = {
3974			item: { count: this._items.length, index: this.current() }
3975		}, handler = $.camelCase(
3976			$.grep([ 'on', name, namespace ], function(v) { return v })
3977				.join('-').toLowerCase()
3978		), event = $.Event(
3979			[ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),
3980			$.extend({ relatedTarget: this }, status, data)
3981		);
3982
3983		if (!this._supress[name]) {
3984			$.each(this._plugins, function(name, plugin) {
3985				if (plugin.onTrigger) {
3986					plugin.onTrigger(event);
3987				}
3988			});
3989
3990			this.register({ type: Owl.Type.Event, name: name });
3991			this.$element.trigger(event);
3992
3993			if (this.settings && typeof this.settings[handler] === 'function') {
3994				this.settings[handler].call(this, event);
3995			}
3996		}
3997
3998		return event;
3999	};
4000
4001	/**
4002	 * Enters a state.
4003	 * @param name - The state name.
4004	 */
4005	Owl.prototype.enter = function(name) {
4006		$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {
4007			if (this._states.current[name] === undefined) {
4008				this._states.current[name] = 0;
4009			}
4010
4011			this._states.current[name]++;
4012		}, this));
4013	};
4014
4015	/**
4016	 * Leaves a state.
4017	 * @param name - The state name.
4018	 */
4019	Owl.prototype.leave = function(name) {
4020		$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {
4021			this._states.current[name]--;
4022		}, this));
4023	};
4024
4025	/**
4026	 * Registers an event or state.
4027	 * @public
4028	 * @param {Object} object - The event or state to register.
4029	 */
4030	Owl.prototype.register = function(object) {
4031		if (object.type === Owl.Type.Event) {
4032			if (!$.event.special[object.name]) {
4033				$.event.special[object.name] = {};
4034			}
4035
4036			if (!$.event.special[object.name].owl) {
4037				var _default = $.event.special[object.name]._default;
4038				$.event.special[object.name]._default = function(e) {
4039					if (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {
4040						return _default.apply(this, arguments);
4041					}
4042					return e.namespace && e.namespace.indexOf('owl') > -1;
4043				};
4044				$.event.special[object.name].owl = true;
4045			}
4046		} else if (object.type === Owl.Type.State) {
4047			if (!this._states.tags[object.name]) {
4048				this._states.tags[object.name] = object.tags;
4049			} else {
4050				this._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);
4051			}
4052
4053			this._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) {
4054				return $.inArray(tag, this._states.tags[object.name]) === i;
4055			}, this));
4056		}
4057	};
4058
4059	/**
4060	 * Suppresses events.
4061	 * @protected
4062	 * @param {Array.<String>} events - The events to suppress.
4063	 */
4064	Owl.prototype.suppress = function(events) {
4065		$.each(events, $.proxy(function(index, event) {
4066			this._supress[event] = true;
4067		}, this));
4068	};
4069
4070	/**
4071	 * Releases suppressed events.
4072	 * @protected
4073	 * @param {Array.<String>} events - The events to release.
4074	 */
4075	Owl.prototype.release = function(events) {
4076		$.each(events, $.proxy(function(index, event) {
4077			delete this._supress[event];
4078		}, this));
4079	};
4080
4081	/**
4082	 * Gets unified pointer coordinates from event.
4083	 * @todo #261
4084	 * @protected
4085	 * @param {Event} - The `mousedown` or `touchstart` event.
4086	 * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.
4087	 */
4088	Owl.prototype.pointer = function(event) {
4089		var result = { x: null, y: null };
4090
4091		event = event.originalEvent || event || window.event;
4092
4093		event = event.touches && event.touches.length ?
4094			event.touches[0] : event.changedTouches && event.changedTouches.length ?
4095				event.changedTouches[0] : event;
4096
4097		if (event.pageX) {
4098			result.x = event.pageX;
4099			result.y = event.pageY;
4100		} else {
4101			result.x = event.clientX;
4102			result.y = event.clientY;
4103		}
4104
4105		return result;
4106	};
4107
4108	/**
4109	 * Determines if the input is a Number or something that can be coerced to a Number
4110	 * @protected
4111	 * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested
4112	 * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number
4113	 */
4114	Owl.prototype.isNumeric = function(number) {
4115		return !isNaN(parseFloat(number));
4116	};
4117
4118	/**
4119	 * Gets the difference of two vectors.
4120	 * @todo #261
4121	 * @protected
4122	 * @param {Object} - The first vector.
4123	 * @param {Object} - The second vector.
4124	 * @returns {Object} - The difference.
4125	 */
4126	Owl.prototype.difference = function(first, second) {
4127		return {
4128			x: first.x - second.x,
4129			y: first.y - second.y
4130		};
4131	};
4132
4133	/**
4134	 * The jQuery Plugin for the Owl Carousel
4135	 * @todo Navigation plugin `next` and `prev`
4136	 * @public
4137	 */
4138	$.fn.owlCarousel = function(option) {
4139		var args = Array.prototype.slice.call(arguments, 1);
4140
4141		return this.each(function() {
4142			var $this = $(this),
4143				data = $this.data('owl.carousel');
4144
4145			if (!data) {
4146				data = new Owl(this, typeof option == 'object' && option);
4147				$this.data('owl.carousel', data);
4148
4149				$.each([
4150					'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'
4151				], function(i, event) {
4152					data.register({ type: Owl.Type.Event, name: event });
4153					data.$element.on(event + '.owl.carousel.core', $.proxy(function(e) {
4154						if (e.namespace && e.relatedTarget !== this) {
4155							this.suppress([ event ]);
4156							data[event].apply(this, [].slice.call(arguments, 1));
4157							this.release([ event ]);
4158						}
4159					}, data));
4160				});
4161			}
4162
4163			if (typeof option == 'string' && option.charAt(0) !== '_') {
4164				data[option].apply(data, args);
4165			}
4166		});
4167	};
4168
4169	/**
4170	 * The constructor for the jQuery Plugin
4171	 * @public
4172	 */
4173	$.fn.owlCarousel.Constructor = Owl;
4174
4175})(window.Zepto || window.jQuery, window, document);
4176
4177/**
4178 * AutoRefresh Plugin
4179 * @version 2.3.4
4180 * @author Artus Kolanowski
4181 * @author David Deutsch
4182 * @license The MIT License (MIT)
4183 */
4184;(function($, window, document, undefined) {
4185
4186	/**
4187	 * Creates the auto refresh plugin.
4188	 * @class The Auto Refresh Plugin
4189	 * @param {Owl} carousel - The Owl Carousel
4190	 */
4191	var AutoRefresh = function(carousel) {
4192		/**
4193		 * Reference to the core.
4194		 * @protected
4195		 * @type {Owl}
4196		 */
4197		this._core = carousel;
4198
4199		/**
4200		 * Refresh interval.
4201		 * @protected
4202		 * @type {number}
4203		 */
4204		this._interval = null;
4205
4206		/**
4207		 * Whether the element is currently visible or not.
4208		 * @protected
4209		 * @type {Boolean}
4210		 */
4211		this._visible = null;
4212
4213		/**
4214		 * All event handlers.
4215		 * @protected
4216		 * @type {Object}
4217		 */
4218		this._handlers = {
4219			'initialized.owl.carousel': $.proxy(function(e) {
4220				if (e.namespace && this._core.settings.autoRefresh) {
4221					this.watch();
4222				}
4223			}, this)
4224		};
4225
4226		// set default options
4227		this._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);
4228
4229		// register event handlers
4230		this._core.$element.on(this._handlers);
4231	};
4232
4233	/**
4234	 * Default options.
4235	 * @public
4236	 */
4237	AutoRefresh.Defaults = {
4238		autoRefresh: true,
4239		autoRefreshInterval: 500
4240	};
4241
4242	/**
4243	 * Watches the element.
4244	 */
4245	AutoRefresh.prototype.watch = function() {
4246		if (this._interval) {
4247			return;
4248		}
4249
4250		this._visible = this._core.isVisible();
4251		this._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);
4252	};
4253
4254	/**
4255	 * Refreshes the element.
4256	 */
4257	AutoRefresh.prototype.refresh = function() {
4258		if (this._core.isVisible() === this._visible) {
4259			return;
4260		}
4261
4262		this._visible = !this._visible;
4263
4264		this._core.$element.toggleClass('owl-hidden', !this._visible);
4265
4266		this._visible && (this._core.invalidate('width') && this._core.refresh());
4267	};
4268
4269	/**
4270	 * Destroys the plugin.
4271	 */
4272	AutoRefresh.prototype.destroy = function() {
4273		var handler, property;
4274
4275		window.clearInterval(this._interval);
4276
4277		for (handler in this._handlers) {
4278			this._core.$element.off(handler, this._handlers[handler]);
4279		}
4280		for (property in Object.getOwnPropertyNames(this)) {
4281			typeof this[property] != 'function' && (this[property] = null);
4282		}
4283	};
4284
4285	$.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;
4286
4287})(window.Zepto || window.jQuery, window, document);
4288
4289/**
4290 * Lazy Plugin
4291 * @version 2.3.4
4292 * @author Bartosz Wojciechowski
4293 * @author David Deutsch
4294 * @license The MIT License (MIT)
4295 */
4296;(function($, window, document, undefined) {
4297
4298	/**
4299	 * Creates the lazy plugin.
4300	 * @class The Lazy Plugin
4301	 * @param {Owl} carousel - The Owl Carousel
4302	 */
4303	var Lazy = function(carousel) {
4304
4305		/**
4306		 * Reference to the core.
4307		 * @protected
4308		 * @type {Owl}
4309		 */
4310		this._core = carousel;
4311
4312		/**
4313		 * Already loaded items.
4314		 * @protected
4315		 * @type {Array.<jQuery>}
4316		 */
4317		this._loaded = [];
4318
4319		/**
4320		 * Event handlers.
4321		 * @protected
4322		 * @type {Object}
4323		 */
4324		this._handlers = {
4325			'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) {
4326				if (!e.namespace) {
4327					return;
4328				}
4329
4330				if (!this._core.settings || !this._core.settings.lazyLoad) {
4331					return;
4332				}
4333
4334				if ((e.property && e.property.name == 'position') || e.type == 'initialized') {
4335					var settings = this._core.settings,
4336						n = (settings.center && Math.ceil(settings.items / 2) || settings.items),
4337						i = ((settings.center && n * -1) || 0),
4338						position = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,
4339						clones = this._core.clones().length,
4340						load = $.proxy(function(i, v) { this.load(v) }, this);
4341					//TODO: Need documentation for this new option
4342					if (settings.lazyLoadEager > 0) {
4343						n += settings.lazyLoadEager;
4344						// If the carousel is looping also preload images that are to the "left"
4345						if (settings.loop) {
4346              position -= settings.lazyLoadEager;
4347              n++;
4348            }
4349					}
4350
4351					while (i++ < n) {
4352						this.load(clones / 2 + this._core.relative(position));
4353						clones && $.each(this._core.clones(this._core.relative(position)), load);
4354						position++;
4355					}
4356				}
4357			}, this)
4358		};
4359
4360		// set the default options
4361		this._core.options = $.extend({}, Lazy.Defaults, this._core.options);
4362
4363		// register event handler
4364		this._core.$element.on(this._handlers);
4365	};
4366
4367	/**
4368	 * Default options.
4369	 * @public
4370	 */
4371	Lazy.Defaults = {
4372		lazyLoad: false,
4373		lazyLoadEager: 0
4374	};
4375
4376	/**
4377	 * Loads all resources of an item at the specified position.
4378	 * @param {Number} position - The absolute position of the item.
4379	 * @protected
4380	 */
4381	Lazy.prototype.load = function(position) {
4382		var $item = this._core.$stage.children().eq(position),
4383			$elements = $item && $item.find('.owl-lazy');
4384
4385		if (!$elements || $.inArray($item.get(0), this._loaded) > -1) {
4386			return;
4387		}
4388
4389		$elements.each($.proxy(function(index, element) {
4390			var $element = $(element), image,
4391                url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src') || $element.attr('data-srcset');
4392
4393			this._core.trigger('load', { element: $element, url: url }, 'lazy');
4394
4395			if ($element.is('img')) {
4396				$element.one('load.owl.lazy', $.proxy(function() {
4397					$element.css('opacity', 1);
4398					this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
4399				}, this)).attr('src', url);
4400            } else if ($element.is('source')) {
4401                $element.one('load.owl.lazy', $.proxy(function() {
4402                    this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
4403                }, this)).attr('srcset', url);
4404			} else {
4405				image = new Image();
4406				image.onload = $.proxy(function() {
4407					$element.css({
4408						'background-image': 'url("' + url + '")',
4409						'opacity': '1'
4410					});
4411					this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
4412				}, this);
4413				image.src = url;
4414			}
4415		}, this));
4416
4417		this._loaded.push($item.get(0));
4418	};
4419
4420	/**
4421	 * Destroys the plugin.
4422	 * @public
4423	 */
4424	Lazy.prototype.destroy = function() {
4425		var handler, property;
4426
4427		for (handler in this.handlers) {
4428			this._core.$element.off(handler, this.handlers[handler]);
4429		}
4430		for (property in Object.getOwnPropertyNames(this)) {
4431			typeof this[property] != 'function' && (this[property] = null);
4432		}
4433	};
4434
4435	$.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;
4436
4437})(window.Zepto || window.jQuery, window, document);
4438
4439/**
4440 * AutoHeight Plugin
4441 * @version 2.3.4
4442 * @author Bartosz Wojciechowski
4443 * @author David Deutsch
4444 * @license The MIT License (MIT)
4445 */
4446;(function($, window, document, undefined) {
4447
4448	/**
4449	 * Creates the auto height plugin.
4450	 * @class The Auto Height Plugin
4451	 * @param {Owl} carousel - The Owl Carousel
4452	 */
4453	var AutoHeight = function(carousel) {
4454		/**
4455		 * Reference to the core.
4456		 * @protected
4457		 * @type {Owl}
4458		 */
4459		this._core = carousel;
4460
4461		this._previousHeight = null;
4462
4463		/**
4464		 * All event handlers.
4465		 * @protected
4466		 * @type {Object}
4467		 */
4468		this._handlers = {
4469			'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) {
4470				if (e.namespace && this._core.settings.autoHeight) {
4471					this.update();
4472				}
4473			}, this),
4474			'changed.owl.carousel': $.proxy(function(e) {
4475				if (e.namespace && this._core.settings.autoHeight && e.property.name === 'position'){
4476					this.update();
4477				}
4478			}, this),
4479			'loaded.owl.lazy': $.proxy(function(e) {
4480				if (e.namespace && this._core.settings.autoHeight
4481					&& e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {
4482					this.update();
4483				}
4484			}, this)
4485		};
4486
4487		// set default options
4488		this._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);
4489
4490		// register event handlers
4491		this._core.$element.on(this._handlers);
4492		this._intervalId = null;
4493		var refThis = this;
4494
4495		// These changes have been taken from a PR by gavrochelegnou proposed in #1575
4496		// and have been made compatible with the latest jQuery version
4497		$(window).on('load', function() {
4498			if (refThis._core.settings.autoHeight) {
4499				refThis.update();
4500			}
4501		});
4502
4503		// Autoresize the height of the carousel when window is resized
4504		// When carousel has images, the height is dependent on the width
4505		// and should also change on resize
4506		$(window).resize(function() {
4507			if (refThis._core.settings.autoHeight) {
4508				if (refThis._intervalId != null) {
4509					clearTimeout(refThis._intervalId);
4510				}
4511
4512				refThis._intervalId = setTimeout(function() {
4513					refThis.update();
4514				}, 250);
4515			}
4516		});
4517
4518	};
4519
4520	/**
4521	 * Default options.
4522	 * @public
4523	 */
4524	AutoHeight.Defaults = {
4525		autoHeight: false,
4526		autoHeightClass: 'owl-height'
4527	};
4528
4529	/**
4530	 * Updates the view.
4531	 */
4532	AutoHeight.prototype.update = function() {
4533		var start = this._core._current,
4534			end = start + this._core.settings.items,
4535			lazyLoadEnabled = this._core.settings.lazyLoad,
4536			visible = this._core.$stage.children().toArray().slice(start, end),
4537			heights = [],
4538			maxheight = 0;
4539
4540		$.each(visible, function(index, item) {
4541			heights.push($(item).height());
4542		});
4543
4544		maxheight = Math.max.apply(null, heights);
4545
4546		if (maxheight <= 1 && lazyLoadEnabled && this._previousHeight) {
4547			maxheight = this._previousHeight;
4548		}
4549
4550		this._previousHeight = maxheight;
4551
4552		this._core.$stage.parent()
4553			.height(maxheight)
4554			.addClass(this._core.settings.autoHeightClass);
4555	};
4556
4557	AutoHeight.prototype.destroy = function() {
4558		var handler, property;
4559
4560		for (handler in this._handlers) {
4561			this._core.$element.off(handler, this._handlers[handler]);
4562		}
4563		for (property in Object.getOwnPropertyNames(this)) {
4564			typeof this[property] !== 'function' && (this[property] = null);
4565		}
4566	};
4567
4568	$.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;
4569
4570})(window.Zepto || window.jQuery, window, document);
4571
4572/**
4573 * Video Plugin
4574 * @version 2.3.4
4575 * @author Bartosz Wojciechowski
4576 * @author David Deutsch
4577 * @license The MIT License (MIT)
4578 */
4579;(function($, window, document, undefined) {
4580
4581	/**
4582	 * Creates the video plugin.
4583	 * @class The Video Plugin
4584	 * @param {Owl} carousel - The Owl Carousel
4585	 */
4586	var Video = function(carousel) {
4587		/**
4588		 * Reference to the core.
4589		 * @protected
4590		 * @type {Owl}
4591		 */
4592		this._core = carousel;
4593
4594		/**
4595		 * Cache all video URLs.
4596		 * @protected
4597		 * @type {Object}
4598		 */
4599		this._videos = {};
4600
4601		/**
4602		 * Current playing item.
4603		 * @protected
4604		 * @type {jQuery}
4605		 */
4606		this._playing = null;
4607
4608		/**
4609		 * All event handlers.
4610		 * @todo The cloned content removale is too late
4611		 * @protected
4612		 * @type {Object}
4613		 */
4614		this._handlers = {
4615			'initialized.owl.carousel': $.proxy(function(e) {
4616				if (e.namespace) {
4617					this._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] });
4618				}
4619			}, this),
4620			'resize.owl.carousel': $.proxy(function(e) {
4621				if (e.namespace && this._core.settings.video && this.isInFullScreen()) {
4622					e.preventDefault();
4623				}
4624			}, this),
4625			'refreshed.owl.carousel': $.proxy(function(e) {
4626				if (e.namespace && this._core.is('resizing')) {
4627					this._core.$stage.find('.cloned .owl-video-frame').remove();
4628				}
4629			}, this),
4630			'changed.owl.carousel': $.proxy(function(e) {
4631				if (e.namespace && e.property.name === 'position' && this._playing) {
4632					this.stop();
4633				}
4634			}, this),
4635			'prepared.owl.carousel': $.proxy(function(e) {
4636				if (!e.namespace) {
4637					return;
4638				}
4639
4640				var $element = $(e.content).find('.owl-video');
4641
4642				if ($element.length) {
4643					$element.css('display', 'none');
4644					this.fetch($element, $(e.content));
4645				}
4646			}, this)
4647		};
4648
4649		// set default options
4650		this._core.options = $.extend({}, Video.Defaults, this._core.options);
4651
4652		// register event handlers
4653		this._core.$element.on(this._handlers);
4654
4655		this._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {
4656			this.play(e);
4657		}, this));
4658	};
4659
4660	/**
4661	 * Default options.
4662	 * @public
4663	 */
4664	Video.Defaults = {
4665		video: false,
4666		videoHeight: false,
4667		videoWidth: false
4668	};
4669
4670	/**
4671	 * Gets the video ID and the type (YouTube/Vimeo/vzaar only).
4672	 * @protected
4673	 * @param {jQuery} target - The target containing the video data.
4674	 * @param {jQuery} item - The item containing the video.
4675	 */
4676	Video.prototype.fetch = function(target, item) {
4677			var type = (function() {
4678					if (target.attr('data-vimeo-id')) {
4679						return 'vimeo';
4680					} else if (target.attr('data-vzaar-id')) {
4681						return 'vzaar'
4682					} else {
4683						return 'youtube';
4684					}
4685				})(),
4686				id = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),
4687				width = target.attr('data-width') || this._core.settings.videoWidth,
4688				height = target.attr('data-height') || this._core.settings.videoHeight,
4689				url = target.attr('href');
4690
4691		if (url) {
4692
4693			/*
4694					Parses the id's out of the following urls (and probably more):
4695					https://www.youtube.com/watch?v=:id
4696					https://youtu.be/:id
4697					https://vimeo.com/:id
4698					https://vimeo.com/channels/:channel/:id
4699					https://vimeo.com/groups/:group/videos/:id
4700					https://app.vzaar.com/videos/:id
4701
4702					Visual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F
4703			*/
4704
4705			id = url.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com|be\-nocookie\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/);
4706
4707			if (id[3].indexOf('youtu') > -1) {
4708				type = 'youtube';
4709			} else if (id[3].indexOf('vimeo') > -1) {
4710				type = 'vimeo';
4711			} else if (id[3].indexOf('vzaar') > -1) {
4712				type = 'vzaar';
4713			} else {
4714				throw new Error('Video URL not supported.');
4715			}
4716			id = id[6];
4717		} else {
4718			throw new Error('Missing video URL.');
4719		}
4720
4721		this._videos[url] = {
4722			type: type,
4723			id: id,
4724			width: width,
4725			height: height
4726		};
4727
4728		item.attr('data-video', url);
4729
4730		this.thumbnail(target, this._videos[url]);
4731	};
4732
4733	/**
4734	 * Creates video thumbnail.
4735	 * @protected
4736	 * @param {jQuery} target - The target containing the video data.
4737	 * @param {Object} info - The video info object.
4738	 * @see `fetch`
4739	 */
4740	Video.prototype.thumbnail = function(target, video) {
4741		var tnLink,
4742			icon,
4743			path,
4744			dimensions = video.width && video.height ? 'width:' + video.width + 'px;height:' + video.height + 'px;' : '',
4745			customTn = target.find('img'),
4746			srcType = 'src',
4747			lazyClass = '',
4748			settings = this._core.settings,
4749			create = function(path) {
4750				icon = '<div class="owl-video-play-icon"></div>';
4751
4752				if (settings.lazyLoad) {
4753					tnLink = $('<div/>',{
4754						"class": 'owl-video-tn ' + lazyClass,
4755						"srcType": path
4756					});
4757				} else {
4758					tnLink = $( '<div/>', {
4759						"class": "owl-video-tn",
4760						"style": 'opacity:1;background-image:url(' + path + ')'
4761					});
4762				}
4763				target.after(tnLink);
4764				target.after(icon);
4765			};
4766
4767		// wrap video content into owl-video-wrapper div
4768		target.wrap( $( '<div/>', {
4769			"class": "owl-video-wrapper",
4770			"style": dimensions
4771		}));
4772
4773		if (this._core.settings.lazyLoad) {
4774			srcType = 'data-src';
4775			lazyClass = 'owl-lazy';
4776		}
4777
4778		// custom thumbnail
4779		if (customTn.length) {
4780			create(customTn.attr(srcType));
4781			customTn.remove();
4782			return false;
4783		}
4784
4785		if (video.type === 'youtube') {
4786			path = "//img.youtube.com/vi/" + video.id + "/hqdefault.jpg";
4787			create(path);
4788		} else if (video.type === 'vimeo') {
4789			$.ajax({
4790				type: 'GET',
4791				url: '//vimeo.com/api/v2/video/' + video.id + '.json',
4792				jsonp: 'callback',
4793				dataType: 'jsonp',
4794				success: function(data) {
4795					path = data[0].thumbnail_large;
4796					create(path);
4797				}
4798			});
4799		} else if (video.type === 'vzaar') {
4800			$.ajax({
4801				type: 'GET',
4802				url: '//vzaar.com/api/videos/' + video.id + '.json',
4803				jsonp: 'callback',
4804				dataType: 'jsonp',
4805				success: function(data) {
4806					path = data.framegrab_url;
4807					create(path);
4808				}
4809			});
4810		}
4811	};
4812
4813	/**
4814	 * Stops the current video.
4815	 * @public
4816	 */
4817	Video.prototype.stop = function() {
4818		this._core.trigger('stop', null, 'video');
4819		this._playing.find('.owl-video-frame').remove();
4820		this._playing.removeClass('owl-video-playing');
4821		this._playing = null;
4822		this._core.leave('playing');
4823		this._core.trigger('stopped', null, 'video');
4824	};
4825
4826	/**
4827	 * Starts the current video.
4828	 * @public
4829	 * @param {Event} event - The event arguments.
4830	 */
4831	Video.prototype.play = function(event) {
4832		var target = $(event.target),
4833			item = target.closest('.' + this._core.settings.itemClass),
4834			video = this._videos[item.attr('data-video')],
4835			width = video.width || '100%',
4836			height = video.height || this._core.$stage.height(),
4837			html,
4838			iframe;
4839
4840		if (this._playing) {
4841			return;
4842		}
4843
4844		this._core.enter('playing');
4845		this._core.trigger('play', null, 'video');
4846
4847		item = this._core.items(this._core.relative(item.index()));
4848
4849		this._core.reset(item.index());
4850
4851		html = $( '<iframe frameborder="0" allowfullscreen mozallowfullscreen webkitAllowFullScreen ></iframe>' );
4852		html.attr( 'height', height );
4853		html.attr( 'width', width );
4854		if (video.type === 'youtube') {
4855			html.attr( 'src', '//www.youtube.com/embed/' + video.id + '?autoplay=1&rel=0&v=' + video.id );
4856		} else if (video.type === 'vimeo') {
4857			html.attr( 'src', '//player.vimeo.com/video/' + video.id + '?autoplay=1' );
4858		} else if (video.type === 'vzaar') {
4859			html.attr( 'src', '//view.vzaar.com/' + video.id + '/player?autoplay=true' );
4860		}
4861
4862		iframe = $(html).wrap( '<div class="owl-video-frame" />' ).insertAfter(item.find('.owl-video'));
4863
4864		this._playing = item.addClass('owl-video-playing');
4865	};
4866
4867	/**
4868	 * Checks whether an video is currently in full screen mode or not.
4869	 * @todo Bad style because looks like a readonly method but changes members.
4870	 * @protected
4871	 * @returns {Boolean}
4872	 */
4873	Video.prototype.isInFullScreen = function() {
4874		var element = document.fullscreenElement || document.mozFullScreenElement ||
4875				document.webkitFullscreenElement;
4876
4877		return element && $(element).parent().hasClass('owl-video-frame');
4878	};
4879
4880	/**
4881	 * Destroys the plugin.
4882	 */
4883	Video.prototype.destroy = function() {
4884		var handler, property;
4885
4886		this._core.$element.off('click.owl.video');
4887
4888		for (handler in this._handlers) {
4889			this._core.$element.off(handler, this._handlers[handler]);
4890		}
4891		for (property in Object.getOwnPropertyNames(this)) {
4892			typeof this[property] != 'function' && (this[property] = null);
4893		}
4894	};
4895
4896	$.fn.owlCarousel.Constructor.Plugins.Video = Video;
4897
4898})(window.Zepto || window.jQuery, window, document);
4899
4900/**
4901 * Animate Plugin
4902 * @version 2.3.4
4903 * @author Bartosz Wojciechowski
4904 * @author David Deutsch
4905 * @license The MIT License (MIT)
4906 */
4907;(function($, window, document, undefined) {
4908
4909	/**
4910	 * Creates the animate plugin.
4911	 * @class The Navigation Plugin
4912	 * @param {Owl} scope - The Owl Carousel
4913	 */
4914	var Animate = function(scope) {
4915		this.core = scope;
4916		this.core.options = $.extend({}, Animate.Defaults, this.core.options);
4917		this.swapping = true;
4918		this.previous = undefined;
4919		this.next = undefined;
4920
4921		this.handlers = {
4922			'change.owl.carousel': $.proxy(function(e) {
4923				if (e.namespace && e.property.name == 'position') {
4924					this.previous = this.core.current();
4925					this.next = e.property.value;
4926				}
4927			}, this),
4928			'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {
4929				if (e.namespace) {
4930					this.swapping = e.type == 'translated';
4931				}
4932			}, this),
4933			'translate.owl.carousel': $.proxy(function(e) {
4934				if (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {
4935					this.swap();
4936				}
4937			}, this)
4938		};
4939
4940		this.core.$element.on(this.handlers);
4941	};
4942
4943	/**
4944	 * Default options.
4945	 * @public
4946	 */
4947	Animate.Defaults = {
4948		animateOut: false,
4949		animateIn: false
4950	};
4951
4952	/**
4953	 * Toggles the animation classes whenever an translations starts.
4954	 * @protected
4955	 * @returns {Boolean|undefined}
4956	 */
4957	Animate.prototype.swap = function() {
4958
4959		if (this.core.settings.items !== 1) {
4960			return;
4961		}
4962
4963		if (!$.support.animation || !$.support.transition) {
4964			return;
4965		}
4966
4967		this.core.speed(0);
4968
4969		var left,
4970			clear = $.proxy(this.clear, this),
4971			previous = this.core.$stage.children().eq(this.previous),
4972			next = this.core.$stage.children().eq(this.next),
4973			incoming = this.core.settings.animateIn,
4974			outgoing = this.core.settings.animateOut;
4975
4976		if (this.core.current() === this.previous) {
4977			return;
4978		}
4979
4980		if (outgoing) {
4981			left = this.core.coordinates(this.previous) - this.core.coordinates(this.next);
4982			previous.one($.support.animation.end, clear)
4983				.css( { 'left': left + 'px' } )
4984				.addClass('animated owl-animated-out')
4985				.addClass(outgoing);
4986		}
4987
4988		if (incoming) {
4989			next.one($.support.animation.end, clear)
4990				.addClass('animated owl-animated-in')
4991				.addClass(incoming);
4992		}
4993	};
4994
4995	Animate.prototype.clear = function(e) {
4996		$(e.target).css( { 'left': '' } )
4997			.removeClass('animated owl-animated-out owl-animated-in')
4998			.removeClass(this.core.settings.animateIn)
4999			.removeClass(this.core.settings.animateOut);
5000		this.core.onTransitionEnd();
5001	};
5002
5003	/**
5004	 * Destroys the plugin.
5005	 * @public
5006	 */
5007	Animate.prototype.destroy = function() {
5008		var handler, property;
5009
5010		for (handler in this.handlers) {
5011			this.core.$element.off(handler, this.handlers[handler]);
5012		}
5013		for (property in Object.getOwnPropertyNames(this)) {
5014			typeof this[property] != 'function' && (this[property] = null);
5015		}
5016	};
5017
5018	$.fn.owlCarousel.Constructor.Plugins.Animate = Animate;
5019
5020})(window.Zepto || window.jQuery, window, document);
5021
5022/**
5023 * Autoplay Plugin
5024 * @version 2.3.4
5025 * @author Bartosz Wojciechowski
5026 * @author Artus Kolanowski
5027 * @author David Deutsch
5028 * @author Tom De Caluwé
5029 * @license The MIT License (MIT)
5030 */
5031;(function($, window, document, undefined) {
5032
5033	/**
5034	 * Creates the autoplay plugin.
5035	 * @class The Autoplay Plugin
5036	 * @param {Owl} scope - The Owl Carousel
5037	 */
5038	var Autoplay = function(carousel) {
5039		/**
5040		 * Reference to the core.
5041		 * @protected
5042		 * @type {Owl}
5043		 */
5044		this._core = carousel;
5045
5046		/**
5047		 * The autoplay timeout id.
5048		 * @type {Number}
5049		 */
5050		this._call = null;
5051
5052		/**
5053		 * Depending on the state of the plugin, this variable contains either
5054		 * the start time of the timer or the current timer value if it's
5055		 * paused. Since we start in a paused state we initialize the timer
5056		 * value.
5057		 * @type {Number}
5058		 */
5059		this._time = 0;
5060
5061		/**
5062		 * Stores the timeout currently used.
5063		 * @type {Number}
5064		 */
5065		this._timeout = 0;
5066
5067		/**
5068		 * Indicates whenever the autoplay is paused.
5069		 * @type {Boolean}
5070		 */
5071		this._paused = true;
5072
5073		/**
5074		 * All event handlers.
5075		 * @protected
5076		 * @type {Object}
5077		 */
5078		this._handlers = {
5079			'changed.owl.carousel': $.proxy(function(e) {
5080				if (e.namespace && e.property.name === 'settings') {
5081					if (this._core.settings.autoplay) {
5082						this.play();
5083					} else {
5084						this.stop();
5085					}
5086				} else if (e.namespace && e.property.name === 'position' && this._paused) {
5087					// Reset the timer. This code is triggered when the position
5088					// of the carousel was changed through user interaction.
5089					this._time = 0;
5090				}
5091			}, this),
5092			'initialized.owl.carousel': $.proxy(function(e) {
5093				if (e.namespace && this._core.settings.autoplay) {
5094					this.play();
5095				}
5096			}, this),
5097			'play.owl.autoplay': $.proxy(function(e, t, s) {
5098				if (e.namespace) {
5099					this.play(t, s);
5100				}
5101			}, this),
5102			'stop.owl.autoplay': $.proxy(function(e) {
5103				if (e.namespace) {
5104					this.stop();
5105				}
5106			}, this),
5107			'mouseover.owl.autoplay': $.proxy(function() {
5108				if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
5109					this.pause();
5110				}
5111			}, this),
5112			'mouseleave.owl.autoplay': $.proxy(function() {
5113				if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
5114					this.play();
5115				}
5116			}, this),
5117			'touchstart.owl.core': $.proxy(function() {
5118				if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
5119					this.pause();
5120				}
5121			}, this),
5122			'touchend.owl.core': $.proxy(function() {
5123				if (this._core.settings.autoplayHoverPause) {
5124					this.play();
5125				}
5126			}, this)
5127		};
5128
5129		// register event handlers
5130		this._core.$element.on(this._handlers);
5131
5132		// set default options
5133		this._core.options = $.extend({}, Autoplay.Defaults, this._core.options);
5134	};
5135
5136	/**
5137	 * Default options.
5138	 * @public
5139	 */
5140	Autoplay.Defaults = {
5141		autoplay: false,
5142		autoplayTimeout: 5000,
5143		autoplayHoverPause: false,
5144		autoplaySpeed: false
5145	};
5146
5147	/**
5148	 * Transition to the next slide and set a timeout for the next transition.
5149	 * @private
5150	 * @param {Number} [speed] - The animation speed for the animations.
5151	 */
5152	Autoplay.prototype._next = function(speed) {
5153		this._call = window.setTimeout(
5154			$.proxy(this._next, this, speed),
5155			this._timeout * (Math.round(this.read() / this._timeout) + 1) - this.read()
5156		);
5157
5158		if (this._core.is('interacting') || document.hidden) {
5159			return;
5160		}
5161		this._core.next(speed || this._core.settings.autoplaySpeed);
5162	}
5163
5164	/**
5165	 * Reads the current timer value when the timer is playing.
5166	 * @public
5167	 */
5168	Autoplay.prototype.read = function() {
5169		return new Date().getTime() - this._time;
5170	};
5171
5172	/**
5173	 * Starts the autoplay.
5174	 * @public
5175	 * @param {Number} [timeout] - The interval before the next animation starts.
5176	 * @param {Number} [speed] - The animation speed for the animations.
5177	 */
5178	Autoplay.prototype.play = function(timeout, speed) {
5179		var elapsed;
5180
5181		if (!this._core.is('rotating')) {
5182			this._core.enter('rotating');
5183		}
5184
5185		timeout = timeout || this._core.settings.autoplayTimeout;
5186
5187		// Calculate the elapsed time since the last transition. If the carousel
5188		// wasn't playing this calculation will yield zero.
5189		elapsed = Math.min(this._time % (this._timeout || timeout), timeout);
5190
5191		if (this._paused) {
5192			// Start the clock.
5193			this._time = this.read();
5194			this._paused = false;
5195		} else {
5196			// Clear the active timeout to allow replacement.
5197			window.clearTimeout(this._call);
5198		}
5199
5200		// Adjust the origin of the timer to match the new timeout value.
5201		this._time += this.read() % timeout - elapsed;
5202
5203		this._timeout = timeout;
5204		this._call = window.setTimeout($.proxy(this._next, this, speed), timeout - elapsed);
5205	};
5206
5207	/**
5208	 * Stops the autoplay.
5209	 * @public
5210	 */
5211	Autoplay.prototype.stop = function() {
5212		if (this._core.is('rotating')) {
5213			// Reset the clock.
5214			this._time = 0;
5215			this._paused = true;
5216
5217			window.clearTimeout(this._call);
5218			this._core.leave('rotating');
5219		}
5220	};
5221
5222	/**
5223	 * Pauses the autoplay.
5224	 * @public
5225	 */
5226	Autoplay.prototype.pause = function() {
5227		if (this._core.is('rotating') && !this._paused) {
5228			// Pause the clock.
5229			this._time = this.read();
5230			this._paused = true;
5231
5232			window.clearTimeout(this._call);
5233		}
5234	};
5235
5236	/**
5237	 * Destroys the plugin.
5238	 */
5239	Autoplay.prototype.destroy = function() {
5240		var handler, property;
5241
5242		this.stop();
5243
5244		for (handler in this._handlers) {
5245			this._core.$element.off(handler, this._handlers[handler]);
5246		}
5247		for (property in Object.getOwnPropertyNames(this)) {
5248			typeof this[property] != 'function' && (this[property] = null);
5249		}
5250	};
5251
5252	$.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;
5253
5254})(window.Zepto || window.jQuery, window, document);
5255
5256/**
5257 * Navigation Plugin
5258 * @version 2.3.4
5259 * @author Artus Kolanowski
5260 * @author David Deutsch
5261 * @license The MIT License (MIT)
5262 */
5263;(function($, window, document, undefined) {
5264	'use strict';
5265
5266	/**
5267	 * Creates the navigation plugin.
5268	 * @class The Navigation Plugin
5269	 * @param {Owl} carousel - The Owl Carousel.
5270	 */
5271	var Navigation = function(carousel) {
5272		/**
5273		 * Reference to the core.
5274		 * @protected
5275		 * @type {Owl}
5276		 */
5277		this._core = carousel;
5278
5279		/**
5280		 * Indicates whether the plugin is initialized or not.
5281		 * @protected
5282		 * @type {Boolean}
5283		 */
5284		this._initialized = false;
5285
5286		/**
5287		 * The current paging indexes.
5288		 * @protected
5289		 * @type {Array}
5290		 */
5291		this._pages = [];
5292
5293		/**
5294		 * All DOM elements of the user interface.
5295		 * @protected
5296		 * @type {Object}
5297		 */
5298		this._controls = {};
5299
5300		/**
5301		 * Markup for an indicator.
5302		 * @protected
5303		 * @type {Array.<String>}
5304		 */
5305		this._templates = [];
5306
5307		/**
5308		 * The carousel element.
5309		 * @type {jQuery}
5310		 */
5311		this.$element = this._core.$element;
5312
5313		/**
5314		 * Overridden methods of the carousel.
5315		 * @protected
5316		 * @type {Object}
5317		 */
5318		this._overrides = {
5319			next: this._core.next,
5320			prev: this._core.prev,
5321			to: this._core.to
5322		};
5323
5324		/**
5325		 * All event handlers.
5326		 * @protected
5327		 * @type {Object}
5328		 */
5329		this._handlers = {
5330			'prepared.owl.carousel': $.proxy(function(e) {
5331				if (e.namespace && this._core.settings.dotsData) {
5332					this._templates.push('<div class="' + this._core.settings.dotClass + '">' +
5333						$(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '</div>');
5334				}
5335			}, this),
5336			'added.owl.carousel': $.proxy(function(e) {
5337				if (e.namespace && this._core.settings.dotsData) {
5338					this._templates.splice(e.position, 0, this._templates.pop());
5339				}
5340			}, this),
5341			'remove.owl.carousel': $.proxy(function(e) {
5342				if (e.namespace && this._core.settings.dotsData) {
5343					this._templates.splice(e.position, 1);
5344				}
5345			}, this),
5346			'changed.owl.carousel': $.proxy(function(e) {
5347				if (e.namespace && e.property.name == 'position') {
5348					this.draw();
5349				}
5350			}, this),
5351			'initialized.owl.carousel': $.proxy(function(e) {
5352				if (e.namespace && !this._initialized) {
5353					this._core.trigger('initialize', null, 'navigation');
5354					this.initialize();
5355					this.update();
5356					this.draw();
5357					this._initialized = true;
5358					this._core.trigger('initialized', null, 'navigation');
5359				}
5360			}, this),
5361			'refreshed.owl.carousel': $.proxy(function(e) {
5362				if (e.namespace && this._initialized) {
5363					this._core.trigger('refresh', null, 'navigation');
5364					this.update();
5365					this.draw();
5366					this._core.trigger('refreshed', null, 'navigation');
5367				}
5368			}, this)
5369		};
5370
5371		// set default options
5372		this._core.options = $.extend({}, Navigation.Defaults, this._core.options);
5373
5374		// register event handlers
5375		this.$element.on(this._handlers);
5376	};
5377
5378	/**
5379	 * Default options.
5380	 * @public
5381	 * @todo Rename `slideBy` to `navBy`
5382	 */
5383	Navigation.Defaults = {
5384		nav: false,
5385		navText: [
5386			'<span aria-label="' + 'Previous' + '">&#x2039;</span>',
5387			'<span aria-label="' + 'Next' + '">&#x203a;</span>'
5388		],
5389		navSpeed: false,
5390		navElement: 'button type="button" role="presentation"',
5391		navContainer: false,
5392		navContainerClass: 'owl-nav',
5393		navClass: [
5394			'owl-prev',
5395			'owl-next'
5396		],
5397		slideBy: 1,
5398		dotClass: 'owl-dot',
5399		dotsClass: 'owl-dots',
5400		dots: true,
5401		dotsEach: false,
5402		dotsData: false,
5403		dotsSpeed: false,
5404		dotsContainer: false
5405	};
5406
5407	/**
5408	 * Initializes the layout of the plugin and extends the carousel.
5409	 * @protected
5410	 */
5411	Navigation.prototype.initialize = function() {
5412		var override,
5413			settings = this._core.settings;
5414
5415		// create DOM structure for relative navigation
5416		this._controls.$relative = (settings.navContainer ? $(settings.navContainer)
5417			: $('<div>').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled');
5418
5419		this._controls.$previous = $('<' + settings.navElement + '>')
5420			.addClass(settings.navClass[0])
5421			.html(settings.navText[0])
5422			.prependTo(this._controls.$relative)
5423			.on('click', $.proxy(function(e) {
5424				this.prev(settings.navSpeed);
5425			}, this));
5426		this._controls.$next = $('<' + settings.navElement + '>')
5427			.addClass(settings.navClass[1])
5428			.html(settings.navText[1])
5429			.appendTo(this._controls.$relative)
5430			.on('click', $.proxy(function(e) {
5431				this.next(settings.navSpeed);
5432			}, this));
5433
5434		// create DOM structure for absolute navigation
5435		if (!settings.dotsData) {
5436			this._templates = [ $('<button role="button">')
5437				.addClass(settings.dotClass)
5438				.append($('<span>'))
5439				.prop('outerHTML') ];
5440		}
5441
5442		this._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer)
5443			: $('<div>').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled');
5444
5445		this._controls.$absolute.on('click', 'button', $.proxy(function(e) {
5446			var index = $(e.target).parent().is(this._controls.$absolute)
5447				? $(e.target).index() : $(e.target).parent().index();
5448
5449			e.preventDefault();
5450
5451			this.to(index, settings.dotsSpeed);
5452		}, this));
5453
5454		/*$el.on('focusin', function() {
5455			$(document).off(".carousel");
5456
5457			$(document).on('keydown.carousel', function(e) {
5458				if(e.keyCode == 37) {
5459					$el.trigger('prev.owl')
5460				}
5461				if(e.keyCode == 39) {
5462					$el.trigger('next.owl')
5463				}
5464			});
5465		});*/
5466
5467		// override public methods of the carousel
5468		for (override in this._overrides) {
5469			this._core[override] = $.proxy(this[override], this);
5470		}
5471	};
5472
5473	/**
5474	 * Destroys the plugin.
5475	 * @protected
5476	 */
5477	Navigation.prototype.destroy = function() {
5478		var handler, control, property, override, settings;
5479		settings = this._core.settings;
5480
5481		for (handler in this._handlers) {
5482			this.$element.off(handler, this._handlers[handler]);
5483		}
5484		for (control in this._controls) {
5485			if (control === '$relative' && settings.navContainer) {
5486				this._controls[control].html('');
5487			} else {
5488				this._controls[control].remove();
5489			}
5490		}
5491		for (override in this.overides) {
5492			this._core[override] = this._overrides[override];
5493		}
5494		for (property in Object.getOwnPropertyNames(this)) {
5495			typeof this[property] != 'function' && (this[property] = null);
5496		}
5497	};
5498
5499	/**
5500	 * Updates the internal state.
5501	 * @protected
5502	 */
5503	Navigation.prototype.update = function() {
5504		var i, j, k,
5505			lower = this._core.clones().length / 2,
5506			upper = lower + this._core.items().length,
5507			maximum = this._core.maximum(true),
5508			settings = this._core.settings,
5509			size = settings.center || settings.autoWidth || settings.dotsData
5510				? 1 : settings.dotsEach || settings.items;
5511
5512		if (settings.slideBy !== 'page') {
5513			settings.slideBy = Math.min(settings.slideBy, settings.items);
5514		}
5515
5516		if (settings.dots || settings.slideBy == 'page') {
5517			this._pages = [];
5518
5519			for (i = lower, j = 0, k = 0; i < upper; i++) {
5520				if (j >= size || j === 0) {
5521					this._pages.push({
5522						start: Math.min(maximum, i - lower),
5523						end: i - lower + size - 1
5524					});
5525					if (Math.min(maximum, i - lower) === maximum) {
5526						break;
5527					}
5528					j = 0, ++k;
5529				}
5530				j += this._core.mergers(this._core.relative(i));
5531			}
5532		}
5533	};
5534
5535	/**
5536	 * Draws the user interface.
5537	 * @todo The option `dotsData` wont work.
5538	 * @protected
5539	 */
5540	Navigation.prototype.draw = function() {
5541		var difference,
5542			settings = this._core.settings,
5543			disabled = this._core.items().length <= settings.items,
5544			index = this._core.relative(this._core.current()),
5545			loop = settings.loop || settings.rewind;
5546
5547		this._controls.$relative.toggleClass('disabled', !settings.nav || disabled);
5548
5549		if (settings.nav) {
5550			this._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true));
5551			this._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true));
5552		}
5553
5554		this._controls.$absolute.toggleClass('disabled', !settings.dots || disabled);
5555
5556		if (settings.dots) {
5557			difference = this._pages.length - this._controls.$absolute.children().length;
5558
5559			if (settings.dotsData && difference !== 0) {
5560				this._controls.$absolute.html(this._templates.join(''));
5561			} else if (difference > 0) {
5562				this._controls.$absolute.append(new Array(difference + 1).join(this._templates[0]));
5563			} else if (difference < 0) {
5564				this._controls.$absolute.children().slice(difference).remove();
5565			}
5566
5567			this._controls.$absolute.find('.active').removeClass('active');
5568			this._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active');
5569		}
5570	};
5571
5572	/**
5573	 * Extends event data.
5574	 * @protected
5575	 * @param {Event} event - The event object which gets thrown.
5576	 */
5577	Navigation.prototype.onTrigger = function(event) {
5578		var settings = this._core.settings;
5579
5580		event.page = {
5581			index: $.inArray(this.current(), this._pages),
5582			count: this._pages.length,
5583			size: settings && (settings.center || settings.autoWidth || settings.dotsData
5584				? 1 : settings.dotsEach || settings.items)
5585		};
5586	};
5587
5588	/**
5589	 * Gets the current page position of the carousel.
5590	 * @protected
5591	 * @returns {Number}
5592	 */
5593	Navigation.prototype.current = function() {
5594		var current = this._core.relative(this._core.current());
5595		return $.grep(this._pages, $.proxy(function(page, index) {
5596			return page.start <= current && page.end >= current;
5597		}, this)).pop();
5598	};
5599
5600	/**
5601	 * Gets the current succesor/predecessor position.
5602	 * @protected
5603	 * @returns {Number}
5604	 */
5605	Navigation.prototype.getPosition = function(successor) {
5606		var position, length,
5607			settings = this._core.settings;
5608
5609		if (settings.slideBy == 'page') {
5610			position = $.inArray(this.current(), this._pages);
5611			length = this._pages.length;
5612			successor ? ++position : --position;
5613			position = this._pages[((position % length) + length) % length].start;
5614		} else {
5615			position = this._core.relative(this._core.current());
5616			length = this._core.items().length;
5617			successor ? position += settings.slideBy : position -= settings.slideBy;
5618		}
5619
5620		return position;
5621	};
5622
5623	/**
5624	 * Slides to the next item or page.
5625	 * @public
5626	 * @param {Number} [speed=false] - The time in milliseconds for the transition.
5627	 */
5628	Navigation.prototype.next = function(speed) {
5629		$.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);
5630	};
5631
5632	/**
5633	 * Slides to the previous item or page.
5634	 * @public
5635	 * @param {Number} [speed=false] - The time in milliseconds for the transition.
5636	 */
5637	Navigation.prototype.prev = function(speed) {
5638		$.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);
5639	};
5640
5641	/**
5642	 * Slides to the specified item or page.
5643	 * @public
5644	 * @param {Number} position - The position of the item or page.
5645	 * @param {Number} [speed] - The time in milliseconds for the transition.
5646	 * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.
5647	 */
5648	Navigation.prototype.to = function(position, speed, standard) {
5649		var length;
5650
5651		if (!standard && this._pages.length) {
5652			length = this._pages.length;
5653			$.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed);
5654		} else {
5655			$.proxy(this._overrides.to, this._core)(position, speed);
5656		}
5657	};
5658
5659	$.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;
5660
5661})(window.Zepto || window.jQuery, window, document);
5662
5663/**
5664 * Hash Plugin
5665 * @version 2.3.4
5666 * @author Artus Kolanowski
5667 * @author David Deutsch
5668 * @license The MIT License (MIT)
5669 */
5670;(function($, window, document, undefined) {
5671	'use strict';
5672
5673	/**
5674	 * Creates the hash plugin.
5675	 * @class The Hash Plugin
5676	 * @param {Owl} carousel - The Owl Carousel
5677	 */
5678	var Hash = function(carousel) {
5679		/**
5680		 * Reference to the core.
5681		 * @protected
5682		 * @type {Owl}
5683		 */
5684		this._core = carousel;
5685
5686		/**
5687		 * Hash index for the items.
5688		 * @protected
5689		 * @type {Object}
5690		 */
5691		this._hashes = {};
5692
5693		/**
5694		 * The carousel element.
5695		 * @type {jQuery}
5696		 */
5697		this.$element = this._core.$element;
5698
5699		/**
5700		 * All event handlers.
5701		 * @protected
5702		 * @type {Object}
5703		 */
5704		this._handlers = {
5705			'initialized.owl.carousel': $.proxy(function(e) {
5706				if (e.namespace && this._core.settings.startPosition === 'URLHash') {
5707					$(window).trigger('hashchange.owl.navigation');
5708				}
5709			}, this),
5710			'prepared.owl.carousel': $.proxy(function(e) {
5711				if (e.namespace) {
5712					var hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash');
5713
5714					if (!hash) {
5715						return;
5716					}
5717
5718					this._hashes[hash] = e.content;
5719				}
5720			}, this),
5721			'changed.owl.carousel': $.proxy(function(e) {
5722				if (e.namespace && e.property.name === 'position') {
5723					var current = this._core.items(this._core.relative(this._core.current())),
5724						hash = $.map(this._hashes, function(item, hash) {
5725							return item === current ? hash : null;
5726						}).join();
5727
5728					if (!hash || window.location.hash.slice(1) === hash) {
5729						return;
5730					}
5731
5732					window.location.hash = hash;
5733				}
5734			}, this)
5735		};
5736
5737		// set default options
5738		this._core.options = $.extend({}, Hash.Defaults, this._core.options);
5739
5740		// register the event handlers
5741		this.$element.on(this._handlers);
5742
5743		// register event listener for hash navigation
5744		$(window).on('hashchange.owl.navigation', $.proxy(function(e) {
5745			var hash = window.location.hash.substring(1),
5746				items = this._core.$stage.children(),
5747				position = this._hashes[hash] && items.index(this._hashes[hash]);
5748
5749			if (position === undefined || position === this._core.current()) {
5750				return;
5751			}
5752
5753			this._core.to(this._core.relative(position), false, true);
5754		}, this));
5755	};
5756
5757	/**
5758	 * Default options.
5759	 * @public
5760	 */
5761	Hash.Defaults = {
5762		URLhashListener: false
5763	};
5764
5765	/**
5766	 * Destroys the plugin.
5767	 * @public
5768	 */
5769	Hash.prototype.destroy = function() {
5770		var handler, property;
5771
5772		$(window).off('hashchange.owl.navigation');
5773
5774		for (handler in this._handlers) {
5775			this._core.$element.off(handler, this._handlers[handler]);
5776		}
5777		for (property in Object.getOwnPropertyNames(this)) {
5778			typeof this[property] != 'function' && (this[property] = null);
5779		}
5780	};
5781
5782	$.fn.owlCarousel.Constructor.Plugins.Hash = Hash;
5783
5784})(window.Zepto || window.jQuery, window, document);
5785
5786/**
5787 * Support Plugin
5788 *
5789 * @version 2.3.4
5790 * @author Vivid Planet Software GmbH
5791 * @author Artus Kolanowski
5792 * @author David Deutsch
5793 * @license The MIT License (MIT)
5794 */
5795;(function($, window, document, undefined) {
5796
5797	var style = $('<support>').get(0).style,
5798		prefixes = 'Webkit Moz O ms'.split(' '),
5799		events = {
5800			transition: {
5801				end: {
5802					WebkitTransition: 'webkitTransitionEnd',
5803					MozTransition: 'transitionend',
5804					OTransition: 'oTransitionEnd',
5805					transition: 'transitionend'
5806				}
5807			},
5808			animation: {
5809				end: {
5810					WebkitAnimation: 'webkitAnimationEnd',
5811					MozAnimation: 'animationend',
5812					OAnimation: 'oAnimationEnd',
5813					animation: 'animationend'
5814				}
5815			}
5816		},
5817		tests = {
5818			csstransforms: function() {
5819				return !!test('transform');
5820			},
5821			csstransforms3d: function() {
5822				return !!test('perspective');
5823			},
5824			csstransitions: function() {
5825				return !!test('transition');
5826			},
5827			cssanimations: function() {
5828				return !!test('animation');
5829			}
5830		};
5831
5832	function test(property, prefixed) {
5833		var result = false,
5834			upper = property.charAt(0).toUpperCase() + property.slice(1);
5835
5836		$.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) {
5837			if (style[property] !== undefined) {
5838				result = prefixed ? property : true;
5839				return false;
5840			}
5841		});
5842
5843		return result;
5844	}
5845
5846	function prefixed(property) {
5847		return test(property, true);
5848	}
5849
5850	if (tests.csstransitions()) {
5851		/* jshint -W053 */
5852		$.support.transition = new String(prefixed('transition'))
5853		$.support.transition.end = events.transition.end[ $.support.transition ];
5854	}
5855
5856	if (tests.cssanimations()) {
5857		/* jshint -W053 */
5858		$.support.animation = new String(prefixed('animation'))
5859		$.support.animation.end = events.animation.end[ $.support.animation ];
5860	}
5861
5862	if (tests.csstransforms()) {
5863		/* jshint -W053 */
5864		$.support.transform = new String(prefixed('transform'));
5865		$.support.transform3d = tests.csstransforms3d();
5866	}
5867
5868})(window.Zepto || window.jQuery, window, document);
5869
5870
5871/***/ }),
5872
vendor: 96,634 bytes, lines 5873-6903
5873/***/ "./node_modules/parallax-js/dist/parallax.js":
5874/*!***************************************************!*\
5875  !*** ./node_modules/parallax-js/dist/parallax.js ***!
5876  \***************************************************/
5877/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5878
5879(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=undefined;if(!u&&a)return require(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=undefined;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
5880/*
5881object-assign
5882(c) Sindre Sorhus
5883@license MIT
5884*/
5885
5886'use strict';
5887/* eslint-disable no-unused-vars */
5888var getOwnPropertySymbols = Object.getOwnPropertySymbols;
5889var hasOwnProperty = Object.prototype.hasOwnProperty;
5890var propIsEnumerable = Object.prototype.propertyIsEnumerable;
5891
5892function toObject(val) {
5893	if (val === null || val === undefined) {
5894		throw new TypeError('Object.assign cannot be called with null or undefined');
5895	}
5896
5897	return Object(val);
5898}
5899
5900function shouldUseNative() {
5901	try {
5902		if (!Object.assign) {
5903			return false;
5904		}
5905
5906		// Detect buggy property enumeration order in older V8 versions.
5907
5908		// https://bugs.chromium.org/p/v8/issues/detail?id=4118
5909		var test1 = new String('abc');  // eslint-disable-line no-new-wrappers
5910		test1[5] = 'de';
5911		if (Object.getOwnPropertyNames(test1)[0] === '5') {
5912			return false;
5913		}
5914
5915		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
5916		var test2 = {};
5917		for (var i = 0; i < 10; i++) {
5918			test2['_' + String.fromCharCode(i)] = i;
5919		}
5920		var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
5921			return test2[n];
5922		});
5923		if (order2.join('') !== '0123456789') {
5924			return false;
5925		}
5926
5927		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
5928		var test3 = {};
5929		'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
5930			test3[letter] = letter;
5931		});
5932		if (Object.keys(Object.assign({}, test3)).join('') !==
5933				'abcdefghijklmnopqrst') {
5934			return false;
5935		}
5936
5937		return true;
5938	} catch (err) {
5939		// We don't expect any of the above to throw, but better to be safe.
5940		return false;
5941	}
5942}
5943
5944module.exports = shouldUseNative() ? Object.assign : function (target, source) {
5945	var from;
5946	var to = toObject(target);
5947	var symbols;
5948
5949	for (var s = 1; s < arguments.length; s++) {
5950		from = Object(arguments[s]);
5951
5952		for (var key in from) {
5953			if (hasOwnProperty.call(from, key)) {
5954				to[key] = from[key];
5955			}
5956		}
5957
5958		if (getOwnPropertySymbols) {
5959			symbols = getOwnPropertySymbols(from);
5960			for (var i = 0; i < symbols.length; i++) {
5961				if (propIsEnumerable.call(from, symbols[i])) {
5962					to[symbols[i]] = from[symbols[i]];
5963				}
5964			}
5965		}
5966	}
5967
5968	return to;
5969};
5970
5971},{}],2:[function(require,module,exports){
5972(function (process){
5973// Generated by CoffeeScript 1.12.2
5974(function() {
5975  var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;
5976
5977  if ((typeof performance !== "undefined" && performance !== null) && performance.now) {
5978    module.exports = function() {
5979      return performance.now();
5980    };
5981  } else if ((typeof process !== "undefined" && process !== null) && process.hrtime) {
5982    module.exports = function() {
5983      return (getNanoSeconds() - nodeLoadTime) / 1e6;
5984    };
5985    hrtime = process.hrtime;
5986    getNanoSeconds = function() {
5987      var hr;
5988      hr = hrtime();
5989      return hr[0] * 1e9 + hr[1];
5990    };
5991    moduleLoadTime = getNanoSeconds();
5992    upTime = process.uptime() * 1e9;
5993    nodeLoadTime = moduleLoadTime - upTime;
5994  } else if (Date.now) {
5995    module.exports = function() {
5996      return Date.now() - loadTime;
5997    };
5998    loadTime = Date.now();
5999  } else {
6000    module.exports = function() {
6001      return new Date().getTime() - loadTime;
6002    };
6003    loadTime = new Date().getTime();
6004  }
6005
6006}).call(this);
6007
6008
6009
6010}).call(this,require('_process'))
6011
6012},{"_process":3}],3:[function(require,module,exports){
6013// shim for using process in browser
6014var process = module.exports = {};
6015
6016// cached from whatever global is present so that test runners that stub it
6017// don't break things.  But we need to wrap it in a try catch in case it is
6018// wrapped in strict mode code which doesn't define any globals.  It's inside a
6019// function because try/catches deoptimize in certain engines.
6020
6021var cachedSetTimeout;
6022var cachedClearTimeout;
6023
6024function defaultSetTimout() {
6025    throw new Error('setTimeout has not been defined');
6026}
6027function defaultClearTimeout () {
6028    throw new Error('clearTimeout has not been defined');
6029}
6030(function () {
6031    try {
6032        if (typeof setTimeout === 'function') {
6033            cachedSetTimeout = setTimeout;
6034        } else {
6035            cachedSetTimeout = defaultSetTimout;
6036        }
6037    } catch (e) {
6038        cachedSetTimeout = defaultSetTimout;
6039    }
6040    try {
6041        if (typeof clearTimeout === 'function') {
6042            cachedClearTimeout = clearTimeout;
6043        } else {
6044            cachedClearTimeout = defaultClearTimeout;
6045        }
6046    } catch (e) {
6047        cachedClearTimeout = defaultClearTimeout;
6048    }
6049} ())
6050function runTimeout(fun) {
6051    if (cachedSetTimeout === setTimeout) {
6052        //normal enviroments in sane situations
6053        return setTimeout(fun, 0);
6054    }
6055    // if setTimeout wasn't available but was latter defined
6056    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
6057        cachedSetTimeout = setTimeout;
6058        return setTimeout(fun, 0);
6059    }
6060    try {
6061        // when when somebody has screwed with setTimeout but no I.E. maddness
6062        return cachedSetTimeout(fun, 0);
6063    } catch(e){
6064        try {
6065            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
6066            return cachedSetTimeout.call(null, fun, 0);
6067        } catch(e){
6068            // 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
6069            return cachedSetTimeout.call(this, fun, 0);
6070        }
6071    }
6072
6073
6074}
6075function runClearTimeout(marker) {
6076    if (cachedClearTimeout === clearTimeout) {
6077        //normal enviroments in sane situations
6078        return clearTimeout(marker);
6079    }
6080    // if clearTimeout wasn't available but was latter defined
6081    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
6082        cachedClearTimeout = clearTimeout;
6083        return clearTimeout(marker);
6084    }
6085    try {
6086        // when when somebody has screwed with setTimeout but no I.E. maddness
6087        return cachedClearTimeout(marker);
6088    } catch (e){
6089        try {
6090            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
6091            return cachedClearTimeout.call(null, marker);
6092        } catch (e){
6093            // 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.
6094            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
6095            return cachedClearTimeout.call(this, marker);
6096        }
6097    }
6098
6099
6100
6101}
6102var queue = [];
6103var draining = false;
6104var currentQueue;
6105var queueIndex = -1;
6106
6107function cleanUpNextTick() {
6108    if (!draining || !currentQueue) {
6109        return;
6110    }
6111    draining = false;
6112    if (currentQueue.length) {
6113        queue = currentQueue.concat(queue);
6114    } else {
6115        queueIndex = -1;
6116    }
6117    if (queue.length) {
6118        drainQueue();
6119    }
6120}
6121
6122function drainQueue() {
6123    if (draining) {
6124        return;
6125    }
6126    var timeout = runTimeout(cleanUpNextTick);
6127    draining = true;
6128
6129    var len = queue.length;
6130    while(len) {
6131        currentQueue = queue;
6132        queue = [];
6133        while (++queueIndex < len) {
6134            if (currentQueue) {
6135                currentQueue[queueIndex].run();
6136            }
6137        }
6138        queueIndex = -1;
6139        len = queue.length;
6140    }
6141    currentQueue = null;
6142    draining = false;
6143    runClearTimeout(timeout);
6144}
6145
6146process.nextTick = function (fun) {
6147    var args = new Array(arguments.length - 1);
6148    if (arguments.length > 1) {
6149        for (var i = 1; i < arguments.length; i++) {
6150            args[i - 1] = arguments[i];
6151        }
6152    }
6153    queue.push(new Item(fun, args));
6154    if (queue.length === 1 && !draining) {
6155        runTimeout(drainQueue);
6156    }
6157};
6158
6159// v8 likes predictible objects
6160function Item(fun, array) {
6161    this.fun = fun;
6162    this.array = array;
6163}
6164Item.prototype.run = function () {
6165    this.fun.apply(null, this.array);
6166};
6167process.title = 'browser';
6168process.browser = true;
6169process.env = {};
6170process.argv = [];
6171process.version = ''; // empty string to avoid regexp issues
6172process.versions = {};
6173
6174function noop() {}
6175
6176process.on = noop;
6177process.addListener = noop;
6178process.once = noop;
6179process.off = noop;
6180process.removeListener = noop;
6181process.removeAllListeners = noop;
6182process.emit = noop;
6183process.prependListener = noop;
6184process.prependOnceListener = noop;
6185
6186process.listeners = function (name) { return [] }
6187
6188process.binding = function (name) {
6189    throw new Error('process.binding is not supported');
6190};
6191
6192process.cwd = function () { return '/' };
6193process.chdir = function (dir) {
6194    throw new Error('process.chdir is not supported');
6195};
6196process.umask = function() { return 0; };
6197
6198},{}],4:[function(require,module,exports){
6199(function (global){
6200var now = require('performance-now')
6201  , root = typeof window === 'undefined' ? global : window
6202  , vendors = ['moz', 'webkit']
6203  , suffix = 'AnimationFrame'
6204  , raf = root['request' + suffix]
6205  , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]
6206
6207for(var i = 0; !raf && i < vendors.length; i++) {
6208  raf = root[vendors[i] + 'Request' + suffix]
6209  caf = root[vendors[i] + 'Cancel' + suffix]
6210      || root[vendors[i] + 'CancelRequest' + suffix]
6211}
6212
6213// Some versions of FF have rAF but not cAF
6214if(!raf || !caf) {
6215  var last = 0
6216    , id = 0
6217    , queue = []
6218    , frameDuration = 1000 / 60
6219
6220  raf = function(callback) {
6221    if(queue.length === 0) {
6222      var _now = now()
6223        , next = Math.max(0, frameDuration - (_now - last))
6224      last = next + _now
6225      setTimeout(function() {
6226        var cp = queue.slice(0)
6227        // Clear queue here to prevent
6228        // callbacks from appending listeners
6229        // to the current frame's queue
6230        queue.length = 0
6231        for(var i = 0; i < cp.length; i++) {
6232          if(!cp[i].cancelled) {
6233            try{
6234              cp[i].callback(last)
6235            } catch(e) {
6236              setTimeout(function() { throw e }, 0)
6237            }
6238          }
6239        }
6240      }, Math.round(next))
6241    }
6242    queue.push({
6243      handle: ++id,
6244      callback: callback,
6245      cancelled: false
6246    })
6247    return id
6248  }
6249
6250  caf = function(handle) {
6251    for(var i = 0; i < queue.length; i++) {
6252      if(queue[i].handle === handle) {
6253        queue[i].cancelled = true
6254      }
6255    }
6256  }
6257}
6258
6259module.exports = function(fn) {
6260  // Wrap in a new function to prevent
6261  // `cancel` potentially being assigned
6262  // to the native rAF function
6263  return raf.call(root, fn)
6264}
6265module.exports.cancel = function() {
6266  caf.apply(root, arguments)
6267}
6268module.exports.polyfill = function() {
6269  root.requestAnimationFrame = raf
6270  root.cancelAnimationFrame = caf
6271}
6272
6273}).call(this,typeof __webpack_require__.g !== "undefined" ? __webpack_require__.g : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
6274
6275},{"performance-now":2}],5:[function(require,module,exports){
6276'use strict';
6277
6278var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
6279
6280function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6281
6282/**
6283* Parallax.js
6284* @author Matthew Wagerfield - @wagerfield, René Roth - [email protected]
6285* @description Creates a parallax effect between an array of layers,
6286*              driving the motion from the gyroscope output of a smartdevice.
6287*              If no gyroscope is available, the cursor position is used.
6288*/
6289
6290var rqAnFr = require('raf');
6291var objectAssign = require('object-assign');
6292
6293var helpers = {
6294  propertyCache: {},
6295  vendors: [null, ['-webkit-', 'webkit'], ['-moz-', 'Moz'], ['-o-', 'O'], ['-ms-', 'ms']],
6296
6297  clamp: function clamp(value, min, max) {
6298    return min < max ? value < min ? min : value > max ? max : value : value < max ? max : value > min ? min : value;
6299  },
6300  data: function data(element, name) {
6301    return helpers.deserialize(element.getAttribute('data-' + name));
6302  },
6303  deserialize: function deserialize(value) {
6304    if (value === 'true') {
6305      return true;
6306    } else if (value === 'false') {
6307      return false;
6308    } else if (value === 'null') {
6309      return null;
6310    } else if (!isNaN(parseFloat(value)) && isFinite(value)) {
6311      return parseFloat(value);
6312    } else {
6313      return value;
6314    }
6315  },
6316  camelCase: function camelCase(value) {
6317    return value.replace(/-+(.)?/g, function (match, character) {
6318      return character ? character.toUpperCase() : '';
6319    });
6320  },
6321  accelerate: function accelerate(element) {
6322    helpers.css(element, 'transform', 'translate3d(0,0,0) rotate(0.0001deg)');
6323    helpers.css(element, 'transform-style', 'preserve-3d');
6324    helpers.css(element, 'backface-visibility', 'hidden');
6325  },
6326  transformSupport: function transformSupport(value) {
6327    var element = document.createElement('div'),
6328        propertySupport = false,
6329        propertyValue = null,
6330        featureSupport = false,
6331        cssProperty = null,
6332        jsProperty = null;
6333    for (var i = 0, l = helpers.vendors.length; i < l; i++) {
6334      if (helpers.vendors[i] !== null) {
6335        cssProperty = helpers.vendors[i][0] + 'transform';
6336        jsProperty = helpers.vendors[i][1] + 'Transform';
6337      } else {
6338        cssProperty = 'transform';
6339        jsProperty = 'transform';
6340      }
6341      if (element.style[jsProperty] !== undefined) {
6342        propertySupport = true;
6343        break;
6344      }
6345    }
6346    switch (value) {
6347      case '2D':
6348        featureSupport = propertySupport;
6349        break;
6350      case '3D':
6351        if (propertySupport) {
6352          var body = document.body || document.createElement('body'),
6353              documentElement = document.documentElement,
6354              documentOverflow = documentElement.style.overflow,
6355              isCreatedBody = false;
6356
6357          if (!document.body) {
6358            isCreatedBody = true;
6359            documentElement.style.overflow = 'hidden';
6360            documentElement.appendChild(body);
6361            body.style.overflow = 'hidden';
6362            body.style.background = '';
6363          }
6364
6365          body.appendChild(element);
6366          element.style[jsProperty] = 'translate3d(1px,1px,1px)';
6367          propertyValue = window.getComputedStyle(element).getPropertyValue(cssProperty);
6368          featureSupport = propertyValue !== undefined && propertyValue.length > 0 && propertyValue !== 'none';
6369          documentElement.style.overflow = documentOverflow;
6370          body.removeChild(element);
6371
6372          if (isCreatedBody) {
6373            body.removeAttribute('style');
6374            body.parentNode.removeChild(body);
6375          }
6376        }
6377        break;
6378    }
6379    return featureSupport;
6380  },
6381  css: function css(element, property, value) {
6382    var jsProperty = helpers.propertyCache[property];
6383    if (!jsProperty) {
6384      for (var i = 0, l = helpers.vendors.length; i < l; i++) {
6385        if (helpers.vendors[i] !== null) {
6386          jsProperty = helpers.camelCase(helpers.vendors[i][1] + '-' + property);
6387        } else {
6388          jsProperty = property;
6389        }
6390        if (element.style[jsProperty] !== undefined) {
6391          helpers.propertyCache[property] = jsProperty;
6392          break;
6393        }
6394      }
6395    }
6396    element.style[jsProperty] = value;
6397  }
6398};
6399
6400var MAGIC_NUMBER = 30,
6401    DEFAULTS = {
6402  relativeInput: false,
6403  clipRelativeInput: false,
6404  inputElement: null,
6405  hoverOnly: false,
6406  calibrationThreshold: 100,
6407  calibrationDelay: 500,
6408  supportDelay: 500,
6409  calibrateX: false,
6410  calibrateY: true,
6411  invertX: true,
6412  invertY: true,
6413  limitX: false,
6414  limitY: false,
6415  scalarX: 10.0,
6416  scalarY: 10.0,
6417  frictionX: 0.1,
6418  frictionY: 0.1,
6419  originX: 0.5,
6420  originY: 0.5,
6421  pointerEvents: false,
6422  precision: 1,
6423  onReady: null,
6424  selector: null
6425};
6426
6427var Parallax = function () {
6428  function Parallax(element, options) {
6429    _classCallCheck(this, Parallax);
6430
6431    this.element = element;
6432
6433    var data = {
6434      calibrateX: helpers.data(this.element, 'calibrate-x'),
6435      calibrateY: helpers.data(this.element, 'calibrate-y'),
6436      invertX: helpers.data(this.element, 'invert-x'),
6437      invertY: helpers.data(this.element, 'invert-y'),
6438      limitX: helpers.data(this.element, 'limit-x'),
6439      limitY: helpers.data(this.element, 'limit-y'),
6440      scalarX: helpers.data(this.element, 'scalar-x'),
6441      scalarY: helpers.data(this.element, 'scalar-y'),
6442      frictionX: helpers.data(this.element, 'friction-x'),
6443      frictionY: helpers.data(this.element, 'friction-y'),
6444      originX: helpers.data(this.element, 'origin-x'),
6445      originY: helpers.data(this.element, 'origin-y'),
6446      pointerEvents: helpers.data(this.element, 'pointer-events'),
6447      precision: helpers.data(this.element, 'precision'),
6448      relativeInput: helpers.data(this.element, 'relative-input'),
6449      clipRelativeInput: helpers.data(this.element, 'clip-relative-input'),
6450      hoverOnly: helpers.data(this.element, 'hover-only'),
6451      inputElement: document.querySelector(helpers.data(this.element, 'input-element')),
6452      selector: helpers.data(this.element, 'selector')
6453    };
6454
6455    for (var key in data) {
6456      if (data[key] === null) {
6457        delete data[key];
6458      }
6459    }
6460
6461    objectAssign(this, DEFAULTS, data, options);
6462
6463    if (!this.inputElement) {
6464      this.inputElement = this.element;
6465    }
6466
6467    this.calibrationTimer = null;
6468    this.calibrationFlag = true;
6469    this.enabled = false;
6470    this.depthsX = [];
6471    this.depthsY = [];
6472    this.raf = null;
6473
6474    this.bounds = null;
6475    this.elementPositionX = 0;
6476    this.elementPositionY = 0;
6477    this.elementWidth = 0;
6478    this.elementHeight = 0;
6479
6480    this.elementCenterX = 0;
6481    this.elementCenterY = 0;
6482
6483    this.elementRangeX = 0;
6484    this.elementRangeY = 0;
6485
6486    this.calibrationX = 0;
6487    this.calibrationY = 0;
6488
6489    this.inputX = 0;
6490    this.inputY = 0;
6491
6492    this.motionX = 0;
6493    this.motionY = 0;
6494
6495    this.velocityX = 0;
6496    this.velocityY = 0;
6497
6498    this.onMouseMove = this.onMouseMove.bind(this);
6499    this.onDeviceOrientation = this.onDeviceOrientation.bind(this);
6500    this.onDeviceMotion = this.onDeviceMotion.bind(this);
6501    this.onOrientationTimer = this.onOrientationTimer.bind(this);
6502    this.onMotionTimer = this.onMotionTimer.bind(this);
6503    this.onCalibrationTimer = this.onCalibrationTimer.bind(this);
6504    this.onAnimationFrame = this.onAnimationFrame.bind(this);
6505    this.onWindowResize = this.onWindowResize.bind(this);
6506
6507    this.windowWidth = null;
6508    this.windowHeight = null;
6509    this.windowCenterX = null;
6510    this.windowCenterY = null;
6511    this.windowRadiusX = null;
6512    this.windowRadiusY = null;
6513    this.portrait = false;
6514    this.desktop = !navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|mobi|tablet|opera mini|nexus 7)/i);
6515    this.motionSupport = !!window.DeviceMotionEvent && !this.desktop;
6516    this.orientationSupport = !!window.DeviceOrientationEvent && !this.desktop;
6517    this.orientationStatus = 0;
6518    this.motionStatus = 0;
6519
6520    this.initialise();
6521  }
6522
6523  _createClass(Parallax, [{
6524    key: 'initialise',
6525    value: function initialise() {
6526      if (this.transform2DSupport === undefined) {
6527        this.transform2DSupport = helpers.transformSupport('2D');
6528        this.transform3DSupport = helpers.transformSupport('3D');
6529      }
6530
6531      // Configure Context Styles
6532      if (this.transform3DSupport) {
6533        helpers.accelerate(this.element);
6534      }
6535
6536      var style = window.getComputedStyle(this.element);
6537      if (style.getPropertyValue('position') === 'static') {
6538        this.element.style.position = 'relative';
6539      }
6540
6541      // Pointer events
6542      if (!this.pointerEvents) {
6543        this.element.style.pointerEvents = 'none';
6544      }
6545
6546      // Setup
6547      this.updateLayers();
6548      this.updateDimensions();
6549      this.enable();
6550      this.queueCalibration(this.calibrationDelay);
6551    }
6552  }, {
6553    key: 'doReadyCallback',
6554    value: function doReadyCallback() {
6555      if (this.onReady) {
6556        this.onReady();
6557      }
6558    }
6559  }, {
6560    key: 'updateLayers',
6561    value: function updateLayers() {
6562      if (this.selector) {
6563        this.layers = this.element.querySelectorAll(this.selector);
6564      } else {
6565        this.layers = this.element.children;
6566      }
6567
6568      if (!this.layers.length) {
6569        console.warn('ParallaxJS: Your scene does not have any layers.');
6570      }
6571
6572      this.depthsX = [];
6573      this.depthsY = [];
6574
6575      for (var index = 0; index < this.layers.length; index++) {
6576        var layer = this.layers[index];
6577
6578        if (this.transform3DSupport) {
6579          helpers.accelerate(layer);
6580        }
6581
6582        layer.style.position = index ? 'absolute' : 'relative';
6583        layer.style.display = 'block';
6584        layer.style.left = 0;
6585        layer.style.top = 0;
6586
6587        var depth = helpers.data(layer, 'depth') || 0;
6588        this.depthsX.push(helpers.data(layer, 'depth-x') || depth);
6589        this.depthsY.push(helpers.data(layer, 'depth-y') || depth);
6590      }
6591    }
6592  }, {
6593    key: 'updateDimensions',
6594    value: function updateDimensions() {
6595      this.windowWidth = window.innerWidth;
6596      this.windowHeight = window.innerHeight;
6597      this.windowCenterX = this.windowWidth * this.originX;
6598      this.windowCenterY = this.windowHeight * this.originY;
6599      this.windowRadiusX = Math.max(this.windowCenterX, this.windowWidth - this.windowCenterX);
6600      this.windowRadiusY = Math.max(this.windowCenterY, this.windowHeight - this.windowCenterY);
6601    }
6602  }, {
6603    key: 'updateBounds',
6604    value: function updateBounds() {
6605      this.bounds = this.inputElement.getBoundingClientRect();
6606      this.elementPositionX = this.bounds.left;
6607      this.elementPositionY = this.bounds.top;
6608      this.elementWidth = this.bounds.width;
6609      this.elementHeight = this.bounds.height;
6610      this.elementCenterX = this.elementWidth * this.originX;
6611      this.elementCenterY = this.elementHeight * this.originY;
6612      this.elementRangeX = Math.max(this.elementCenterX, this.elementWidth - this.elementCenterX);
6613      this.elementRangeY = Math.max(this.elementCenterY, this.elementHeight - this.elementCenterY);
6614    }
6615  }, {
6616    key: 'queueCalibration',
6617    value: function queueCalibration(delay) {
6618      clearTimeout(this.calibrationTimer);
6619      this.calibrationTimer = setTimeout(this.onCalibrationTimer, delay);
6620    }
6621  }, {
6622    key: 'enable',
6623    value: function enable() {
6624      if (this.enabled) {
6625        return;
6626      }
6627      this.enabled = true;
6628
6629      if (this.orientationSupport) {
6630        this.portrait = false;
6631        window.addEventListener('deviceorientation', this.onDeviceOrientation);
6632        this.detectionTimer = setTimeout(this.onOrientationTimer, this.supportDelay);
6633      } else if (this.motionSupport) {
6634        this.portrait = false;
6635        window.addEventListener('devicemotion', this.onDeviceMotion);
6636        this.detectionTimer = setTimeout(this.onMotionTimer, this.supportDelay);
6637      } else {
6638        this.calibrationX = 0;
6639        this.calibrationY = 0;
6640        this.portrait = false;
6641        window.addEventListener('mousemove', this.onMouseMove);
6642        this.doReadyCallback();
6643      }
6644
6645      window.addEventListener('resize', this.onWindowResize);
6646      this.raf = rqAnFr(this.onAnimationFrame);
6647    }
6648  }, {
6649    key: 'disable',
6650    value: function disable() {
6651      if (!this.enabled) {
6652        return;
6653      }
6654      this.enabled = false;
6655
6656      if (this.orientationSupport) {
6657        window.removeEventListener('deviceorientation', this.onDeviceOrientation);
6658      } else if (this.motionSupport) {
6659        window.removeEventListener('devicemotion', this.onDeviceMotion);
6660      } else {
6661        window.removeEventListener('mousemove', this.onMouseMove);
6662      }
6663
6664      window.removeEventListener('resize', this.onWindowResize);
6665      rqAnFr.cancel(this.raf);
6666    }
6667  }, {
6668    key: 'calibrate',
6669    value: function calibrate(x, y) {
6670      this.calibrateX = x === undefined ? this.calibrateX : x;
6671      this.calibrateY = y === undefined ? this.calibrateY : y;
6672    }
6673  }, {
6674    key: 'invert',
6675    value: function invert(x, y) {
6676      this.invertX = x === undefined ? this.invertX : x;
6677      this.invertY = y === undefined ? this.invertY : y;
6678    }
6679  }, {
6680    key: 'friction',
6681    value: function friction(x, y) {
6682      this.frictionX = x === undefined ? this.frictionX : x;
6683      this.frictionY = y === undefined ? this.frictionY : y;
6684    }
6685  }, {
6686    key: 'scalar',
6687    value: function scalar(x, y) {
6688      this.scalarX = x === undefined ? this.scalarX : x;
6689      this.scalarY = y === undefined ? this.scalarY : y;
6690    }
6691  }, {
6692    key: 'limit',
6693    value: function limit(x, y) {
6694      this.limitX = x === undefined ? this.limitX : x;
6695      this.limitY = y === undefined ? this.limitY : y;
6696    }
6697  }, {
6698    key: 'origin',
6699    value: function origin(x, y) {
6700      this.originX = x === undefined ? this.originX : x;
6701      this.originY = y === undefined ? this.originY : y;
6702    }
6703  }, {
6704    key: 'setInputElement',
6705    value: function setInputElement(element) {
6706      this.inputElement = element;
6707      this.updateDimensions();
6708    }
6709  }, {
6710    key: 'setPosition',
6711    value: function setPosition(element, x, y) {
6712      x = x.toFixed(this.precision) + 'px';
6713      y = y.toFixed(this.precision) + 'px';
6714      if (this.transform3DSupport) {
6715        helpers.css(element, 'transform', 'translate3d(' + x + ',' + y + ',0)');
6716      } else if (this.transform2DSupport) {
6717        helpers.css(element, 'transform', 'translate(' + x + ',' + y + ')');
6718      } else {
6719        element.style.left = x;
6720        element.style.top = y;
6721      }
6722    }
6723  }, {
6724    key: 'onOrientationTimer',
6725    value: function onOrientationTimer() {
6726      if (this.orientationSupport && this.orientationStatus === 0) {
6727        this.disable();
6728        this.orientationSupport = false;
6729        this.enable();
6730      } else {
6731        this.doReadyCallback();
6732      }
6733    }
6734  }, {
6735    key: 'onMotionTimer',
6736    value: function onMotionTimer() {
6737      if (this.motionSupport && this.motionStatus === 0) {
6738        this.disable();
6739        this.motionSupport = false;
6740        this.enable();
6741      } else {
6742        this.doReadyCallback();
6743      }
6744    }
6745  }, {
6746    key: 'onCalibrationTimer',
6747    value: function onCalibrationTimer() {
6748      this.calibrationFlag = true;
6749    }
6750  }, {
6751    key: 'onWindowResize',
6752    value: function onWindowResize() {
6753      this.updateDimensions();
6754    }
6755  }, {
6756    key: 'onAnimationFrame',
6757    value: function onAnimationFrame() {
6758      this.updateBounds();
6759      var calibratedInputX = this.inputX - this.calibrationX,
6760          calibratedInputY = this.inputY - this.calibrationY;
6761      if (Math.abs(calibratedInputX) > this.calibrationThreshold || Math.abs(calibratedInputY) > this.calibrationThreshold) {
6762        this.queueCalibration(0);
6763      }
6764      if (this.portrait) {
6765        this.motionX = this.calibrateX ? calibratedInputY : this.inputY;
6766        this.motionY = this.calibrateY ? calibratedInputX : this.inputX;
6767      } else {
6768        this.motionX = this.calibrateX ? calibratedInputX : this.inputX;
6769        this.motionY = this.calibrateY ? calibratedInputY : this.inputY;
6770      }
6771      this.motionX *= this.elementWidth * (this.scalarX / 100);
6772      this.motionY *= this.elementHeight * (this.scalarY / 100);
6773      if (!isNaN(parseFloat(this.limitX))) {
6774        this.motionX = helpers.clamp(this.motionX, -this.limitX, this.limitX);
6775      }
6776      if (!isNaN(parseFloat(this.limitY))) {
6777        this.motionY = helpers.clamp(this.motionY, -this.limitY, this.limitY);
6778      }
6779      this.velocityX += (this.motionX - this.velocityX) * this.frictionX;
6780      this.velocityY += (this.motionY - this.velocityY) * this.frictionY;
6781      for (var index = 0; index < this.layers.length; index++) {
6782        var layer = this.layers[index],
6783            depthX = this.depthsX[index],
6784            depthY = this.depthsY[index],
6785            xOffset = this.velocityX * (depthX * (this.invertX ? -1 : 1)),
6786            yOffset = this.velocityY * (depthY * (this.invertY ? -1 : 1));
6787        this.setPosition(layer, xOffset, yOffset);
6788      }
6789      this.raf = rqAnFr(this.onAnimationFrame);
6790    }
6791  }, {
6792    key: 'rotate',
6793    value: function rotate(beta, gamma) {
6794      // Extract Rotation
6795      var x = (beta || 0) / MAGIC_NUMBER,
6796          //  -90 :: 90
6797      y = (gamma || 0) / MAGIC_NUMBER; // -180 :: 180
6798
6799      // Detect Orientation Change
6800      var portrait = this.windowHeight > this.windowWidth;
6801      if (this.portrait !== portrait) {
6802        this.portrait = portrait;
6803        this.calibrationFlag = true;
6804      }
6805
6806      if (this.calibrationFlag) {
6807        this.calibrationFlag = false;
6808        this.calibrationX = x;
6809        this.calibrationY = y;
6810      }
6811
6812      this.inputX = x;
6813      this.inputY = y;
6814    }
6815  }, {
6816    key: 'onDeviceOrientation',
6817    value: function onDeviceOrientation(event) {
6818      var beta = event.beta;
6819      var gamma = event.gamma;
6820      if (beta !== null && gamma !== null) {
6821        this.orientationStatus = 1;
6822        this.rotate(beta, gamma);
6823      }
6824    }
6825  }, {
6826    key: 'onDeviceMotion',
6827    value: function onDeviceMotion(event) {
6828      var beta = event.rotationRate.beta;
6829      var gamma = event.rotationRate.gamma;
6830      if (beta !== null && gamma !== null) {
6831        this.motionStatus = 1;
6832        this.rotate(beta, gamma);
6833      }
6834    }
6835  }, {
6836    key: 'onMouseMove',
6837    value: function onMouseMove(event) {
6838      var clientX = event.clientX,
6839          clientY = event.clientY;
6840
6841      // reset input to center if hoverOnly is set and we're not hovering the element
6842      if (this.hoverOnly && (clientX < this.elementPositionX || clientX > this.elementPositionX + this.elementWidth || clientY < this.elementPositionY || clientY > this.elementPositionY + this.elementHeight)) {
6843        this.inputX = 0;
6844        this.inputY = 0;
6845        return;
6846      }
6847
6848      if (this.relativeInput) {
6849        // Clip mouse coordinates inside element bounds.
6850        if (this.clipRelativeInput) {
6851          clientX = Math.max(clientX, this.elementPositionX);
6852          clientX = Math.min(clientX, this.elementPositionX + this.elementWidth);
6853          clientY = Math.max(clientY, this.elementPositionY);
6854          clientY = Math.min(clientY, this.elementPositionY + this.elementHeight);
6855        }
6856        // Calculate input relative to the element.
6857        if (this.elementRangeX && this.elementRangeY) {
6858          this.inputX = (clientX - this.elementPositionX - this.elementCenterX) / this.elementRangeX;
6859          this.inputY = (clientY - this.elementPositionY - this.elementCenterY) / this.elementRangeY;
6860        }
6861      } else {
6862        // Calculate input relative to the window.
6863        if (this.windowRadiusX && this.windowRadiusY) {
6864          this.inputX = (clientX - this.windowCenterX) / this.windowRadiusX;
6865          this.inputY = (clientY - this.windowCenterY) / this.windowRadiusY;
6866        }
6867      }
6868    }
6869  }, {
6870    key: 'destroy',
6871    value: function destroy() {
6872      this.disable();
6873
6874      clearTimeout(this.calibrationTimer);
6875      clearTimeout(this.detectionTimer);
6876
6877      this.element.removeAttribute('style');
6878      for (var index = 0; index < this.layers.length; index++) {
6879        this.layers[index].removeAttribute('style');
6880      }
6881
6882      delete this.element;
6883      delete this.layers;
6884    }
6885  }, {
6886    key: 'version',
6887    value: function version() {
6888      return '3.1.0';
6889    }
6890  }]);
6891
6892  return Parallax;
6893}();
6894
6895module.exports = Parallax;
6896
6897},{"object-assign":1,"raf":4}]},{},[5])(5)
6898});
6899//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wZXJmb3JtYW5jZS1ub3cvbGliL3BlcmZvcm1hbmNlLW5vdy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcmFmL2luZGV4LmpzIiwic3JjL3BhcmFsbGF4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUN4RUE7Ozs7Ozs7O0FBUUEsSUFBTSxTQUFTLFFBQVEsS0FBUixDQUFmO0FBQ0EsSUFBTSxlQUFlLFFBQVEsZUFBUixDQUFyQjs7QUFFQSxJQUFNLFVBQVU7QUFDZCxpQkFBZSxFQUREO0FBRWQsV0FBUyxDQUFDLElBQUQsRUFBTyxDQUFDLFVBQUQsRUFBWSxRQUFaLENBQVAsRUFBOEIsQ0FBQyxPQUFELEVBQVMsS0FBVCxDQUE5QixFQUErQyxDQUFDLEtBQUQsRUFBTyxHQUFQLENBQS9DLEVBQTRELENBQUMsTUFBRCxFQUFRLElBQVIsQ0FBNUQsQ0FGSzs7QUFJZCxPQUpjLGlCQUlSLEtBSlEsRUFJRCxHQUpDLEVBSUksR0FKSixFQUlTO0FBQ3JCLFdBQU8sTUFBTSxHQUFOLEdBQ0YsUUFBUSxHQUFSLEdBQWMsR0FBZCxHQUFvQixRQUFRLEdBQVIsR0FBYyxHQUFkLEdBQW9CLEtBRHRDLEdBRUYsUUFBUSxHQUFSLEdBQWMsR0FBZCxHQUFvQixRQUFRLEdBQVIsR0FBYyxHQUFkLEdBQW9CLEtBRjdDO0FBR0QsR0FSYTtBQVVkLE1BVmMsZ0JBVVQsT0FWUyxFQVVBLElBVkEsRUFVTTtBQUNsQixXQUFPLFFBQVEsV0FBUixDQUFvQixRQUFRLFlBQVIsQ0FBcUIsVUFBUSxJQUE3QixDQUFwQixDQUFQO0FBQ0QsR0FaYTtBQWNkLGFBZGMsdUJBY0YsS0FkRSxFQWNLO0FBQ2pCLFFBQUksVUFBVSxNQUFkLEVBQXNCO0FBQ3BCLGFBQU8sSUFBUDtBQUNELEtBRkQsTUFFTyxJQUFJLFVBQVUsT0FBZCxFQUF1QjtBQUM1QixhQUFPLEtBQVA7QUFDRCxLQUZNLE1BRUEsSUFBSSxVQUFVLE1BQWQsRUFBc0I7QUFDM0IsYUFBTyxJQUFQO0FBQ0QsS0FGTSxNQUVBLElBQUksQ0FBQyxNQUFNLFdBQVcsS0FBWCxDQUFOLENBQUQsSUFBNkIsU0FBUyxLQUFULENBQWpDLEVBQWtEO0FBQ3ZELGFBQU8sV0FBVyxLQUFYLENBQVA7QUFDRCxLQUZNLE1BRUE7QUFDTCxhQUFPLEtBQVA7QUFDRDtBQUNGLEdBMUJhO0FBNEJkLFdBNUJjLHFCQTRCSixLQTVCSSxFQTRCRztBQUNmLFdBQU8sTUFBTSxPQUFOLENBQWMsU0FBZCxFQUF5QixVQUFDLEtBQUQsRUFBUSxTQUFSLEVBQXNCO0FBQ3BELGFBQU8sWUFBWSxVQUFVLFdBQVYsRUFBWixHQUFzQyxFQUE3QztBQUNELEtBRk0sQ0FBUDtBQUdELEdBaENhO0FBa0NkLFlBbENjLHNCQWtDSCxPQWxDRyxFQWtDTTtBQUNsQixZQUFRLEdBQVIsQ0FBWSxPQUFaLEVBQXFCLFdBQXJCLEVBQWtDLHNDQUFsQztBQUNBLFlBQVEsR0FBUixDQUFZLE9BQVosRUFBcUIsaUJBQXJCLEVBQXdDLGFBQXhDO0FBQ0EsWUFBUSxHQUFSLENBQVksT0FBWixFQUFxQixxQkFBckIsRUFBNEMsUUFBNUM7QUFDRCxHQXRDYTtBQXdDZCxrQkF4Q2MsNEJBd0NHLEtBeENILEVBd0NVO0FBQ3RCLFFBQUksVUFBVSxTQUFTLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBZDtBQUFBLFFBQ0ksa0JBQWtCLEtBRHRCO0FBQUEsUUFFSSxnQkFBZ0IsSUFGcEI7QUFBQSxRQUdJLGlCQUFpQixLQUhyQjtBQUFBLFFBSUksY0FBYyxJQUpsQjtBQUFBLFFBS0ksYUFBYSxJQUxqQjtBQU1BLFNBQUssSUFBSSxJQUFJLENBQVIsRUFBVyxJQUFJLFFBQVEsT0FBUixDQUFnQixNQUFwQyxFQUE0QyxJQUFJLENBQWhELEVBQW1ELEdBQW5ELEVBQXdEO0FBQ3RELFVBQUksUUFBUSxPQUFSLENBQWdCLENBQWhCLE1BQXVCLElBQTNCLEVBQWlDO0FBQy9CLHNCQUFjLFFBQVEsT0FBUixDQUFnQixDQUFoQixFQUFtQixDQUFuQixJQUF3QixXQUF0QztBQUNBLHFCQUFhLFFBQVEsT0FBUixDQUFnQixDQUFoQixFQUFtQixDQUFuQixJQUF3QixXQUFyQztBQUNELE9BSEQsTUFHTztBQUNMLHNCQUFjLFdBQWQ7QUFDQSxxQkFBYSxXQUFiO0FBQ0Q7QUFDRCxVQUFJLFFBQVEsS0FBUixDQUFjLFVBQWQsTUFBOEIsU0FBbEMsRUFBNkM7QUFDM0MsMEJBQWtCLElBQWxCO0FBQ0E7QUFDRDtBQUNGO0FBQ0QsWUFBTyxLQUFQO0FBQ0UsV0FBSyxJQUFMO0FBQ0UseUJBQWlCLGVBQWpCO0FBQ0E7QUFDRixXQUFLLElBQUw7QUFDRSxZQUFJLGVBQUosRUFBcUI7QUFDbkIsY0FBSSxPQUFPLFNBQVMsSUFBVCxJQUFpQixTQUFTLGFBQVQsQ0FBdUIsTUFBdkIsQ0FBNUI7QUFBQSxjQUNJLGtCQUFrQixTQUFTLGVBRC9CO0FBQUEsY0FFSSxtQkFBbUIsZ0JBQWdCLEtBQWhCLENBQXNCLFFBRjdDO0FBQUEsY0FHSSxnQkFBZ0IsS0FIcEI7O0FBS0EsY0FBSSxDQUFDLFNBQVMsSUFBZCxFQUFvQjtBQUNsQiw0QkFBZ0IsSUFBaEI7QUFDQSw0QkFBZ0IsS0FBaEIsQ0FBc0IsUUFBdEIsR0FBaUMsUUFBakM7QUFDQSw0QkFBZ0IsV0FBaEIsQ0FBNEIsSUFBNUI7QUFDQSxpQkFBSyxLQUFMLENBQVcsUUFBWCxHQUFzQixRQUF0QjtBQUNBLGlCQUFLLEtBQUwsQ0FBVyxVQUFYLEdBQXdCLEVBQXhCO0FBQ0Q7O0FBRUQsZUFBSyxXQUFMLENBQWlCLE9BQWpCO0FBQ0Esa0JBQVEsS0FBUixDQUFjLFVBQWQsSUFBNEIsMEJBQTVCO0FBQ0EsMEJBQWdCLE9BQU8sZ0JBQVAsQ0FBd0IsT0FBeEIsRUFBaUMsZ0JBQWpDLENBQWtELFdBQWxELENBQWhCO0FBQ0EsMkJBQWlCLGtCQUFrQixTQUFsQixJQUErQixjQUFjLE1BQWQsR0FBdUIsQ0FBdEQsSUFBMkQsa0JBQWtCLE1BQTlGO0FBQ0EsMEJBQWdCLEtBQWhCLENBQXNCLFFBQXRCLEdBQWlDLGdCQUFqQztBQUNBLGVBQUssV0FBTCxDQUFpQixPQUFqQjs7QUFFQSxjQUFLLGFBQUwsRUFBcUI7QUFDbkIsaUJBQUssZUFBTCxDQUFxQixPQUFyQjtBQUNBLGlCQUFLLFVBQUwsQ0FBZ0IsV0FBaEIsQ0FBNEIsSUFBNUI7QUFDRDtBQUNGO0FBQ0Q7QUEvQko7QUFpQ0EsV0FBTyxjQUFQO0FBQ0QsR0E5RmE7QUFnR2QsS0FoR2MsZUFnR1YsT0FoR1UsRUFnR0QsUUFoR0MsRUFnR1MsS0FoR1QsRUFnR2dCO0FBQzVCLFFBQUksYUFBYSxRQUFRLGFBQVIsQ0FBc0IsUUFBdEIsQ0FBakI7QUFDQSxRQUFJLENBQUMsVUFBTCxFQUFpQjtBQUNmLFdBQUssSUFBSSxJQUFJLENBQVIsRUFBVyxJQUFJLFFBQVEsT0FBUixDQUFnQixNQUFwQyxFQUE0QyxJQUFJLENBQWhELEVBQW1ELEdBQW5ELEVBQXdEO0FBQ3RELFlBQUksUUFBUSxPQUFSLENBQWdCLENBQWhCLE1BQXVCLElBQTNCLEVBQWlDO0FBQy9CLHVCQUFhLFFBQVEsU0FBUixDQUFrQixRQUFRLE9BQVIsQ0FBZ0IsQ0FBaEIsRUFBbUIsQ0FBbkIsSUFBd0IsR0FBeEIsR0FBOEIsUUFBaEQsQ0FBYjtBQUNELFNBRkQsTUFFTztBQUNMLHVCQUFhLFFBQWI7QUFDRDtBQUNELFlBQUksUUFBUSxLQUFSLENBQWMsVUFBZCxNQUE4QixTQUFsQyxFQUE2QztBQUMzQyxrQkFBUSxhQUFSLENBQXNCLFFBQXRCLElBQWtDLFVBQWxDO0FBQ0E7QUFDRDtBQUNGO0FBQ0Y7QUFDRCxZQUFRLEtBQVIsQ0FBYyxVQUFkLElBQTRCLEtBQTVCO0FBQ0Q7QUFoSGEsQ0FBaEI7O0FBb0hBLElBQU0sZUFBZSxFQUFyQjtBQUFBLElBQ00sV0FBVztBQUNULGlCQUFlLEtBRE47QUFFVCxxQkFBbUIsS0FGVjtBQUdULGdCQUFjLElBSEw7QUFJVCxhQUFXLEtBSkY7QUFLVCx3QkFBc0IsR0FMYjtBQU1ULG9CQUFrQixHQU5UO0FBT1QsZ0JBQWMsR0FQTDtBQVFULGNBQVksS0FSSDtBQVNULGNBQVksSUFUSDtBQVVULFdBQVMsSUFWQTtBQVdULFdBQVMsSUFYQTtBQVlULFVBQVEsS0FaQztBQWFULFVBQVEsS0FiQztBQWNULFdBQVMsSUFkQTtBQWVULFdBQVMsSUFmQTtBQWdCVCxhQUFXLEdBaEJGO0FBaUJULGFBQVcsR0FqQkY7QUFrQlQsV0FBUyxHQWxCQTtBQW1CVCxXQUFTLEdBbkJBO0FBb0JULGlCQUFlLEtBcEJOO0FBcUJULGFBQVcsQ0FyQkY7QUFzQlQsV0FBUyxJQXRCQTtBQXVCVCxZQUFVO0FBdkJELENBRGpCOztJQTJCTSxRO0FBQ0osb0JBQVksT0FBWixFQUFxQixPQUFyQixFQUE4QjtBQUFBOztBQUU1QixTQUFLLE9BQUwsR0FBZSxPQUFmOztBQUVBLFFBQU0sT0FBTztBQUNYLGtCQUFZLFFBQVEsSUFBUixDQUFhLEtBQUssT0FBbEIsRUFBMkIsYUFBM0IsQ0FERDtBQUVYLGtCQUFZLFFBQVEsSUFBUixDQUFhLEtBQUssT0FBbEIsRUFBMkIsYUFBM0IsQ0FGRDtBQUdYLGVBQVMsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixVQUEzQixDQUhFO0FBSVgsZUFBUyxRQUFRLElBQVIsQ0FBYSxLQUFLLE9BQWxCLEVBQTJCLFVBQTNCLENBSkU7QUFLWCxjQUFRLFFBQVEsSUFBUixDQUFhLEtBQUssT0FBbEIsRUFBMkIsU0FBM0IsQ0FMRztBQU1YLGNBQVEsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixTQUEzQixDQU5HO0FBT1gsZUFBUyxRQUFRLElBQVIsQ0FBYSxLQUFLLE9BQWxCLEVBQTJCLFVBQTNCLENBUEU7QUFRWCxlQUFTLFFBQVEsSUFBUixDQUFhLEtBQUssT0FBbEIsRUFBMkIsVUFBM0IsQ0FSRTtBQVNYLGlCQUFXLFFBQVEsSUFBUixDQUFhLEtBQUssT0FBbEIsRUFBMkIsWUFBM0IsQ0FUQTtBQVVYLGlCQUFXLFFBQVEsSUFBUixDQUFhLEtBQUssT0FBbEIsRUFBMkIsWUFBM0IsQ0FWQTtBQVdYLGVBQVMsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixVQUEzQixDQVhFO0FBWVgsZUFBUyxRQUFRLElBQVIsQ0FBYSxLQUFLLE9BQWxCLEVBQTJCLFVBQTNCLENBWkU7QUFhWCxxQkFBZSxRQUFRLElBQVIsQ0FBYSxLQUFLLE9BQWxCLEVBQTJCLGdCQUEzQixDQWJKO0FBY1gsaUJBQVcsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixXQUEzQixDQWRBO0FBZVgscUJBQWUsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixnQkFBM0IsQ0FmSjtBQWdCWCx5QkFBbUIsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixxQkFBM0IsQ0FoQlI7QUFpQlgsaUJBQVcsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixZQUEzQixDQWpCQTtBQWtCWCxvQkFBYyxTQUFTLGFBQVQsQ0FBdUIsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixlQUEzQixDQUF2QixDQWxCSDtBQW1CWCxnQkFBVSxRQUFRLElBQVIsQ0FBYSxLQUFLLE9BQWxCLEVBQTJCLFVBQTNCO0FBbkJDLEtBQWI7O0FBc0JBLFNBQUssSUFBSSxHQUFULElBQWdCLElBQWhCLEVBQXNCO0FBQ3BCLFVBQUksS0FBSyxHQUFMLE1BQWMsSUFBbEIsRUFBd0I7QUFDdEIsZUFBTyxLQUFLLEdBQUwsQ0FBUDtBQUNEO0FBQ0Y7O0FBRUQsaUJBQWEsSUFBYixFQUFtQixRQUFuQixFQUE2QixJQUE3QixFQUFtQyxPQUFuQzs7QUFFQSxRQUFHLENBQUMsS0FBSyxZQUFULEVBQXVCO0FBQ3JCLFdBQUssWUFBTCxHQUFvQixLQUFLLE9BQXpCO0FBQ0Q7O0FBRUQsU0FBSyxnQkFBTCxHQUF3QixJQUF4QjtBQUNBLFNBQUssZUFBTCxHQUF1QixJQUF2QjtBQUNBLFNBQUssT0FBTCxHQUFlLEtBQWY7QUFDQSxTQUFLLE9BQUwsR0FBZSxFQUFmO0FBQ0EsU0FBSyxPQUFMLEdBQWUsRUFBZjtBQUNBLFNBQUssR0FBTCxHQUFXLElBQVg7O0FBRUEsU0FBSyxNQUFMLEdBQWMsSUFBZDtBQUNBLFNBQUssZ0JBQUwsR0FBd0IsQ0FBeEI7QUFDQSxTQUFLLGdCQUFMLEdBQXdCLENBQXhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLENBQXBCO0FBQ0EsU0FBSyxhQUFMLEdBQXFCLENBQXJCOztBQUVBLFNBQUssY0FBTCxHQUFzQixDQUF0QjtBQUNBLFNBQUssY0FBTCxHQUFzQixDQUF0Qjs7QUFFQSxTQUFLLGFBQUwsR0FBcUIsQ0FBckI7QUFDQSxTQUFLLGFBQUwsR0FBcUIsQ0FBckI7O0FBRUEsU0FBSyxZQUFMLEdBQW9CLENBQXBCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLENBQXBCOztBQUVBLFNBQUssTUFBTCxHQUFjLENBQWQ7QUFDQSxTQUFLLE1BQUwsR0FBYyxDQUFkOztBQUVBLFNBQUssT0FBTCxHQUFlLENBQWY7QUFDQSxTQUFLLE9BQUwsR0FBZSxDQUFmOztBQUVBLFNBQUssU0FBTCxHQUFpQixDQUFqQjtBQUNBLFNBQUssU0FBTCxHQUFpQixDQUFqQjs7QUFFQSxTQUFLLFdBQUwsR0FBbUIsS0FBSyxXQUFMLENBQWlCLElBQWpCLENBQXNCLElBQXRCLENBQW5CO0FBQ0EsU0FBSyxtQkFBTCxHQUEyQixLQUFLLG1CQUFMLENBQXlCLElBQXpCLENBQThCLElBQTlCLENBQTNCO0FBQ0EsU0FBSyxjQUFMLEdBQXNCLEtBQUssY0FBTCxDQUFvQixJQUFwQixDQUF5QixJQUF6QixDQUF0QjtBQUNBLFNBQUssa0JBQUwsR0FBMEIsS0FBSyxrQkFBTCxDQUF3QixJQUF4QixDQUE2QixJQUE3QixDQUExQjtBQUNBLFNBQUssYUFBTCxHQUFxQixLQUFLLGFBQUwsQ0FBbUIsSUFBbkIsQ0FBd0IsSUFBeEIsQ0FBckI7QUFDQSxTQUFLLGtCQUFMLEdBQTBCLEtBQUssa0JBQUwsQ0FBd0IsSUFBeEIsQ0FBNkIsSUFBN0IsQ0FBMUI7QUFDQSxTQUFLLGdCQUFMLEdBQXdCLEtBQUssZ0JBQUwsQ0FBc0IsSUFBdEIsQ0FBMkIsSUFBM0IsQ0FBeEI7QUFDQSxTQUFLLGNBQUwsR0FBc0IsS0FBSyxjQUFMLENBQW9CLElBQXBCLENBQXlCLElBQXpCLENBQXRCOztBQUVBLFNBQUssV0FBTCxHQUFtQixJQUFuQjtBQUNBLFNBQUssWUFBTCxHQUFvQixJQUFwQjtBQUNBLFNBQUssYUFBTCxHQUFxQixJQUFyQjtBQUNBLFNBQUssYUFBTCxHQUFxQixJQUFyQjtBQUNBLFNBQUssYUFBTCxHQUFxQixJQUFyQjtBQUNBLFNBQUssYUFBTCxHQUFxQixJQUFyQjtBQUNBLFNBQUssUUFBTCxHQUFnQixLQUFoQjtBQUNBLFNBQUssT0FBTCxHQUFlLENBQUMsVUFBVSxTQUFWLENBQW9CLEtBQXBCLENBQTBCLDRFQUExQixDQUFoQjtBQUNBLFNBQUssYUFBTCxHQUFxQixDQUFDLENBQUMsT0FBTyxpQkFBVCxJQUE4QixDQUFDLEtBQUssT0FBekQ7QUFDQSxTQUFLLGtCQUFMLEdBQTBCLENBQUMsQ0FBQyxPQUFPLHNCQUFULElBQW1DLENBQUMsS0FBSyxPQUFuRTtBQUNBLFNBQUssaUJBQUwsR0FBeUIsQ0FBekI7QUFDQSxTQUFLLFlBQUwsR0FBb0IsQ0FBcEI7O0FBRUEsU0FBSyxVQUFMO0FBQ0Q7Ozs7aUNBRVk7QUFDWCxVQUFJLEtBQUssa0JBQUwsS0FBNEIsU0FBaEMsRUFBMkM7QUFDekMsYUFBSyxrQkFBTCxHQUEwQixRQUFRLGdCQUFSLENBQXlCLElBQXpCLENBQTFCO0FBQ0EsYUFBSyxrQkFBTCxHQUEwQixRQUFRLGdCQUFSLENBQXlCLElBQXpCLENBQTFCO0FBQ0Q7O0FBRUQ7QUFDQSxVQUFJLEtBQUssa0JBQVQsRUFBNkI7QUFDM0IsZ0JBQVEsVUFBUixDQUFtQixLQUFLLE9BQXhCO0FBQ0Q7O0FBRUQsVUFBSSxRQUFRLE9BQU8sZ0JBQVAsQ0FBd0IsS0FBSyxPQUE3QixDQUFaO0FBQ0EsVUFBSSxNQUFNLGdCQUFOLENBQXVCLFVBQXZCLE1BQXVDLFFBQTNDLEVBQXFEO0FBQ25ELGFBQUssT0FBTCxDQUFhLEtBQWIsQ0FBbUIsUUFBbkIsR0FBOEIsVUFBOUI7QUFDRDs7QUFFRDtBQUNBLFVBQUcsQ0FBQyxLQUFLLGFBQVQsRUFBd0I7QUFDdEIsYUFBSyxPQUFMLENBQWEsS0FBYixDQUFtQixhQUFuQixHQUFtQyxNQUFuQztBQUNEOztBQUVEO0FBQ0EsV0FBSyxZQUFMO0FBQ0EsV0FBSyxnQkFBTDtBQUNBLFdBQUssTUFBTDtBQUNBLFdBQUssZ0JBQUwsQ0FBc0IsS0FBSyxnQkFBM0I7QUFDRDs7O3NDQUVpQjtBQUNoQixVQUFHLEtBQUssT0FBUixFQUFpQjtBQUNmLGFBQUssT0FBTDtBQUNEO0FBQ0Y7OzttQ0FFYztBQUNiLFVBQUcsS0FBSyxRQUFSLEVBQWtCO0FBQ2hCLGFBQUssTUFBTCxHQUFjLEtBQUssT0FBTCxDQUFhLGdCQUFiLENBQThCLEtBQUssUUFBbkMsQ0FBZDtBQUNELE9BRkQsTUFFTztBQUNMLGFBQUssTUFBTCxHQUFjLEtBQUssT0FBTCxDQUFhLFFBQTNCO0FBQ0Q7O0FBRUQsVUFBRyxDQUFDLEtBQUssTUFBTCxDQUFZLE1BQWhCLEVBQXdCO0FBQ3RCLGdCQUFRLElBQVIsQ0FBYSxrREFBYjtBQUNEOztBQUVELFdBQUssT0FBTCxHQUFlLEVBQWY7QUFDQSxXQUFLLE9BQUwsR0FBZSxFQUFmOztBQUVBLFdBQUssSUFBSSxRQUFRLENBQWpCLEVBQW9CLFFBQVEsS0FBSyxNQUFMLENBQVksTUFBeEMsRUFBZ0QsT0FBaEQsRUFBeUQ7QUFDdkQsWUFBSSxRQUFRLEtBQUssTUFBTCxDQUFZLEtBQVosQ0FBWjs7QUFFQSxZQUFJLEtBQUssa0JBQVQsRUFBNkI7QUFDM0Isa0JBQVEsVUFBUixDQUFtQixLQUFuQjtBQUNEOztBQUVELGNBQU0sS0FBTixDQUFZLFFBQVosR0FBdUIsUUFBUSxVQUFSLEdBQXFCLFVBQTVDO0FBQ0EsY0FBTSxLQUFOLENBQVksT0FBWixHQUFzQixPQUF0QjtBQUNBLGNBQU0sS0FBTixDQUFZLElBQVosR0FBbUIsQ0FBbkI7QUFDQSxjQUFNLEtBQU4sQ0FBWSxHQUFaLEdBQWtCLENBQWxCOztBQUVBLFlBQUksUUFBUSxRQUFRLElBQVIsQ0FBYSxLQUFiLEVBQW9CLE9BQXBCLEtBQWdDLENBQTVDO0FBQ0EsYUFBSyxPQUFMLENBQWEsSUFBYixDQUFrQixRQUFRLElBQVIsQ0FBYSxLQUFiLEVBQW9CLFNBQXBCLEtBQWtDLEtBQXBEO0FBQ0EsYUFBSyxPQUFMLENBQWEsSUFBYixDQUFrQixRQUFRLElBQVIsQ0FBYSxLQUFiLEVBQW9CLFNBQXBCLEtBQWtDLEtBQXBEO0FBQ0Q7QUFDRjs7O3VDQUVrQjtBQUNqQixXQUFLLFdBQUwsR0FBbUIsT0FBTyxVQUExQjtBQUNBLFdBQUssWUFBTCxHQUFvQixPQUFPLFdBQTNCO0FBQ0EsV0FBSyxhQUFMLEdBQXFCLEtBQUssV0FBTCxHQUFtQixLQUFLLE9BQTdDO0FBQ0EsV0FBSyxhQUFMLEdBQXFCLEtBQUssWUFBTCxHQUFvQixLQUFLLE9BQTlDO0FBQ0EsV0FBSyxhQUFMLEdBQXFCLEtBQUssR0FBTCxDQUFTLEtBQUssYUFBZCxFQUE2QixLQUFLLFdBQUwsR0FBbUIsS0FBSyxhQUFyRCxDQUFyQjtBQUNBLFdBQUssYUFBTCxHQUFxQixLQUFLLEdBQUwsQ0FBUyxLQUFLLGFBQWQsRUFBNkIsS0FBSyxZQUFMLEdBQW9CLEtBQUssYUFBdEQsQ0FBckI7QUFDRDs7O21DQUVjO0FBQ2IsV0FBSyxNQUFMLEdBQWMsS0FBSyxZQUFMLENBQWtCLHFCQUFsQixFQUFkO0FBQ0EsV0FBSyxnQkFBTCxHQUF3QixLQUFLLE1BQUwsQ0FBWSxJQUFwQztBQUNBLFdBQUssZ0JBQUwsR0FBd0IsS0FBSyxNQUFMLENBQVksR0FBcEM7QUFDQSxXQUFLLFlBQUwsR0FBb0IsS0FBSyxNQUFMLENBQVksS0FBaEM7QUFDQSxXQUFLLGFBQUwsR0FBcUIsS0FBSyxNQUFMLENBQVksTUFBakM7QUFDQSxXQUFLLGNBQUwsR0FBc0IsS0FBSyxZQUFMLEdBQW9CLEtBQUssT0FBL0M7QUFDQSxXQUFLLGNBQUwsR0FBc0IsS0FBSyxhQUFMLEdBQXFCLEtBQUssT0FBaEQ7QUFDQSxXQUFLLGFBQUwsR0FBcUIsS0FBSyxHQUFMLENBQVMsS0FBSyxjQUFkLEVBQThCLEtBQUssWUFBTCxHQUFvQixLQUFLLGNBQXZELENBQXJCO0FBQ0EsV0FBSyxhQUFMLEdBQXFCLEtBQUssR0FBTCxDQUFTLEtBQUssY0FBZCxFQUE4QixLQUFLLGFBQUwsR0FBcUIsS0FBSyxjQUF4RCxDQUFyQjtBQUNEOzs7cUNBRWdCLEssRUFBTztBQUN0QixtQkFBYSxLQUFLLGdCQUFsQjtBQUNBLFdBQUssZ0JBQUwsR0FBd0IsV0FBVyxLQUFLLGtCQUFoQixFQUFvQyxLQUFwQyxDQUF4QjtBQUNEOzs7NkJBRVE7QUFDUCxVQUFJLEtBQUssT0FBVCxFQUFrQjtBQUNoQjtBQUNEO0FBQ0QsV0FBSyxPQUFMLEdBQWUsSUFBZjs7QUFFQSxVQUFJLEtBQUssa0JBQVQsRUFBNkI7QUFDM0IsYUFBSyxRQUFMLEdBQWdCLEtBQWhCO0FBQ0EsZUFBTyxnQkFBUCxDQUF3QixtQkFBeEIsRUFBNkMsS0FBSyxtQkFBbEQ7QUFDQSxhQUFLLGNBQUwsR0FBc0IsV0FBVyxLQUFLLGtCQUFoQixFQUFvQyxLQUFLLFlBQXpDLENBQXRCO0FBQ0QsT0FKRCxNQUlPLElBQUksS0FBSyxhQUFULEVBQXdCO0FBQzdCLGFBQUssUUFBTCxHQUFnQixLQUFoQjtBQUNBLGVBQU8sZ0JBQVAsQ0FBd0IsY0FBeEIsRUFBd0MsS0FBSyxjQUE3QztBQUNBLGFBQUssY0FBTCxHQUFzQixXQUFXLEtBQUssYUFBaEIsRUFBK0IsS0FBSyxZQUFwQyxDQUF0QjtBQUNELE9BSk0sTUFJQTtBQUNMLGFBQUssWUFBTCxHQUFvQixDQUFwQjtBQUNBLGFBQUssWUFBTCxHQUFvQixDQUFwQjtBQUNBLGFBQUssUUFBTCxHQUFnQixLQUFoQjtBQUNBLGVBQU8sZ0JBQVAsQ0FBd0IsV0FBeEIsRUFBcUMsS0FBSyxXQUExQztBQUNBLGFBQUssZUFBTDtBQUNEOztBQUVELGFBQU8sZ0JBQVAsQ0FBd0IsUUFBeEIsRUFBa0MsS0FBSyxjQUF2QztBQUNBLFdBQUssR0FBTCxHQUFXLE9BQU8sS0FBSyxnQkFBWixDQUFYO0FBQ0Q7Ozs4QkFFUztBQUNSLFVBQUksQ0FBQyxLQUFLLE9BQVYsRUFBbUI7QUFDakI7QUFDRDtBQUNELFdBQUssT0FBTCxHQUFlLEtBQWY7O0FBRUEsVUFBSSxLQUFLLGtCQUFULEVBQTZCO0FBQzNCLGVBQU8sbUJBQVAsQ0FBMkIsbUJBQTNCLEVBQWdELEtBQUssbUJBQXJEO0FBQ0QsT0FGRCxNQUVPLElBQUksS0FBSyxhQUFULEVBQXdCO0FBQzdCLGVBQU8sbUJBQVAsQ0FBMkIsY0FBM0IsRUFBMkMsS0FBSyxjQUFoRDtBQUNELE9BRk0sTUFFQTtBQUNMLGVBQU8sbUJBQVAsQ0FBMkIsV0FBM0IsRUFBd0MsS0FBSyxXQUE3QztBQUNEOztBQUVELGFBQU8sbUJBQVAsQ0FBMkIsUUFBM0IsRUFBcUMsS0FBSyxjQUExQztBQUNBLGFBQU8sTUFBUCxDQUFjLEtBQUssR0FBbkI7QUFDRDs7OzhCQUVTLEMsRUFBRyxDLEVBQUc7QUFDZCxXQUFLLFVBQUwsR0FBa0IsTUFBTSxTQUFOLEdBQWtCLEtBQUssVUFBdkIsR0FBb0MsQ0FBdEQ7QUFDQSxXQUFLLFVBQUwsR0FBa0IsTUFBTSxTQUFOLEdBQWtCLEtBQUssVUFBdkIsR0FBb0MsQ0FBdEQ7QUFDRDs7OzJCQUVNLEMsRUFBRyxDLEVBQUc7QUFDWCxXQUFLLE9BQUwsR0FBZSxNQUFNLFNBQU4sR0FBa0IsS0FBSyxPQUF2QixHQUFpQyxDQUFoRDtBQUNBLFdBQUssT0FBTCxHQUFlLE1BQU0sU0FBTixHQUFrQixLQUFLLE9BQXZCLEdBQWlDLENBQWhEO0FBQ0Q7Ozs2QkFFUSxDLEVBQUcsQyxFQUFHO0FBQ2IsV0FBSyxTQUFMLEdBQWlCLE1BQU0sU0FBTixHQUFrQixLQUFLLFNBQXZCLEdBQW1DLENBQXBEO0FBQ0EsV0FBSyxTQUFMLEdBQWlCLE1BQU0sU0FBTixHQUFrQixLQUFLLFNBQXZCLEdBQW1DLENBQXBEO0FBQ0Q7OzsyQkFFTSxDLEVBQUcsQyxFQUFHO0FBQ1gsV0FBSyxPQUFMLEdBQWUsTUFBTSxTQUFOLEdBQWtCLEtBQUssT0FBdkIsR0FBaUMsQ0FBaEQ7QUFDQSxXQUFLLE9BQUwsR0FBZSxNQUFNLFNBQU4sR0FBa0IsS0FBSyxPQUF2QixHQUFpQyxDQUFoRDtBQUNEOzs7MEJBRUssQyxFQUFHLEMsRUFBRztBQUNWLFdBQUssTUFBTCxHQUFjLE1BQU0sU0FBTixHQUFrQixLQUFLLE1BQXZCLEdBQWdDLENBQTlDO0FBQ0EsV0FBSyxNQUFMLEdBQWMsTUFBTSxTQUFOLEdBQWtCLEtBQUssTUFBdkIsR0FBZ0MsQ0FBOUM7QUFDRDs7OzJCQUVNLEMsRUFBRyxDLEVBQUc7QUFDWCxXQUFLLE9BQUwsR0FBZSxNQUFNLFNBQU4sR0FBa0IsS0FBSyxPQUF2QixHQUFpQyxDQUFoRDtBQUNBLFdBQUssT0FBTCxHQUFlLE1BQU0sU0FBTixHQUFrQixLQUFLLE9BQXZCLEdBQWlDLENBQWhEO0FBQ0Q7OztvQ0FFZSxPLEVBQVM7QUFDdkIsV0FBSyxZQUFMLEdBQW9CLE9BQXBCO0FBQ0EsV0FBSyxnQkFBTDtBQUNEOzs7Z0NBRVcsTyxFQUFTLEMsRUFBRyxDLEVBQUc7QUFDekIsVUFBSSxFQUFFLE9BQUYsQ0FBVSxLQUFLLFNBQWYsSUFBNEIsSUFBaEM7QUFDQSxVQUFJLEVBQUUsT0FBRixDQUFVLEtBQUssU0FBZixJQUE0QixJQUFoQztBQUNBLFVBQUksS0FBSyxrQkFBVCxFQUE2QjtBQUMzQixnQkFBUSxHQUFSLENBQVksT0FBWixFQUFxQixXQUFyQixFQUFrQyxpQkFBaUIsQ0FBakIsR0FBcUIsR0FBckIsR0FBMkIsQ0FBM0IsR0FBK0IsS0FBakU7QUFDRCxPQUZELE1BRU8sSUFBSSxLQUFLLGtCQUFULEVBQTZCO0FBQ2xDLGdCQUFRLEdBQVIsQ0FBWSxPQUFaLEVBQXFCLFdBQXJCLEVBQWtDLGVBQWUsQ0FBZixHQUFtQixHQUFuQixHQUF5QixDQUF6QixHQUE2QixHQUEvRDtBQUNELE9BRk0sTUFFQTtBQUNMLGdCQUFRLEtBQVIsQ0FBYyxJQUFkLEdBQXFCLENBQXJCO0FBQ0EsZ0JBQVEsS0FBUixDQUFjLEdBQWQsR0FBb0IsQ0FBcEI7QUFDRDtBQUNGOzs7eUNBRW9CO0FBQ25CLFVBQUksS0FBSyxrQkFBTCxJQUEyQixLQUFLLGlCQUFMLEtBQTJCLENBQTFELEVBQTZEO0FBQzNELGFBQUssT0FBTDtBQUNBLGFBQUssa0JBQUwsR0FBMEIsS0FBMUI7QUFDQSxhQUFLLE1BQUw7QUFDRCxPQUpELE1BSU87QUFDTCxhQUFLLGVBQUw7QUFDRDtBQUNGOzs7b0NBRWU7QUFDZCxVQUFJLEtBQUssYUFBTCxJQUFzQixLQUFLLFlBQUwsS0FBc0IsQ0FBaEQsRUFBbUQ7QUFDakQsYUFBSyxPQUFMO0FBQ0EsYUFBSyxhQUFMLEdBQXFCLEtBQXJCO0FBQ0EsYUFBSyxNQUFMO0FBQ0QsT0FKRCxNQUlPO0FBQ0wsYUFBSyxlQUFMO0FBQ0Q7QUFDRjs7O3lDQUVvQjtBQUNuQixXQUFLLGVBQUwsR0FBdUIsSUFBdkI7QUFDRDs7O3FDQUVnQjtBQUNmLFdBQUssZ0JBQUw7QUFDRDs7O3VDQUVrQjtBQUNqQixXQUFLLFlBQUw7QUFDQSxVQUFJLG1CQUFtQixLQUFLLE1BQUwsR0FBYyxLQUFLLFlBQTFDO0FBQUEsVUFDSSxtQkFBbUIsS0FBSyxNQUFMLEdBQWMsS0FBSyxZQUQxQztBQUVBLFVBQUssS0FBSyxHQUFMLENBQVMsZ0JBQVQsSUFBNkIsS0FBSyxvQkFBbkMsSUFBNkQsS0FBSyxHQUFMLENBQVMsZ0JBQVQsSUFBNkIsS0FBSyxvQkFBbkcsRUFBMEg7QUFDeEgsYUFBSyxnQkFBTCxDQUFzQixDQUF0QjtBQUNEO0FBQ0QsVUFBSSxLQUFLLFFBQVQsRUFBbUI7QUFDakIsYUFBSyxPQUFMLEdBQWUsS0FBSyxVQUFMLEdBQWtCLGdCQUFsQixHQUFxQyxLQUFLLE1BQXpEO0FBQ0EsYUFBSyxPQUFMLEdBQWUsS0FBSyxVQUFMLEdBQWtCLGdCQUFsQixHQUFxQyxLQUFLLE1BQXpEO0FBQ0QsT0FIRCxNQUdPO0FBQ0wsYUFBSyxPQUFMLEdBQWUsS0FBSyxVQUFMLEdBQWtCLGdCQUFsQixHQUFxQyxLQUFLLE1BQXpEO0FBQ0EsYUFBSyxPQUFMLEdBQWUsS0FBSyxVQUFMLEdBQWtCLGdCQUFsQixHQUFxQyxLQUFLLE1BQXpEO0FBQ0Q7QUFDRCxXQUFLLE9BQUwsSUFBZ0IsS0FBSyxZQUFMLElBQXFCLEtBQUssT0FBTCxHQUFlLEdBQXBDLENBQWhCO0FBQ0EsV0FBSyxPQUFMLElBQWdCLEtBQUssYUFBTCxJQUFzQixLQUFLLE9BQUwsR0FBZSxHQUFyQyxDQUFoQjtBQUNBLFVBQUksQ0FBQyxNQUFNLFdBQVcsS0FBSyxNQUFoQixDQUFOLENBQUwsRUFBcUM7QUFDbkMsYUFBSyxPQUFMLEdBQWUsUUFBUSxLQUFSLENBQWMsS0FBSyxPQUFuQixFQUE0QixDQUFDLEtBQUssTUFBbEMsRUFBMEMsS0FBSyxNQUEvQyxDQUFmO0FBQ0Q7QUFDRCxVQUFJLENBQUMsTUFBTSxXQUFXLEtBQUssTUFBaEIsQ0FBTixDQUFMLEVBQXFDO0FBQ25DLGFBQUssT0FBTCxHQUFlLFFBQVEsS0FBUixDQUFjLEtBQUssT0FBbkIsRUFBNEIsQ0FBQyxLQUFLLE1BQWxDLEVBQTBDLEtBQUssTUFBL0MsQ0FBZjtBQUNEO0FBQ0QsV0FBSyxTQUFMLElBQWtCLENBQUMsS0FBSyxPQUFMLEdBQWUsS0FBSyxTQUFyQixJQUFrQyxLQUFLLFNBQXpEO0FBQ0EsV0FBSyxTQUFMLElBQWtCLENBQUMsS0FBSyxPQUFMLEdBQWUsS0FBSyxTQUFyQixJQUFrQyxLQUFLLFNBQXpEO0FBQ0EsV0FBSyxJQUFJLFFBQVEsQ0FBakIsRUFBb0IsUUFBUSxLQUFLLE1BQUwsQ0FBWSxNQUF4QyxFQUFnRCxPQUFoRCxFQUF5RDtBQUN2RCxZQUFJLFFBQVEsS0FBSyxNQUFMLENBQVksS0FBWixDQUFaO0FBQUEsWUFDSSxTQUFTLEtBQUssT0FBTCxDQUFhLEtBQWIsQ0FEYjtBQUFBLFlBRUksU0FBUyxLQUFLLE9BQUwsQ0FBYSxLQUFiLENBRmI7QUFBQSxZQUdJLFVBQVUsS0FBSyxTQUFMLElBQWtCLFVBQVUsS0FBSyxPQUFMLEdBQWUsQ0FBQyxDQUFoQixHQUFvQixDQUE5QixDQUFsQixDQUhkO0FBQUEsWUFJSSxVQUFVLEtBQUssU0FBTCxJQUFrQixVQUFVLEtBQUssT0FBTCxHQUFlLENBQUMsQ0FBaEIsR0FBb0IsQ0FBOUIsQ0FBbEIsQ0FKZDtBQUtBLGFBQUssV0FBTCxDQUFpQixLQUFqQixFQUF3QixPQUF4QixFQUFpQyxPQUFqQztBQUNEO0FBQ0QsV0FBSyxHQUFMLEdBQVcsT0FBTyxLQUFLLGdCQUFaLENBQVg7QUFDRDs7OzJCQUVNLEksRUFBTSxLLEVBQU07QUFDakI7QUFDQSxVQUFJLElBQUksQ0FBQyxRQUFRLENBQVQsSUFBYyxZQUF0QjtBQUFBLFVBQW9DO0FBQ2hDLFVBQUksQ0FBQyxTQUFTLENBQVYsSUFBZSxZQUR2QixDQUZpQixDQUdtQjs7QUFFcEM7QUFDQSxVQUFJLFdBQVcsS0FBSyxZQUFMLEdBQW9CLEtBQUssV0FBeEM7QUFDQSxVQUFJLEtBQUssUUFBTCxLQUFrQixRQUF0QixFQUFnQztBQUM5QixhQUFLLFFBQUwsR0FBZ0IsUUFBaEI7QUFDQSxhQUFLLGVBQUwsR0FBdUIsSUFBdkI7QUFDRDs7QUFFRCxVQUFJLEtBQUssZUFBVCxFQUEwQjtBQUN4QixhQUFLLGVBQUwsR0FBdUIsS0FBdkI7QUFDQSxhQUFLLFlBQUwsR0FBb0IsQ0FBcEI7QUFDQSxhQUFLLFlBQUwsR0FBb0IsQ0FBcEI7QUFDRDs7QUFFRCxXQUFLLE1BQUwsR0FBYyxDQUFkO0FBQ0EsV0FBSyxNQUFMLEdBQWMsQ0FBZDtBQUNEOzs7d0NBRW1CLEssRUFBTztBQUN6QixVQUFJLE9BQU8sTUFBTSxJQUFqQjtBQUNBLFVBQUksUUFBUSxNQUFNLEtBQWxCO0FBQ0EsVUFBSSxTQUFTLElBQVQsSUFBaUIsVUFBVSxJQUEvQixFQUFxQztBQUNuQyxhQUFLLGlCQUFMLEdBQXlCLENBQXpCO0FBQ0EsYUFBSyxNQUFMLENBQVksSUFBWixFQUFrQixLQUFsQjtBQUNEO0FBQ0Y7OzttQ0FFYyxLLEVBQU87QUFDcEIsVUFBSSxPQUFPLE1BQU0sWUFBTixDQUFtQixJQUE5QjtBQUNBLFVBQUksUUFBUSxNQUFNLFlBQU4sQ0FBbUIsS0FBL0I7QUFDQSxVQUFJLFNBQVMsSUFBVCxJQUFpQixVQUFVLElBQS9CLEVBQXFDO0FBQ25DLGFBQUssWUFBTCxHQUFvQixDQUFwQjtBQUNBLGFBQUssTUFBTCxDQUFZLElBQVosRUFBa0IsS0FBbEI7QUFDRDtBQUNGOzs7Z0NBRVcsSyxFQUFPO0FBQ2pCLFVBQUksVUFBVSxNQUFNLE9BQXBCO0FBQUEsVUFDSSxVQUFVLE1BQU0sT0FEcEI7O0FBR0E7QUFDQSxVQUFHLEtBQUssU0FBTCxLQUNDLFVBQVUsS0FBSyxnQkFBZixJQUFtQyxVQUFVLEtBQUssZ0JBQUwsR0FBd0IsS0FBSyxZQUEzRSxJQUNBLFVBQVUsS0FBSyxnQkFBZixJQUFtQyxVQUFVLEtBQUssZ0JBQUwsR0FBd0IsS0FBSyxhQUYxRSxDQUFILEVBRThGO0FBQzFGLGFBQUssTUFBTCxHQUFjLENBQWQ7QUFDQSxhQUFLLE1BQUwsR0FBYyxDQUFkO0FBQ0E7QUFDRDs7QUFFSCxVQUFJLEtBQUssYUFBVCxFQUF3QjtBQUN0QjtBQUNBLFlBQUksS0FBSyxpQkFBVCxFQUE0QjtBQUMxQixvQkFBVSxLQUFLLEdBQUwsQ0FBUyxPQUFULEVBQWtCLEtBQUssZ0JBQXZCLENBQVY7QUFDQSxvQkFBVSxLQUFLLEdBQUwsQ0FBUyxPQUFULEVBQWtCLEtBQUssZ0JBQUwsR0FBd0IsS0FBSyxZQUEvQyxDQUFWO0FBQ0Esb0JBQVUsS0FBSyxHQUFMLENBQVMsT0FBVCxFQUFrQixLQUFLLGdCQUF2QixDQUFWO0FBQ0Esb0JBQVUsS0FBSyxHQUFMLENBQVMsT0FBVCxFQUFrQixLQUFLLGdCQUFMLEdBQXdCLEtBQUssYUFBL0MsQ0FBVjtBQUNEO0FBQ0Q7QUFDQSxZQUFHLEtBQUssYUFBTCxJQUFzQixLQUFLLGFBQTlCLEVBQTZDO0FBQzNDLGVBQUssTUFBTCxHQUFjLENBQUMsVUFBVSxLQUFLLGdCQUFmLEdBQWtDLEtBQUssY0FBeEMsSUFBMEQsS0FBSyxhQUE3RTtBQUNBLGVBQUssTUFBTCxHQUFjLENBQUMsVUFBVSxLQUFLLGdCQUFmLEdBQWtDLEtBQUssY0FBeEMsSUFBMEQsS0FBSyxhQUE3RTtBQUNEO0FBQ0YsT0FiRCxNQWFPO0FBQ0w7QUFDQSxZQUFHLEtBQUssYUFBTCxJQUFzQixLQUFLLGFBQTlCLEVBQTZDO0FBQzNDLGVBQUssTUFBTCxHQUFjLENBQUMsVUFBVSxLQUFLLGFBQWhCLElBQWlDLEtBQUssYUFBcEQ7QUFDQSxlQUFLLE1BQUwsR0FBYyxDQUFDLFVBQVUsS0FBSyxhQUFoQixJQUFpQyxLQUFLLGFBQXBEO0FBQ0Q7QUFDRjtBQUNGOzs7OEJBRVM7QUFDUixXQUFLLE9BQUw7O0FBRUEsbUJBQWEsS0FBSyxnQkFBbEI7QUFDQSxtQkFBYSxLQUFLLGNBQWxCOztBQUVBLFdBQUssT0FBTCxDQUFhLGVBQWIsQ0FBNkIsT0FBN0I7QUFDQSxXQUFLLElBQUksUUFBUSxDQUFqQixFQUFvQixRQUFRLEtBQUssTUFBTCxDQUFZLE1BQXhDLEVBQWdELE9BQWhELEVBQXlEO0FBQ3ZELGFBQUssTUFBTCxDQUFZLEtBQVosRUFBbUIsZUFBbkIsQ0FBbUMsT0FBbkM7QUFDRDs7QUFFRCxhQUFPLEtBQUssT0FBWjtBQUNBLGFBQU8sS0FBSyxNQUFaO0FBQ0Q7Ozs4QkFFUztBQUNSLGFBQU8sT0FBUDtBQUNEOzs7Ozs7QUFJSCxPQUFPLE9BQVAsR0FBaUIsUUFBakIiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi4yXG4oZnVuY3Rpb24oKSB7XG4gIHZhciBnZXROYW5vU2Vjb25kcywgaHJ0aW1lLCBsb2FkVGltZSwgbW9kdWxlTG9hZFRpbWUsIG5vZGVMb2FkVGltZSwgdXBUaW1lO1xuXG4gIGlmICgodHlwZW9mIHBlcmZvcm1hbmNlICE9PSBcInVuZGVmaW5lZFwiICYmIHBlcmZvcm1hbmNlICE9PSBudWxsKSAmJiBwZXJmb3JtYW5jZS5ub3cpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIH07XG4gIH0gZWxzZSBpZiAoKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MgIT09IG51bGwpICYmIHByb2Nlc3MuaHJ0aW1lKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAoZ2V0TmFub1NlY29uZHMoKSAtIG5vZGVMb2FkVGltZSkgLyAxZTY7XG4gICAgfTtcbiAgICBocnRpbWUgPSBwcm9jZXNzLmhydGltZTtcbiAgICBnZXROYW5vU2Vjb25kcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGhyO1xuICAgICAgaHIgPSBocnRpbWUoKTtcbiAgICAgIHJldHVybiBoclswXSAqIDFlOSArIGhyWzFdO1xuICAgIH07XG4gICAgbW9kdWxlTG9hZFRpbWUgPSBnZXROYW5vU2Vjb25kcygpO1xuICAgIHVwVGltZSA9IHByb2Nlc3MudXB0aW1lKCkgKiAxZTk7XG4gICAgbm9kZUxvYWRUaW1lID0gbW9kdWxlTG9hZFRpbWUgLSB1cFRpbWU7XG4gIH0gZWxzZSBpZiAoRGF0ZS5ub3cpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBsb2FkVGltZTtcbiAgICB9O1xuICAgIGxvYWRUaW1lID0gRGF0ZS5ub3coKTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbG9hZFRpbWU7XG4gICAgfTtcbiAgICBsb2FkVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9XG5cbn0pLmNhbGwodGhpcyk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBlcmZvcm1hbmNlLW5vdy5qcy5tYXBcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCJ2YXIgbm93ID0gcmVxdWlyZSgncGVyZm9ybWFuY2Utbm93JylcbiAgLCByb290ID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3dcbiAgLCB2ZW5kb3JzID0gWydtb3onLCAnd2Via2l0J11cbiAgLCBzdWZmaXggPSAnQW5pbWF0aW9uRnJhbWUnXG4gICwgcmFmID0gcm9vdFsncmVxdWVzdCcgKyBzdWZmaXhdXG4gICwgY2FmID0gcm9vdFsnY2FuY2VsJyArIHN1ZmZpeF0gfHwgcm9vdFsnY2FuY2VsUmVxdWVzdCcgKyBzdWZmaXhdXG5cbmZvcih2YXIgaSA9IDA7ICFyYWYgJiYgaSA8IHZlbmRvcnMubGVuZ3RoOyBpKyspIHtcbiAgcmFmID0gcm9vdFt2ZW5kb3JzW2ldICsgJ1JlcXVlc3QnICsgc3VmZml4XVxuICBjYWYgPSByb290W3ZlbmRvcnNbaV0gKyAnQ2FuY2VsJyArIHN1ZmZpeF1cbiAgICAgIHx8IHJvb3RbdmVuZG9yc1tpXSArICdDYW5jZWxSZXF1ZXN0JyArIHN1ZmZpeF1cbn1cblxuLy8gU29tZSB2ZXJzaW9ucyBvZiBGRiBoYXZlIHJBRiBidXQgbm90IGNBRlxuaWYoIXJhZiB8fCAhY2FmKSB7XG4gIHZhciBsYXN0ID0gMFxuICAgICwgaWQgPSAwXG4gICAgLCBxdWV1ZSA9IFtdXG4gICAgLCBmcmFtZUR1cmF0aW9uID0gMTAwMCAvIDYwXG5cbiAgcmFmID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICBpZihxdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHZhciBfbm93ID0gbm93KClcbiAgICAgICAgLCBuZXh0ID0gTWF0aC5tYXgoMCwgZnJhbWVEdXJhdGlvbiAtIChfbm93IC0gbGFzdCkpXG4gICAgICBsYXN0ID0gbmV4dCArIF9ub3dcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjcCA9IHF1ZXVlLnNsaWNlKDApXG4gICAgICAgIC8vIENsZWFyIHF1ZXVlIGhlcmUgdG8gcHJldmVudFxuICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBhcHBlbmRpbmcgbGlzdGVuZXJzXG4gICAgICAgIC8vIHRvIHRoZSBjdXJyZW50IGZyYW1lJ3MgcXVldWVcbiAgICAgICAgcXVldWUubGVuZ3RoID0gMFxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgY3AubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZighY3BbaV0uY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgIGNwW2ldLmNhbGxiYWNrKGxhc3QpXG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgdGhyb3cgZSB9LCAwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgTWF0aC5yb3VuZChuZXh0KSlcbiAgICB9XG4gICAgcXVldWUucHVzaCh7XG4gICAgICBoYW5kbGU6ICsraWQsXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICBjYW5jZWxsZWQ6IGZhbHNlXG4gICAgfSlcbiAgICByZXR1cm4gaWRcbiAgfVxuXG4gIGNhZiA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYocXVldWVbaV0uaGFuZGxlID09PSBoYW5kbGUpIHtcbiAgICAgICAgcXVldWVbaV0uY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuKSB7XG4gIC8vIFdyYXAgaW4gYSBuZXcgZnVuY3Rpb24gdG8gcHJldmVudFxuICAvLyBgY2FuY2VsYCBwb3RlbnRpYWxseSBiZWluZyBhc3NpZ25lZFxuICAvLyB0byB0aGUgbmF0aXZlIHJBRiBmdW5jdGlvblxuICByZXR1cm4gcmFmLmNhbGwocm9vdCwgZm4pXG59XG5tb2R1bGUuZXhwb3J0cy5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgY2FmLmFwcGx5KHJvb3QsIGFyZ3VtZW50cylcbn1cbm1vZHVsZS5leHBvcnRzLnBvbHlmaWxsID0gZnVuY3Rpb24oKSB7XG4gIHJvb3QucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gcmFmXG4gIHJvb3QuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBjYWZcbn1cbiIsIi8qKlxuKiBQYXJhbGxheC5qc1xuKiBAYXV0aG9yIE1hdHRoZXcgV2FnZXJmaWVsZCAtIEB3YWdlcmZpZWxkLCBSZW7DqSBSb3RoIC0gbWFpbEByZW5lcm90aC5vcmdcbiogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBwYXJhbGxheCBlZmZlY3QgYmV0d2VlbiBhbiBhcnJheSBvZiBsYXllcnMsXG4qICAgICAgICAgICAgICBkcml2aW5nIHRoZSBtb3Rpb24gZnJvbSB0aGUgZ3lyb3Njb3BlIG91dHB1dCBvZiBhIHNtYXJ0ZGV2aWNlLlxuKiAgICAgICAgICAgICAgSWYgbm8gZ3lyb3Njb3BlIGlzIGF2YWlsYWJsZSwgdGhlIGN1cnNvciBwb3NpdGlvbiBpcyB1c2VkLlxuKi9cblxuY29uc3QgcnFBbkZyID0gcmVxdWlyZSgncmFmJylcbmNvbnN0IG9iamVjdEFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKVxuXG5jb25zdCBoZWxwZXJzID0ge1xuICBwcm9wZXJ0eUNhY2hlOiB7fSxcbiAgdmVuZG9yczogW251bGwsIFsnLXdlYmtpdC0nLCd3ZWJraXQnXSwgWyctbW96LScsJ01veiddLCBbJy1vLScsJ08nXSwgWyctbXMtJywnbXMnXV0sXG5cbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIG1pbiA8IG1heFxuICAgICAgPyAodmFsdWUgPCBtaW4gPyBtaW4gOiB2YWx1ZSA+IG1heCA/IG1heCA6IHZhbHVlKVxuICAgICAgOiAodmFsdWUgPCBtYXggPyBtYXggOiB2YWx1ZSA+IG1pbiA/IG1pbiA6IHZhbHVlKVxuICB9LFxuXG4gIGRhdGEoZWxlbWVudCwgbmFtZSkge1xuICAgIHJldHVybiBoZWxwZXJzLmRlc2VyaWFsaXplKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLScrbmFtZSkpXG4gIH0sXG5cbiAgZGVzZXJpYWxpemUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIGlmICghaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpICYmIGlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgfSxcblxuICBjYW1lbENhc2UodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvLSsoLik/L2csIChtYXRjaCwgY2hhcmFjdGVyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhcmFjdGVyID8gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCkgOiAnJ1xuICAgIH0pXG4gIH0sXG5cbiAgYWNjZWxlcmF0ZShlbGVtZW50KSB7XG4gICAgaGVscGVycy5jc3MoZWxlbWVudCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUzZCgwLDAsMCkgcm90YXRlKDAuMDAwMWRlZyknKVxuICAgIGhlbHBlcnMuY3NzKGVsZW1lbnQsICd0cmFuc2Zvcm0tc3R5bGUnLCAncHJlc2VydmUtM2QnKVxuICAgIGhlbHBlcnMuY3NzKGVsZW1lbnQsICdiYWNrZmFjZS12aXNpYmlsaXR5JywgJ2hpZGRlbicpXG4gIH0sXG5cbiAgdHJhbnNmb3JtU3VwcG9ydCh2YWx1ZSkge1xuICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG4gICAgICAgIHByb3BlcnR5U3VwcG9ydCA9IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0eVZhbHVlID0gbnVsbCxcbiAgICAgICAgZmVhdHVyZVN1cHBvcnQgPSBmYWxzZSxcbiAgICAgICAgY3NzUHJvcGVydHkgPSBudWxsLFxuICAgICAgICBqc1Byb3BlcnR5ID0gbnVsbFxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gaGVscGVycy52ZW5kb3JzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGhlbHBlcnMudmVuZG9yc1tpXSAhPT0gbnVsbCkge1xuICAgICAgICBjc3NQcm9wZXJ0eSA9IGhlbHBlcnMudmVuZG9yc1tpXVswXSArICd0cmFuc2Zvcm0nXG4gICAgICAgIGpzUHJvcGVydHkgPSBoZWxwZXJzLnZlbmRvcnNbaV1bMV0gKyAnVHJhbnNmb3JtJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3NzUHJvcGVydHkgPSAndHJhbnNmb3JtJ1xuICAgICAgICBqc1Byb3BlcnR5ID0gJ3RyYW5zZm9ybSdcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50LnN0eWxlW2pzUHJvcGVydHldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcGVydHlTdXBwb3J0ID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2godmFsdWUpIHtcbiAgICAgIGNhc2UgJzJEJzpcbiAgICAgICAgZmVhdHVyZVN1cHBvcnQgPSBwcm9wZXJ0eVN1cHBvcnRcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJzNEJzpcbiAgICAgICAgaWYgKHByb3BlcnR5U3VwcG9ydCkge1xuICAgICAgICAgIGxldCBib2R5ID0gZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdib2R5JyksXG4gICAgICAgICAgICAgIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgICAgICAgICAgZG9jdW1lbnRPdmVyZmxvdyA9IGRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyxcbiAgICAgICAgICAgICAgaXNDcmVhdGVkQm9keSA9IGZhbHNlXG5cbiAgICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgICAgIGlzQ3JlYXRlZEJvZHkgPSB0cnVlXG4gICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuICAgICAgICAgICAgZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGJvZHkpXG4gICAgICAgICAgICBib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcbiAgICAgICAgICAgIGJvZHkuc3R5bGUuYmFja2dyb3VuZCA9ICcnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KVxuICAgICAgICAgIGVsZW1lbnQuc3R5bGVbanNQcm9wZXJ0eV0gPSAndHJhbnNsYXRlM2QoMXB4LDFweCwxcHgpJ1xuICAgICAgICAgIHByb3BlcnR5VmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGNzc1Byb3BlcnR5KVxuICAgICAgICAgIGZlYXR1cmVTdXBwb3J0ID0gcHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5VmFsdWUubGVuZ3RoID4gMCAmJiBwcm9wZXJ0eVZhbHVlICE9PSAnbm9uZSdcbiAgICAgICAgICBkb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBkb2N1bWVudE92ZXJmbG93XG4gICAgICAgICAgYm9keS5yZW1vdmVDaGlsZChlbGVtZW50KVxuXG4gICAgICAgICAgaWYgKCBpc0NyZWF0ZWRCb2R5ICkge1xuICAgICAgICAgICAgYm9keS5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJylcbiAgICAgICAgICAgIGJvZHkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChib2R5KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgIH1cbiAgICByZXR1cm4gZmVhdHVyZVN1cHBvcnRcbiAgfSxcblxuICBjc3MoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlKSB7XG4gICAgbGV0IGpzUHJvcGVydHkgPSBoZWxwZXJzLnByb3BlcnR5Q2FjaGVbcHJvcGVydHldXG4gICAgaWYgKCFqc1Byb3BlcnR5KSB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGhlbHBlcnMudmVuZG9ycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGhlbHBlcnMudmVuZG9yc1tpXSAhPT0gbnVsbCkge1xuICAgICAgICAgIGpzUHJvcGVydHkgPSBoZWxwZXJzLmNhbWVsQ2FzZShoZWxwZXJzLnZlbmRvcnNbaV1bMV0gKyAnLScgKyBwcm9wZXJ0eSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBqc1Byb3BlcnR5ID0gcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudC5zdHlsZVtqc1Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaGVscGVycy5wcm9wZXJ0eUNhY2hlW3Byb3BlcnR5XSA9IGpzUHJvcGVydHlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsZW1lbnQuc3R5bGVbanNQcm9wZXJ0eV0gPSB2YWx1ZVxuICB9XG5cbn1cblxuY29uc3QgTUFHSUNfTlVNQkVSID0gMzAsXG4gICAgICBERUZBVUxUUyA9IHtcbiAgICAgICAgcmVsYXRpdmVJbnB1dDogZmFsc2UsXG4gICAgICAgIGNsaXBSZWxhdGl2ZUlucHV0OiBmYWxzZSxcbiAgICAgICAgaW5wdXRFbGVtZW50OiBudWxsLFxuICAgICAgICBob3Zlck9ubHk6IGZhbHNlLFxuICAgICAgICBjYWxpYnJhdGlvblRocmVzaG9sZDogMTAwLFxuICAgICAgICBjYWxpYnJhdGlvbkRlbGF5OiA1MDAsXG4gICAgICAgIHN1cHBvcnREZWxheTogNTAwLFxuICAgICAgICBjYWxpYnJhdGVYOiBmYWxzZSxcbiAgICAgICAgY2FsaWJyYXRlWTogdHJ1ZSxcbiAgICAgICAgaW52ZXJ0WDogdHJ1ZSxcbiAgICAgICAgaW52ZXJ0WTogdHJ1ZSxcbiAgICAgICAgbGltaXRYOiBmYWxzZSxcbiAgICAgICAgbGltaXRZOiBmYWxzZSxcbiAgICAgICAgc2NhbGFyWDogMTAuMCxcbiAgICAgICAgc2NhbGFyWTogMTAuMCxcbiAgICAgICAgZnJpY3Rpb25YOiAwLjEsXG4gICAgICAgIGZyaWN0aW9uWTogMC4xLFxuICAgICAgICBvcmlnaW5YOiAwLjUsXG4gICAgICAgIG9yaWdpblk6IDAuNSxcbiAgICAgICAgcG9pbnRlckV2ZW50czogZmFsc2UsXG4gICAgICAgIHByZWNpc2lvbjogMSxcbiAgICAgICAgb25SZWFkeTogbnVsbCxcbiAgICAgICAgc2VsZWN0b3I6IG51bGxcbiAgICAgIH1cblxuY2xhc3MgUGFyYWxsYXgge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG5cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgY2FsaWJyYXRlWDogaGVscGVycy5kYXRhKHRoaXMuZWxlbWVudCwgJ2NhbGlicmF0ZS14JyksXG4gICAgICBjYWxpYnJhdGVZOiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAnY2FsaWJyYXRlLXknKSxcbiAgICAgIGludmVydFg6IGhlbHBlcnMuZGF0YSh0aGlzLmVsZW1lbnQsICdpbnZlcnQteCcpLFxuICAgICAgaW52ZXJ0WTogaGVscGVycy5kYXRhKHRoaXMuZWxlbWVudCwgJ2ludmVydC15JyksXG4gICAgICBsaW1pdFg6IGhlbHBlcnMuZGF0YSh0aGlzLmVsZW1lbnQsICdsaW1pdC14JyksXG4gICAgICBsaW1pdFk6IGhlbHBlcnMuZGF0YSh0aGlzLmVsZW1lbnQsICdsaW1pdC15JyksXG4gICAgICBzY2FsYXJYOiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAnc2NhbGFyLXgnKSxcbiAgICAgIHNjYWxhclk6IGhlbHBlcnMuZGF0YSh0aGlzLmVsZW1lbnQsICdzY2FsYXIteScpLFxuICAgICAgZnJpY3Rpb25YOiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAnZnJpY3Rpb24teCcpLFxuICAgICAgZnJpY3Rpb25ZOiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAnZnJpY3Rpb24teScpLFxuICAgICAgb3JpZ2luWDogaGVscGVycy5kYXRhKHRoaXMuZWxlbWVudCwgJ29yaWdpbi14JyksXG4gICAgICBvcmlnaW5ZOiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAnb3JpZ2luLXknKSxcbiAgICAgIHBvaW50ZXJFdmVudHM6IGhlbHBlcnMuZGF0YSh0aGlzLmVsZW1lbnQsICdwb2ludGVyLWV2ZW50cycpLFxuICAgICAgcHJlY2lzaW9uOiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAncHJlY2lzaW9uJyksXG4gICAgICByZWxhdGl2ZUlucHV0OiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAncmVsYXRpdmUtaW5wdXQnKSxcbiAgICAgIGNsaXBSZWxhdGl2ZUlucHV0OiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAnY2xpcC1yZWxhdGl2ZS1pbnB1dCcpLFxuICAgICAgaG92ZXJPbmx5OiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAnaG92ZXItb25seScpLFxuICAgICAgaW5wdXRFbGVtZW50OiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGhlbHBlcnMuZGF0YSh0aGlzLmVsZW1lbnQsICdpbnB1dC1lbGVtZW50JykpLFxuICAgICAgc2VsZWN0b3I6IGhlbHBlcnMuZGF0YSh0aGlzLmVsZW1lbnQsICdzZWxlY3RvcicpXG4gICAgfVxuXG4gICAgZm9yIChsZXQga2V5IGluIGRhdGEpIHtcbiAgICAgIGlmIChkYXRhW2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgZGVsZXRlIGRhdGFba2V5XVxuICAgICAgfVxuICAgIH1cblxuICAgIG9iamVjdEFzc2lnbih0aGlzLCBERUZBVUxUUywgZGF0YSwgb3B0aW9ucylcblxuICAgIGlmKCF0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRcbiAgICB9XG5cbiAgICB0aGlzLmNhbGlicmF0aW9uVGltZXIgPSBudWxsXG4gICAgdGhpcy5jYWxpYnJhdGlvbkZsYWcgPSB0cnVlXG4gICAgdGhpcy5lbmFibGVkID0gZmFsc2VcbiAgICB0aGlzLmRlcHRoc1ggPSBbXVxuICAgIHRoaXMuZGVwdGhzWSA9IFtdXG4gICAgdGhpcy5yYWYgPSBudWxsXG5cbiAgICB0aGlzLmJvdW5kcyA9IG51bGxcbiAgICB0aGlzLmVsZW1lbnRQb3NpdGlvblggPSAwXG4gICAgdGhpcy5lbGVtZW50UG9zaXRpb25ZID0gMFxuICAgIHRoaXMuZWxlbWVudFdpZHRoID0gMFxuICAgIHRoaXMuZWxlbWVudEhlaWdodCA9IDBcblxuICAgIHRoaXMuZWxlbWVudENlbnRlclggPSAwXG4gICAgdGhpcy5lbGVtZW50Q2VudGVyWSA9IDBcblxuICAgIHRoaXMuZWxlbWVudFJhbmdlWCA9IDBcbiAgICB0aGlzLmVsZW1lbnRSYW5nZVkgPSAwXG5cbiAgICB0aGlzLmNhbGlicmF0aW9uWCA9IDBcbiAgICB0aGlzLmNhbGlicmF0aW9uWSA9IDBcblxuICAgIHRoaXMuaW5wdXRYID0gMFxuICAgIHRoaXMuaW5wdXRZID0gMFxuXG4gICAgdGhpcy5tb3Rpb25YID0gMFxuICAgIHRoaXMubW90aW9uWSA9IDBcblxuICAgIHRoaXMudmVsb2NpdHlYID0gMFxuICAgIHRoaXMudmVsb2NpdHlZID0gMFxuXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCh0aGlzKVxuICAgIHRoaXMub25EZXZpY2VPcmllbnRhdGlvbiA9IHRoaXMub25EZXZpY2VPcmllbnRhdGlvbi5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkRldmljZU1vdGlvbiA9IHRoaXMub25EZXZpY2VNb3Rpb24uYmluZCh0aGlzKVxuICAgIHRoaXMub25PcmllbnRhdGlvblRpbWVyID0gdGhpcy5vbk9yaWVudGF0aW9uVGltZXIuYmluZCh0aGlzKVxuICAgIHRoaXMub25Nb3Rpb25UaW1lciA9IHRoaXMub25Nb3Rpb25UaW1lci5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkNhbGlicmF0aW9uVGltZXIgPSB0aGlzLm9uQ2FsaWJyYXRpb25UaW1lci5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkFuaW1hdGlvbkZyYW1lID0gdGhpcy5vbkFuaW1hdGlvbkZyYW1lLmJpbmQodGhpcylcbiAgICB0aGlzLm9uV2luZG93UmVzaXplID0gdGhpcy5vbldpbmRvd1Jlc2l6ZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLndpbmRvd1dpZHRoID0gbnVsbFxuICAgIHRoaXMud2luZG93SGVpZ2h0ID0gbnVsbFxuICAgIHRoaXMud2luZG93Q2VudGVyWCA9IG51bGxcbiAgICB0aGlzLndpbmRvd0NlbnRlclkgPSBudWxsXG4gICAgdGhpcy53aW5kb3dSYWRpdXNYID0gbnVsbFxuICAgIHRoaXMud2luZG93UmFkaXVzWSA9IG51bGxcbiAgICB0aGlzLnBvcnRyYWl0ID0gZmFsc2VcbiAgICB0aGlzLmRlc2t0b3AgPSAhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvKGlQaG9uZXxpUG9kfGlQYWR8QW5kcm9pZHxCbGFja0JlcnJ5fEJCMTB8bW9iaXx0YWJsZXR8b3BlcmEgbWluaXxuZXh1cyA3KS9pKVxuICAgIHRoaXMubW90aW9uU3VwcG9ydCA9ICEhd2luZG93LkRldmljZU1vdGlvbkV2ZW50ICYmICF0aGlzLmRlc2t0b3BcbiAgICB0aGlzLm9yaWVudGF0aW9uU3VwcG9ydCA9ICEhd2luZG93LkRldmljZU9yaWVudGF0aW9uRXZlbnQgJiYgIXRoaXMuZGVza3RvcFxuICAgIHRoaXMub3JpZW50YXRpb25TdGF0dXMgPSAwXG4gICAgdGhpcy5tb3Rpb25TdGF0dXMgPSAwXG5cbiAgICB0aGlzLmluaXRpYWxpc2UoKVxuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgICBpZiAodGhpcy50cmFuc2Zvcm0yRFN1cHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy50cmFuc2Zvcm0yRFN1cHBvcnQgPSBoZWxwZXJzLnRyYW5zZm9ybVN1cHBvcnQoJzJEJylcbiAgICAgIHRoaXMudHJhbnNmb3JtM0RTdXBwb3J0ID0gaGVscGVycy50cmFuc2Zvcm1TdXBwb3J0KCczRCcpXG4gICAgfVxuXG4gICAgLy8gQ29uZmlndXJlIENvbnRleHQgU3R5bGVzXG4gICAgaWYgKHRoaXMudHJhbnNmb3JtM0RTdXBwb3J0KSB7XG4gICAgICBoZWxwZXJzLmFjY2VsZXJhdGUodGhpcy5lbGVtZW50KVxuICAgIH1cblxuICAgIGxldCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudClcbiAgICBpZiAoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncG9zaXRpb24nKSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSdcbiAgICB9XG5cbiAgICAvLyBQb2ludGVyIGV2ZW50c1xuICAgIGlmKCF0aGlzLnBvaW50ZXJFdmVudHMpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gU2V0dXBcbiAgICB0aGlzLnVwZGF0ZUxheWVycygpXG4gICAgdGhpcy51cGRhdGVEaW1lbnNpb25zKClcbiAgICB0aGlzLmVuYWJsZSgpXG4gICAgdGhpcy5xdWV1ZUNhbGlicmF0aW9uKHRoaXMuY2FsaWJyYXRpb25EZWxheSlcbiAgfVxuXG4gIGRvUmVhZHlDYWxsYmFjaygpIHtcbiAgICBpZih0aGlzLm9uUmVhZHkpIHtcbiAgICAgIHRoaXMub25SZWFkeSgpXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTGF5ZXJzKCkge1xuICAgIGlmKHRoaXMuc2VsZWN0b3IpIHtcbiAgICAgIHRoaXMubGF5ZXJzID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZWxlY3RvcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYXllcnMgPSB0aGlzLmVsZW1lbnQuY2hpbGRyZW5cbiAgICB9XG5cbiAgICBpZighdGhpcy5sYXllcnMubGVuZ3RoKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1BhcmFsbGF4SlM6IFlvdXIgc2NlbmUgZG9lcyBub3QgaGF2ZSBhbnkgbGF5ZXJzLicpXG4gICAgfVxuXG4gICAgdGhpcy5kZXB0aHNYID0gW11cbiAgICB0aGlzLmRlcHRoc1kgPSBbXVxuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGF5ZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgbGV0IGxheWVyID0gdGhpcy5sYXllcnNbaW5kZXhdXG5cbiAgICAgIGlmICh0aGlzLnRyYW5zZm9ybTNEU3VwcG9ydCkge1xuICAgICAgICBoZWxwZXJzLmFjY2VsZXJhdGUobGF5ZXIpXG4gICAgICB9XG5cbiAgICAgIGxheWVyLnN0eWxlLnBvc2l0aW9uID0gaW5kZXggPyAnYWJzb2x1dGUnIDogJ3JlbGF0aXZlJ1xuICAgICAgbGF5ZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgICAgIGxheWVyLnN0eWxlLmxlZnQgPSAwXG4gICAgICBsYXllci5zdHlsZS50b3AgPSAwXG5cbiAgICAgIGxldCBkZXB0aCA9IGhlbHBlcnMuZGF0YShsYXllciwgJ2RlcHRoJykgfHwgMFxuICAgICAgdGhpcy5kZXB0aHNYLnB1c2goaGVscGVycy5kYXRhKGxheWVyLCAnZGVwdGgteCcpIHx8IGRlcHRoKVxuICAgICAgdGhpcy5kZXB0aHNZLnB1c2goaGVscGVycy5kYXRhKGxheWVyLCAnZGVwdGgteScpIHx8IGRlcHRoKVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZURpbWVuc2lvbnMoKSB7XG4gICAgdGhpcy53aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgdGhpcy53aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICB0aGlzLndpbmRvd0NlbnRlclggPSB0aGlzLndpbmRvd1dpZHRoICogdGhpcy5vcmlnaW5YXG4gICAgdGhpcy53aW5kb3dDZW50ZXJZID0gdGhpcy53aW5kb3dIZWlnaHQgKiB0aGlzLm9yaWdpbllcbiAgICB0aGlzLndpbmRvd1JhZGl1c1ggPSBNYXRoLm1heCh0aGlzLndpbmRvd0NlbnRlclgsIHRoaXMud2luZG93V2lkdGggLSB0aGlzLndpbmRvd0NlbnRlclgpXG4gICAgdGhpcy53aW5kb3dSYWRpdXNZID0gTWF0aC5tYXgodGhpcy53aW5kb3dDZW50ZXJZLCB0aGlzLndpbmRvd0hlaWdodCAtIHRoaXMud2luZG93Q2VudGVyWSlcbiAgfVxuXG4gIHVwZGF0ZUJvdW5kcygpIHtcbiAgICB0aGlzLmJvdW5kcyA9IHRoaXMuaW5wdXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgdGhpcy5lbGVtZW50UG9zaXRpb25YID0gdGhpcy5ib3VuZHMubGVmdFxuICAgIHRoaXMuZWxlbWVudFBvc2l0aW9uWSA9IHRoaXMuYm91bmRzLnRvcFxuICAgIHRoaXMuZWxlbWVudFdpZHRoID0gdGhpcy5ib3VuZHMud2lkdGhcbiAgICB0aGlzLmVsZW1lbnRIZWlnaHQgPSB0aGlzLmJvdW5kcy5oZWlnaHRcbiAgICB0aGlzLmVsZW1lbnRDZW50ZXJYID0gdGhpcy5lbGVtZW50V2lkdGggKiB0aGlzLm9yaWdpblhcbiAgICB0aGlzLmVsZW1lbnRDZW50ZXJZID0gdGhpcy5lbGVtZW50SGVpZ2h0ICogdGhpcy5vcmlnaW5ZXG4gICAgdGhpcy5lbGVtZW50UmFuZ2VYID0gTWF0aC5tYXgodGhpcy5lbGVtZW50Q2VudGVyWCwgdGhpcy5lbGVtZW50V2lkdGggLSB0aGlzLmVsZW1lbnRDZW50ZXJYKVxuICAgIHRoaXMuZWxlbWVudFJhbmdlWSA9IE1hdGgubWF4KHRoaXMuZWxlbWVudENlbnRlclksIHRoaXMuZWxlbWVudEhlaWdodCAtIHRoaXMuZWxlbWVudENlbnRlclkpXG4gIH1cblxuICBxdWV1ZUNhbGlicmF0aW9uKGRlbGF5KSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2FsaWJyYXRpb25UaW1lcilcbiAgICB0aGlzLmNhbGlicmF0aW9uVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMub25DYWxpYnJhdGlvblRpbWVyLCBkZWxheSlcbiAgfVxuXG4gIGVuYWJsZSgpIHtcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxuXG4gICAgaWYgKHRoaXMub3JpZW50YXRpb25TdXBwb3J0KSB7XG4gICAgICB0aGlzLnBvcnRyYWl0ID0gZmFsc2VcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkZXZpY2VvcmllbnRhdGlvbicsIHRoaXMub25EZXZpY2VPcmllbnRhdGlvbilcbiAgICAgIHRoaXMuZGV0ZWN0aW9uVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMub25PcmllbnRhdGlvblRpbWVyLCB0aGlzLnN1cHBvcnREZWxheSlcbiAgICB9IGVsc2UgaWYgKHRoaXMubW90aW9uU3VwcG9ydCkge1xuICAgICAgdGhpcy5wb3J0cmFpdCA9IGZhbHNlXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZGV2aWNlbW90aW9uJywgdGhpcy5vbkRldmljZU1vdGlvbilcbiAgICAgIHRoaXMuZGV0ZWN0aW9uVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMub25Nb3Rpb25UaW1lciwgdGhpcy5zdXBwb3J0RGVsYXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FsaWJyYXRpb25YID0gMFxuICAgICAgdGhpcy5jYWxpYnJhdGlvblkgPSAwXG4gICAgICB0aGlzLnBvcnRyYWl0ID0gZmFsc2VcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlKVxuICAgICAgdGhpcy5kb1JlYWR5Q2FsbGJhY2soKVxuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uV2luZG93UmVzaXplKVxuICAgIHRoaXMucmFmID0gcnFBbkZyKHRoaXMub25BbmltYXRpb25GcmFtZSlcbiAgfVxuXG4gIGRpc2FibGUoKSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxuXG4gICAgaWYgKHRoaXMub3JpZW50YXRpb25TdXBwb3J0KSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGV2aWNlb3JpZW50YXRpb24nLCB0aGlzLm9uRGV2aWNlT3JpZW50YXRpb24pXG4gICAgfSBlbHNlIGlmICh0aGlzLm1vdGlvblN1cHBvcnQpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdkZXZpY2Vtb3Rpb24nLCB0aGlzLm9uRGV2aWNlTW90aW9uKVxuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSlcbiAgICB9XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5vbldpbmRvd1Jlc2l6ZSlcbiAgICBycUFuRnIuY2FuY2VsKHRoaXMucmFmKVxuICB9XG5cbiAgY2FsaWJyYXRlKHgsIHkpIHtcbiAgICB0aGlzLmNhbGlicmF0ZVggPSB4ID09PSB1bmRlZmluZWQgPyB0aGlzLmNhbGlicmF0ZVggOiB4XG4gICAgdGhpcy5jYWxpYnJhdGVZID0geSA9PT0gdW5kZWZpbmVkID8gdGhpcy5jYWxpYnJhdGVZIDogeVxuICB9XG5cbiAgaW52ZXJ0KHgsIHkpIHtcbiAgICB0aGlzLmludmVydFggPSB4ID09PSB1bmRlZmluZWQgPyB0aGlzLmludmVydFggOiB4XG4gICAgdGhpcy5pbnZlcnRZID0geSA9PT0gdW5kZWZpbmVkID8gdGhpcy5pbnZlcnRZIDogeVxuICB9XG5cbiAgZnJpY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuZnJpY3Rpb25YID0geCA9PT0gdW5kZWZpbmVkID8gdGhpcy5mcmljdGlvblggOiB4XG4gICAgdGhpcy5mcmljdGlvblkgPSB5ID09PSB1bmRlZmluZWQgPyB0aGlzLmZyaWN0aW9uWSA6IHlcbiAgfVxuXG4gIHNjYWxhcih4LCB5KSB7XG4gICAgdGhpcy5zY2FsYXJYID0geCA9PT0gdW5kZWZpbmVkID8gdGhpcy5zY2FsYXJYIDogeFxuICAgIHRoaXMuc2NhbGFyWSA9IHkgPT09IHVuZGVmaW5lZCA/IHRoaXMuc2NhbGFyWSA6IHlcbiAgfVxuXG4gIGxpbWl0KHgsIHkpIHtcbiAgICB0aGlzLmxpbWl0WCA9IHggPT09IHVuZGVmaW5lZCA/IHRoaXMubGltaXRYIDogeFxuICAgIHRoaXMubGltaXRZID0geSA9PT0gdW5kZWZpbmVkID8gdGhpcy5saW1pdFkgOiB5XG4gIH1cblxuICBvcmlnaW4oeCwgeSkge1xuICAgIHRoaXMub3JpZ2luWCA9IHggPT09IHVuZGVmaW5lZCA/IHRoaXMub3JpZ2luWCA6IHhcbiAgICB0aGlzLm9yaWdpblkgPSB5ID09PSB1bmRlZmluZWQgPyB0aGlzLm9yaWdpblkgOiB5XG4gIH1cblxuICBzZXRJbnB1dEVsZW1lbnQoZWxlbWVudCkge1xuICAgIHRoaXMuaW5wdXRFbGVtZW50ID0gZWxlbWVudFxuICAgIHRoaXMudXBkYXRlRGltZW5zaW9ucygpXG4gIH1cblxuICBzZXRQb3NpdGlvbihlbGVtZW50LCB4LCB5KSB7XG4gICAgeCA9IHgudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAncHgnXG4gICAgeSA9IHkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAncHgnXG4gICAgaWYgKHRoaXMudHJhbnNmb3JtM0RTdXBwb3J0KSB7XG4gICAgICBoZWxwZXJzLmNzcyhlbGVtZW50LCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZTNkKCcgKyB4ICsgJywnICsgeSArICcsMCknKVxuICAgIH0gZWxzZSBpZiAodGhpcy50cmFuc2Zvcm0yRFN1cHBvcnQpIHtcbiAgICAgIGhlbHBlcnMuY3NzKGVsZW1lbnQsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyB4ICsgJywnICsgeSArICcpJylcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0geFxuICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSB5XG4gICAgfVxuICB9XG5cbiAgb25PcmllbnRhdGlvblRpbWVyKCkge1xuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uU3VwcG9ydCAmJiB0aGlzLm9yaWVudGF0aW9uU3RhdHVzID09PSAwKSB7XG4gICAgICB0aGlzLmRpc2FibGUoKVxuICAgICAgdGhpcy5vcmllbnRhdGlvblN1cHBvcnQgPSBmYWxzZVxuICAgICAgdGhpcy5lbmFibGUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvUmVhZHlDYWxsYmFjaygpXG4gICAgfVxuICB9XG5cbiAgb25Nb3Rpb25UaW1lcigpIHtcbiAgICBpZiAodGhpcy5tb3Rpb25TdXBwb3J0ICYmIHRoaXMubW90aW9uU3RhdHVzID09PSAwKSB7XG4gICAgICB0aGlzLmRpc2FibGUoKVxuICAgICAgdGhpcy5tb3Rpb25TdXBwb3J0ID0gZmFsc2VcbiAgICAgIHRoaXMuZW5hYmxlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb1JlYWR5Q2FsbGJhY2soKVxuICAgIH1cbiAgfVxuXG4gIG9uQ2FsaWJyYXRpb25UaW1lcigpIHtcbiAgICB0aGlzLmNhbGlicmF0aW9uRmxhZyA9IHRydWVcbiAgfVxuXG4gIG9uV2luZG93UmVzaXplKCkge1xuICAgIHRoaXMudXBkYXRlRGltZW5zaW9ucygpXG4gIH1cblxuICBvbkFuaW1hdGlvbkZyYW1lKCkge1xuICAgIHRoaXMudXBkYXRlQm91bmRzKClcbiAgICBsZXQgY2FsaWJyYXRlZElucHV0WCA9IHRoaXMuaW5wdXRYIC0gdGhpcy5jYWxpYnJhdGlvblgsXG4gICAgICAgIGNhbGlicmF0ZWRJbnB1dFkgPSB0aGlzLmlucHV0WSAtIHRoaXMuY2FsaWJyYXRpb25ZXG4gICAgaWYgKChNYXRoLmFicyhjYWxpYnJhdGVkSW5wdXRYKSA+IHRoaXMuY2FsaWJyYXRpb25UaHJlc2hvbGQpIHx8IChNYXRoLmFicyhjYWxpYnJhdGVkSW5wdXRZKSA+IHRoaXMuY2FsaWJyYXRpb25UaHJlc2hvbGQpKSB7XG4gICAgICB0aGlzLnF1ZXVlQ2FsaWJyYXRpb24oMClcbiAgICB9XG4gICAgaWYgKHRoaXMucG9ydHJhaXQpIHtcbiAgICAgIHRoaXMubW90aW9uWCA9IHRoaXMuY2FsaWJyYXRlWCA/IGNhbGlicmF0ZWRJbnB1dFkgOiB0aGlzLmlucHV0WVxuICAgICAgdGhpcy5tb3Rpb25ZID0gdGhpcy5jYWxpYnJhdGVZID8gY2FsaWJyYXRlZElucHV0WCA6IHRoaXMuaW5wdXRYXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW90aW9uWCA9IHRoaXMuY2FsaWJyYXRlWCA/IGNhbGlicmF0ZWRJbnB1dFggOiB0aGlzLmlucHV0WFxuICAgICAgdGhpcy5tb3Rpb25ZID0gdGhpcy5jYWxpYnJhdGVZID8gY2FsaWJyYXRlZElucHV0WSA6IHRoaXMuaW5wdXRZXG4gICAgfVxuICAgIHRoaXMubW90aW9uWCAqPSB0aGlzLmVsZW1lbnRXaWR0aCAqICh0aGlzLnNjYWxhclggLyAxMDApXG4gICAgdGhpcy5tb3Rpb25ZICo9IHRoaXMuZWxlbWVudEhlaWdodCAqICh0aGlzLnNjYWxhclkgLyAxMDApXG4gICAgaWYgKCFpc05hTihwYXJzZUZsb2F0KHRoaXMubGltaXRYKSkpIHtcbiAgICAgIHRoaXMubW90aW9uWCA9IGhlbHBlcnMuY2xhbXAodGhpcy5tb3Rpb25YLCAtdGhpcy5saW1pdFgsIHRoaXMubGltaXRYKVxuICAgIH1cbiAgICBpZiAoIWlzTmFOKHBhcnNlRmxvYXQodGhpcy5saW1pdFkpKSkge1xuICAgICAgdGhpcy5tb3Rpb25ZID0gaGVscGVycy5jbGFtcCh0aGlzLm1vdGlvblksIC10aGlzLmxpbWl0WSwgdGhpcy5saW1pdFkpXG4gICAgfVxuICAgIHRoaXMudmVsb2NpdHlYICs9ICh0aGlzLm1vdGlvblggLSB0aGlzLnZlbG9jaXR5WCkgKiB0aGlzLmZyaWN0aW9uWFxuICAgIHRoaXMudmVsb2NpdHlZICs9ICh0aGlzLm1vdGlvblkgLSB0aGlzLnZlbG9jaXR5WSkgKiB0aGlzLmZyaWN0aW9uWVxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmxheWVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGxldCBsYXllciA9IHRoaXMubGF5ZXJzW2luZGV4XSxcbiAgICAgICAgICBkZXB0aFggPSB0aGlzLmRlcHRoc1hbaW5kZXhdLFxuICAgICAgICAgIGRlcHRoWSA9IHRoaXMuZGVwdGhzWVtpbmRleF0sXG4gICAgICAgICAgeE9mZnNldCA9IHRoaXMudmVsb2NpdHlYICogKGRlcHRoWCAqICh0aGlzLmludmVydFggPyAtMSA6IDEpKSxcbiAgICAgICAgICB5T2Zmc2V0ID0gdGhpcy52ZWxvY2l0eVkgKiAoZGVwdGhZICogKHRoaXMuaW52ZXJ0WSA/IC0xIDogMSkpXG4gICAgICB0aGlzLnNldFBvc2l0aW9uKGxheWVyLCB4T2Zmc2V0LCB5T2Zmc2V0KVxuICAgIH1cbiAgICB0aGlzLnJhZiA9IHJxQW5Gcih0aGlzLm9uQW5pbWF0aW9uRnJhbWUpXG4gIH1cblxuICByb3RhdGUoYmV0YSwgZ2FtbWEpe1xuICAgIC8vIEV4dHJhY3QgUm90YXRpb25cbiAgICBsZXQgeCA9IChiZXRhIHx8IDApIC8gTUFHSUNfTlVNQkVSLCAvLyAgLTkwIDo6IDkwXG4gICAgICAgIHkgPSAoZ2FtbWEgfHwgMCkgLyBNQUdJQ19OVU1CRVIgLy8gLTE4MCA6OiAxODBcblxuICAgIC8vIERldGVjdCBPcmllbnRhdGlvbiBDaGFuZ2VcbiAgICBsZXQgcG9ydHJhaXQgPSB0aGlzLndpbmRvd0hlaWdodCA+IHRoaXMud2luZG93V2lkdGhcbiAgICBpZiAodGhpcy5wb3J0cmFpdCAhPT0gcG9ydHJhaXQpIHtcbiAgICAgIHRoaXMucG9ydHJhaXQgPSBwb3J0cmFpdFxuICAgICAgdGhpcy5jYWxpYnJhdGlvbkZsYWcgPSB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FsaWJyYXRpb25GbGFnKSB7XG4gICAgICB0aGlzLmNhbGlicmF0aW9uRmxhZyA9IGZhbHNlXG4gICAgICB0aGlzLmNhbGlicmF0aW9uWCA9IHhcbiAgICAgIHRoaXMuY2FsaWJyYXRpb25ZID0geVxuICAgIH1cblxuICAgIHRoaXMuaW5wdXRYID0geFxuICAgIHRoaXMuaW5wdXRZID0geVxuICB9XG5cbiAgb25EZXZpY2VPcmllbnRhdGlvbihldmVudCkge1xuICAgIGxldCBiZXRhID0gZXZlbnQuYmV0YVxuICAgIGxldCBnYW1tYSA9IGV2ZW50LmdhbW1hXG4gICAgaWYgKGJldGEgIT09IG51bGwgJiYgZ2FtbWEgIT09IG51bGwpIHtcbiAgICAgIHRoaXMub3JpZW50YXRpb25TdGF0dXMgPSAxXG4gICAgICB0aGlzLnJvdGF0ZShiZXRhLCBnYW1tYSlcbiAgICB9XG4gIH1cblxuICBvbkRldmljZU1vdGlvbihldmVudCkge1xuICAgIGxldCBiZXRhID0gZXZlbnQucm90YXRpb25SYXRlLmJldGFcbiAgICBsZXQgZ2FtbWEgPSBldmVudC5yb3RhdGlvblJhdGUuZ2FtbWFcbiAgICBpZiAoYmV0YSAhPT0gbnVsbCAmJiBnYW1tYSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5tb3Rpb25TdGF0dXMgPSAxXG4gICAgICB0aGlzLnJvdGF0ZShiZXRhLCBnYW1tYSlcbiAgICB9XG4gIH1cblxuICBvbk1vdXNlTW92ZShldmVudCkge1xuICAgIGxldCBjbGllbnRYID0gZXZlbnQuY2xpZW50WCxcbiAgICAgICAgY2xpZW50WSA9IGV2ZW50LmNsaWVudFlcblxuICAgIC8vIHJlc2V0IGlucHV0IHRvIGNlbnRlciBpZiBob3Zlck9ubHkgaXMgc2V0IGFuZCB3ZSdyZSBub3QgaG92ZXJpbmcgdGhlIGVsZW1lbnRcbiAgICBpZih0aGlzLmhvdmVyT25seSAmJlxuICAgICAgKChjbGllbnRYIDwgdGhpcy5lbGVtZW50UG9zaXRpb25YIHx8IGNsaWVudFggPiB0aGlzLmVsZW1lbnRQb3NpdGlvblggKyB0aGlzLmVsZW1lbnRXaWR0aCkgfHxcbiAgICAgIChjbGllbnRZIDwgdGhpcy5lbGVtZW50UG9zaXRpb25ZIHx8IGNsaWVudFkgPiB0aGlzLmVsZW1lbnRQb3NpdGlvblkgKyB0aGlzLmVsZW1lbnRIZWlnaHQpKSkge1xuICAgICAgICB0aGlzLmlucHV0WCA9IDBcbiAgICAgICAgdGhpcy5pbnB1dFkgPSAwXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgaWYgKHRoaXMucmVsYXRpdmVJbnB1dCkge1xuICAgICAgLy8gQ2xpcCBtb3VzZSBjb29yZGluYXRlcyBpbnNpZGUgZWxlbWVudCBib3VuZHMuXG4gICAgICBpZiAodGhpcy5jbGlwUmVsYXRpdmVJbnB1dCkge1xuICAgICAgICBjbGllbnRYID0gTWF0aC5tYXgoY2xpZW50WCwgdGhpcy5lbGVtZW50UG9zaXRpb25YKVxuICAgICAgICBjbGllbnRYID0gTWF0aC5taW4oY2xpZW50WCwgdGhpcy5lbGVtZW50UG9zaXRpb25YICsgdGhpcy5lbGVtZW50V2lkdGgpXG4gICAgICAgIGNsaWVudFkgPSBNYXRoLm1heChjbGllbnRZLCB0aGlzLmVsZW1lbnRQb3NpdGlvblkpXG4gICAgICAgIGNsaWVudFkgPSBNYXRoLm1pbihjbGllbnRZLCB0aGlzLmVsZW1lbnRQb3NpdGlvblkgKyB0aGlzLmVsZW1lbnRIZWlnaHQpXG4gICAgICB9XG4gICAgICAvLyBDYWxjdWxhdGUgaW5wdXQgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQuXG4gICAgICBpZih0aGlzLmVsZW1lbnRSYW5nZVggJiYgdGhpcy5lbGVtZW50UmFuZ2VZKSB7XG4gICAgICAgIHRoaXMuaW5wdXRYID0gKGNsaWVudFggLSB0aGlzLmVsZW1lbnRQb3NpdGlvblggLSB0aGlzLmVsZW1lbnRDZW50ZXJYKSAvIHRoaXMuZWxlbWVudFJhbmdlWFxuICAgICAgICB0aGlzLmlucHV0WSA9IChjbGllbnRZIC0gdGhpcy5lbGVtZW50UG9zaXRpb25ZIC0gdGhpcy5lbGVtZW50Q2VudGVyWSkgLyB0aGlzLmVsZW1lbnRSYW5nZVlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2FsY3VsYXRlIGlucHV0IHJlbGF0aXZlIHRvIHRoZSB3aW5kb3cuXG4gICAgICBpZih0aGlzLndpbmRvd1JhZGl1c1ggJiYgdGhpcy53aW5kb3dSYWRpdXNZKSB7XG4gICAgICAgIHRoaXMuaW5wdXRYID0gKGNsaWVudFggLSB0aGlzLndpbmRvd0NlbnRlclgpIC8gdGhpcy53aW5kb3dSYWRpdXNYXG4gICAgICAgIHRoaXMuaW5wdXRZID0gKGNsaWVudFkgLSB0aGlzLndpbmRvd0NlbnRlclkpIC8gdGhpcy53aW5kb3dSYWRpdXNZXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmRpc2FibGUoKVxuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2FsaWJyYXRpb25UaW1lcilcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kZXRlY3Rpb25UaW1lcilcblxuICAgIHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJylcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5sYXllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxheWVyc1tpbmRleF0ucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpXG4gICAgfVxuXG4gICAgZGVsZXRlIHRoaXMuZWxlbWVudFxuICAgIGRlbGV0ZSB0aGlzLmxheWVyc1xuICB9XG5cbiAgdmVyc2lvbigpIHtcbiAgICByZXR1cm4gJzMuMS4wJ1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQYXJhbGxheFxuIl19
6900
6901
6902/***/ }),
6903
vendor: 2,227 bytes, lines 6904-6940
6904/***/ "./node_modules/scrollmonitor/dist/module/index.js":
6905/*!*********************************************************!*\
6906  !*** ./node_modules/scrollmonitor/dist/module/index.js ***!
6907  \*********************************************************/
6908/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6909
6910"use strict";
6911__webpack_require__.r(__webpack_exports__);
6912/* harmony export */ __webpack_require__.d(__webpack_exports__, {
6913/* harmony export */   "ScrollMonitorContainer": () => (/* reexport safe */ _src_container_js__WEBPACK_IMPORTED_MODULE_0__.ScrollMonitorContainer),
6914/* harmony export */   "Watcher": () => (/* reexport safe */ _src_watcher_js__WEBPACK_IMPORTED_MODULE_1__.Watcher),
6915/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
6916/* harmony export */ });
6917/* harmony import */ var _src_container_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/container.js */ "./node_modules/scrollmonitor/dist/module/src/container.js");
6918/* harmony import */ var _src_watcher_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./src/watcher.js */ "./node_modules/scrollmonitor/dist/module/src/watcher.js");
6919/* harmony import */ var _src_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./src/types */ "./node_modules/scrollmonitor/dist/module/src/types.js");
6920/* harmony import */ var _src_constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./src/constants.js */ "./node_modules/scrollmonitor/dist/module/src/constants.js");
6921
6922
6923
6924
6925
6926// this is needed for the type, but if we're not in a browser the only
6927// way listenToDOM will be called is if you call scrollmonitor.createContainer
6928// and you can't do that until you have a DOM element.
6929var scrollMonitor = new _src_container_js__WEBPACK_IMPORTED_MODULE_0__.ScrollMonitorContainer(_src_constants_js__WEBPACK_IMPORTED_MODULE_3__.isInBrowser ? document.body : undefined);
6930if (_src_constants_js__WEBPACK_IMPORTED_MODULE_3__.isInBrowser) {
6931    scrollMonitor.updateState();
6932    scrollMonitor.listenToDOM();
6933    //@ts-ignore
6934    window.scrollMonitor = scrollMonitor;
6935}
6936/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (scrollMonitor);
6937//# sourceMappingURL=index.js.map
6938
6939/***/ }),
6940
vendor: 1,998 bytes, lines 6941-6984
6941/***/ "./node_modules/scrollmonitor/dist/module/src/constants.js":
6942/*!*****************************************************************!*\
6943  !*** ./node_modules/scrollmonitor/dist/module/src/constants.js ***!
6944  \*****************************************************************/
6945/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6946
6947"use strict";
6948__webpack_require__.r(__webpack_exports__);
6949/* harmony export */ __webpack_require__.d(__webpack_exports__, {
6950/* harmony export */   "ENTERVIEWPORT": () => (/* binding */ ENTERVIEWPORT),
6951/* harmony export */   "EXITVIEWPORT": () => (/* binding */ EXITVIEWPORT),
6952/* harmony export */   "FULLYENTERVIEWPORT": () => (/* binding */ FULLYENTERVIEWPORT),
6953/* harmony export */   "LOCATIONCHANGE": () => (/* binding */ LOCATIONCHANGE),
6954/* harmony export */   "PARTIALLYEXITVIEWPORT": () => (/* binding */ PARTIALLYEXITVIEWPORT),
6955/* harmony export */   "STATECHANGE": () => (/* binding */ STATECHANGE),
6956/* harmony export */   "VISIBILITYCHANGE": () => (/* binding */ VISIBILITYCHANGE),
6957/* harmony export */   "defaultOffsets": () => (/* binding */ defaultOffsets),
6958/* harmony export */   "eventTypes": () => (/* binding */ eventTypes),
6959/* harmony export */   "isInBrowser": () => (/* binding */ isInBrowser),
6960/* harmony export */   "isOnServer": () => (/* binding */ isOnServer)
6961/* harmony export */ });
6962var VISIBILITYCHANGE = 'visibilityChange';
6963var ENTERVIEWPORT = 'enterViewport';
6964var FULLYENTERVIEWPORT = 'fullyEnterViewport';
6965var EXITVIEWPORT = 'exitViewport';
6966var PARTIALLYEXITVIEWPORT = 'partiallyExitViewport';
6967var LOCATIONCHANGE = 'locationChange';
6968var STATECHANGE = 'stateChange';
6969var eventTypes = [
6970    VISIBILITYCHANGE,
6971    ENTERVIEWPORT,
6972    FULLYENTERVIEWPORT,
6973    EXITVIEWPORT,
6974    PARTIALLYEXITVIEWPORT,
6975    LOCATIONCHANGE,
6976    STATECHANGE,
6977];
6978var isOnServer = typeof window === 'undefined';
6979var isInBrowser = !isOnServer;
6980var defaultOffsets = { top: 0, bottom: 0 };
6981//# sourceMappingURL=constants.js.map
6982
6983/***/ }),
6984
vendor: 8,339 bytes, lines 6985-7200
6985/***/ "./node_modules/scrollmonitor/dist/module/src/container.js":
6986/*!*****************************************************************!*\
6987  !*** ./node_modules/scrollmonitor/dist/module/src/container.js ***!
6988  \*****************************************************************/
6989/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6990
6991"use strict";
6992__webpack_require__.r(__webpack_exports__);
6993/* harmony export */ __webpack_require__.d(__webpack_exports__, {
6994/* harmony export */   "ScrollMonitorContainer": () => (/* binding */ ScrollMonitorContainer)
6995/* harmony export */ });
6996/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.js */ "./node_modules/scrollmonitor/dist/module/src/constants.js");
6997/* harmony import */ var _watcher_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./watcher.js */ "./node_modules/scrollmonitor/dist/module/src/watcher.js");
6998
6999
7000function getViewportHeight(element) {
7001    if (_constants_js__WEBPACK_IMPORTED_MODULE_0__.isOnServer) {
7002        return 0;
7003    }
7004    if (element === document.body) {
7005        return window.innerHeight || document.documentElement.clientHeight;
7006    }
7007    else {
7008        return element.clientHeight;
7009    }
7010}
7011function getContentHeight(element) {
7012    if (_constants_js__WEBPACK_IMPORTED_MODULE_0__.isOnServer) {
7013        return 0;
7014    }
7015    if (element === document.body) {
7016        // jQuery approach
7017        // whichever is greatest
7018        return Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.documentElement.clientHeight);
7019    }
7020    else {
7021        return element.scrollHeight;
7022    }
7023}
7024function scrollTop(element) {
7025    if (_constants_js__WEBPACK_IMPORTED_MODULE_0__.isOnServer) {
7026        return 0;
7027    }
7028    if (element === document.body) {
7029        return (window.pageYOffset ||
7030            (document.documentElement && document.documentElement.scrollTop) ||
7031            document.body.scrollTop);
7032    }
7033    else {
7034        return element.scrollTop;
7035    }
7036}
7037var browserSupportsPassive = false;
7038if (_constants_js__WEBPACK_IMPORTED_MODULE_0__.isInBrowser) {
7039    try {
7040        var opts = Object.defineProperty({}, 'passive', {
7041            get: function () {
7042                browserSupportsPassive = true;
7043            },
7044        });
7045        window.addEventListener('test', null, opts);
7046    }
7047    catch (e) { }
7048}
7049var useCapture = browserSupportsPassive ? { capture: false, passive: true } : false;
7050var ScrollMonitorContainer = /** @class */ (function () {
7051    function ScrollMonitorContainer(item, parentWatcher) {
7052        this.eventTypes = _constants_js__WEBPACK_IMPORTED_MODULE_0__.eventTypes;
7053        var self = this;
7054        this.item = item;
7055        this.watchers = [];
7056        this.viewportTop = null;
7057        this.viewportBottom = null;
7058        this.documentHeight = getContentHeight(item);
7059        this.viewportHeight = getViewportHeight(item);
7060        this.DOMListener = function () {
7061            ScrollMonitorContainer.prototype.DOMListener.apply(self, arguments);
7062        };
7063        if (parentWatcher) {
7064            this.containerWatcher = parentWatcher.create(item);
7065        }
7066        var previousDocumentHeight;
7067        var calculateViewportI;
7068        function calculateViewport() {
7069            self.viewportTop = scrollTop(item);
7070            self.viewportBottom = self.viewportTop + self.viewportHeight;
7071            self.documentHeight = getContentHeight(item);
7072            if (self.documentHeight !== previousDocumentHeight) {
7073                calculateViewportI = self.watchers.length;
7074                while (calculateViewportI--) {
7075                    self.watchers[calculateViewportI].recalculateLocation();
7076                }
7077                previousDocumentHeight = self.documentHeight;
7078            }
7079        }
7080        var updateAndTriggerWatchersI;
7081        function updateAndTriggerWatchers() {
7082            // update all watchers then trigger the events so one can rely on another being up to date.
7083            updateAndTriggerWatchersI = self.watchers.length;
7084            while (updateAndTriggerWatchersI--) {
7085                self.watchers[updateAndTriggerWatchersI].update();
7086            }
7087            updateAndTriggerWatchersI = self.watchers.length;
7088            while (updateAndTriggerWatchersI--) {
7089                self.watchers[updateAndTriggerWatchersI].triggerCallbacks(undefined);
7090            }
7091        }
7092        this.update = function () {
7093            calculateViewport();
7094            updateAndTriggerWatchers();
7095        };
7096        this.recalculateLocations = function () {
7097            this.documentHeight = 0;
7098            this.update();
7099        };
7100    }
7101    ScrollMonitorContainer.prototype.listenToDOM = function () {
7102        if (_constants_js__WEBPACK_IMPORTED_MODULE_0__.isInBrowser) {
7103            if (this.item === document.body) {
7104                window.addEventListener('scroll', this.DOMListener, useCapture);
7105            }
7106            else {
7107                this.item.addEventListener('scroll', this.DOMListener, useCapture);
7108            }
7109            window.addEventListener('resize', this.DOMListener);
7110            this.destroy = function () {
7111                if (this.item === document.body) {
7112                    window.removeEventListener('scroll', this.DOMListener, useCapture);
7113                    this.containerWatcher.destroy();
7114                }
7115                else {
7116                    this.item.removeEventListener('scroll', this.DOMListener, useCapture);
7117                }
7118                window.removeEventListener('resize', this.DOMListener);
7119            };
7120        }
7121    };
7122    ScrollMonitorContainer.prototype.destroy = function () {
7123        // noop, override for your own purposes.
7124        // in listenToDOM, for example.
7125    };
7126    ScrollMonitorContainer.prototype.DOMListener = function (event) {
7127        //alert('got scroll');
7128        this.updateState();
7129        this.updateAndTriggerWatchers(event);
7130    };
7131    ScrollMonitorContainer.prototype.updateState = function () {
7132        var viewportTop = scrollTop(this.item);
7133        var viewportHeight = getViewportHeight(this.item);
7134        var contentHeight = getContentHeight(this.item);
7135        var needsRecalcuate = viewportHeight !== this.viewportHeight || contentHeight !== this.contentHeight;
7136        this.viewportTop = viewportTop;
7137        this.viewportHeight = viewportHeight;
7138        this.viewportBottom = viewportTop + viewportHeight;
7139        this.contentHeight = contentHeight;
7140        if (needsRecalcuate) {
7141            var i = this.watchers.length;
7142            while (i--) {
7143                this.watchers[i].recalculateLocation();
7144            }
7145        }
7146    };
7147    ScrollMonitorContainer.prototype.updateAndTriggerWatchers = function (event) {
7148        var i = this.watchers.length;
7149        while (i--) {
7150            this.watchers[i].update();
7151        }
7152        i = this.watchers.length;
7153        while (i--) {
7154            this.watchers[i].triggerCallbacks(event);
7155        }
7156    };
7157    ScrollMonitorContainer.prototype.createContainer = function (input) {
7158        var item;
7159        if (typeof input === 'string') {
7160            item = document.querySelector(input);
7161        }
7162        else if (Array.isArray(input) || input instanceof NodeList) {
7163            item = input[0];
7164        }
7165        else {
7166            item = input;
7167        }
7168        var container = new ScrollMonitorContainer(item, this);
7169        this.updateState();
7170        container.listenToDOM();
7171        return container;
7172    };
7173    ScrollMonitorContainer.prototype.create = function (input, offsets) {
7174        var item;
7175        if (typeof item === 'string') {
7176            item = document.querySelector(item);
7177        }
7178        else if (Array.isArray(input) || input instanceof NodeList) {
7179            item = input[0];
7180        }
7181        else {
7182            item = input;
7183        }
7184        var watcher = new _watcher_js__WEBPACK_IMPORTED_MODULE_1__.Watcher(this, item, offsets);
7185        this.watchers.push(watcher);
7186        return watcher;
7187    };
7188    /**
7189     * @deprecated since version 1.1
7190     */
7191    ScrollMonitorContainer.prototype.beget = function (input, offsets) {
7192        return this.create(input, offsets);
7193    };
7194    return ScrollMonitorContainer;
7195}());
7196
7197//# sourceMappingURL=container.js.map
7198
7199/***/ }),
7200
vendor: 449 bytes, lines 7201-7213
7201/***/ "./node_modules/scrollmonitor/dist/module/src/types.js":
7202/*!*************************************************************!*\
7203  !*** ./node_modules/scrollmonitor/dist/module/src/types.js ***!
7204  \*************************************************************/
7205/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
7206
7207"use strict";
7208__webpack_require__.r(__webpack_exports__);
7209
7210//# sourceMappingURL=types.js.map
7211
7212/***/ }),
7213
vendor: 11,342 bytes, lines 7214-7452
7214/***/ "./node_modules/scrollmonitor/dist/module/src/watcher.js":
7215/*!***************************************************************!*\
7216  !*** ./node_modules/scrollmonitor/dist/module/src/watcher.js ***!
7217  \***************************************************************/
7218/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
7219
7220"use strict";
7221__webpack_require__.r(__webpack_exports__);
7222/* harmony export */ __webpack_require__.d(__webpack_exports__, {
7223/* harmony export */   "Watcher": () => (/* binding */ Watcher)
7224/* harmony export */ });
7225/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.js */ "./node_modules/scrollmonitor/dist/module/src/constants.js");
7226
7227var Watcher = /** @class */ (function () {
7228    function Watcher(container, watchItem, offsets) {
7229        this.container = container;
7230        this.watchItem = watchItem;
7231        this.locked = false;
7232        this.callbacks = {};
7233        var self = this;
7234        if (!offsets) {
7235            this.offsets = _constants_js__WEBPACK_IMPORTED_MODULE_0__.defaultOffsets;
7236        }
7237        else if (typeof offsets === 'number') {
7238            this.offsets = { top: offsets, bottom: offsets };
7239        }
7240        else {
7241            this.offsets = {
7242                top: 'top' in offsets ? offsets.top : _constants_js__WEBPACK_IMPORTED_MODULE_0__.defaultOffsets.top,
7243                bottom: 'bottom' in offsets ? offsets.bottom : _constants_js__WEBPACK_IMPORTED_MODULE_0__.defaultOffsets.bottom,
7244            };
7245        }
7246        for (var i = 0, j = _constants_js__WEBPACK_IMPORTED_MODULE_0__.eventTypes.length; i < j; i++) {
7247            self.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.eventTypes[i]] = [];
7248        }
7249        this.locked = false;
7250        var wasInViewport;
7251        var wasFullyInViewport;
7252        var wasAboveViewport;
7253        var wasBelowViewport;
7254        var listenerToTriggerListI;
7255        var listener;
7256        var needToTriggerStateChange = false;
7257        function triggerCallbackArray(listeners, event) {
7258            needToTriggerStateChange = true;
7259            if (listeners.length === 0) {
7260                return;
7261            }
7262            listenerToTriggerListI = listeners.length;
7263            while (listenerToTriggerListI--) {
7264                listener = listeners[listenerToTriggerListI];
7265                listener.callback.call(self, event, self);
7266                if (listener.isOne) {
7267                    listeners.splice(listenerToTriggerListI, 1);
7268                }
7269            }
7270        }
7271        this.triggerCallbacks = function triggerCallbacks(event) {
7272            if (this.isInViewport && !wasInViewport) {
7273                triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.ENTERVIEWPORT], event);
7274            }
7275            if (this.isFullyInViewport && !wasFullyInViewport) {
7276                triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.FULLYENTERVIEWPORT], event);
7277            }
7278            if (this.isAboveViewport !== wasAboveViewport &&
7279                this.isBelowViewport !== wasBelowViewport) {
7280                triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.VISIBILITYCHANGE], event);
7281                // if you skip completely past this element
7282                if (!wasFullyInViewport && !this.isFullyInViewport) {
7283                    triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.FULLYENTERVIEWPORT], event);
7284                    triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.PARTIALLYEXITVIEWPORT], event);
7285                }
7286                if (!wasInViewport && !this.isInViewport) {
7287                    triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.ENTERVIEWPORT], event);
7288                    triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.EXITVIEWPORT], event);
7289                }
7290            }
7291            if (!this.isFullyInViewport && wasFullyInViewport) {
7292                triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.PARTIALLYEXITVIEWPORT], event);
7293            }
7294            if (!this.isInViewport && wasInViewport) {
7295                triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.EXITVIEWPORT], event);
7296            }
7297            if (this.isInViewport !== wasInViewport) {
7298                triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.VISIBILITYCHANGE], event);
7299            }
7300            if (needToTriggerStateChange) {
7301                needToTriggerStateChange = false;
7302                triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.STATECHANGE], event);
7303            }
7304            wasInViewport = this.isInViewport;
7305            wasFullyInViewport = this.isFullyInViewport;
7306            wasAboveViewport = this.isAboveViewport;
7307            wasBelowViewport = this.isBelowViewport;
7308        };
7309        this.recalculateLocation = function () {
7310            if (this.locked) {
7311                return;
7312            }
7313            var previousTop = this.top;
7314            var previousBottom = this.bottom;
7315            if (this.watchItem.nodeName) {
7316                // a dom element
7317                var cachedDisplay = this.watchItem.style.display;
7318                if (cachedDisplay === 'none') {
7319                    this.watchItem.style.display = '';
7320                }
7321                var containerOffset = 0;
7322                var container = this.container;
7323                while (container.containerWatcher) {
7324                    containerOffset +=
7325                        container.containerWatcher.top -
7326                            container.containerWatcher.container.viewportTop;
7327                    container = container.containerWatcher.container;
7328                }
7329                var boundingRect = this.watchItem.getBoundingClientRect();
7330                this.top = boundingRect.top + this.container.viewportTop - containerOffset;
7331                this.bottom = boundingRect.bottom + this.container.viewportTop - containerOffset;
7332                if (cachedDisplay === 'none') {
7333                    this.watchItem.style.display = cachedDisplay;
7334                }
7335            }
7336            else if (this.watchItem === +this.watchItem) {
7337                // number
7338                if (this.watchItem > 0) {
7339                    this.top = this.bottom = this.watchItem;
7340                }
7341                else {
7342                    this.top = this.bottom = this.container.documentHeight - this.watchItem;
7343                }
7344            }
7345            else {
7346                // an object with a top and bottom property
7347                this.top = this.watchItem.top;
7348                this.bottom = this.watchItem.bottom;
7349            }
7350            this.top -= this.offsets.top;
7351            this.bottom += this.offsets.bottom;
7352            this.height = this.bottom - this.top;
7353            if ((previousTop !== undefined || previousBottom !== undefined) &&
7354                (this.top !== previousTop || this.bottom !== previousBottom)) {
7355                triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.LOCATIONCHANGE], undefined);
7356            }
7357        };
7358        this.recalculateLocation();
7359        this.update();
7360        wasInViewport = this.isInViewport;
7361        wasFullyInViewport = this.isFullyInViewport;
7362        wasAboveViewport = this.isAboveViewport;
7363        wasBelowViewport = this.isBelowViewport;
7364    }
7365    Watcher.prototype.on = function (event, callback, isOne) {
7366        if (isOne === void 0) { isOne = false; }
7367        // trigger the event if it applies to the element right now.
7368        switch (true) {
7369            case event === _constants_js__WEBPACK_IMPORTED_MODULE_0__.VISIBILITYCHANGE && !this.isInViewport && this.isAboveViewport:
7370            case event === _constants_js__WEBPACK_IMPORTED_MODULE_0__.ENTERVIEWPORT && this.isInViewport:
7371            case event === _constants_js__WEBPACK_IMPORTED_MODULE_0__.FULLYENTERVIEWPORT && this.isFullyInViewport:
7372            case event === _constants_js__WEBPACK_IMPORTED_MODULE_0__.EXITVIEWPORT && this.isAboveViewport && !this.isInViewport:
7373            case event === _constants_js__WEBPACK_IMPORTED_MODULE_0__.PARTIALLYEXITVIEWPORT && this.isInViewport && this.isAboveViewport:
7374                callback.call(this, this);
7375                if (isOne) {
7376                    return;
7377                }
7378        }
7379        if (this.callbacks[event]) {
7380            this.callbacks[event].push({ callback: callback, isOne: isOne });
7381        }
7382        else {
7383            throw new Error('Tried to add a scroll monitor listener of type ' +
7384                event +
7385                '. Your options are: ' +
7386                _constants_js__WEBPACK_IMPORTED_MODULE_0__.eventTypes.join(', '));
7387        }
7388    };
7389    Watcher.prototype.off = function (event, callback) {
7390        if (this.callbacks[event]) {
7391            for (var i = 0, item; (item = this.callbacks[event][i]); i++) {
7392                if (item.callback === callback) {
7393                    this.callbacks[event].splice(i, 1);
7394                    break;
7395                }
7396            }
7397        }
7398        else {
7399            throw new Error('Tried to remove a scroll monitor listener of type ' +
7400                event +
7401                '. Your options are: ' +
7402                _constants_js__WEBPACK_IMPORTED_MODULE_0__.eventTypes.join(', '));
7403        }
7404    };
7405    Watcher.prototype.one = function (event, callback) {
7406        this.on(event, callback, true);
7407    };
7408    Watcher.prototype.recalculateSize = function () {
7409        if (this.watchItem instanceof HTMLElement) {
7410            this.height = this.watchItem.offsetHeight + this.offsets.top + this.offsets.bottom;
7411            this.bottom = this.top + this.height;
7412        }
7413    };
7414    Watcher.prototype.update = function () {
7415        this.isAboveViewport = this.top < this.container.viewportTop;
7416        this.isBelowViewport = this.bottom > this.container.viewportBottom;
7417        this.isInViewport =
7418            this.top < this.container.viewportBottom && this.bottom > this.container.viewportTop;
7419        this.isFullyInViewport =
7420            (this.top >= this.container.viewportTop &&
7421                this.bottom <= this.container.viewportBottom) ||
7422                (this.isAboveViewport && this.isBelowViewport);
7423    };
7424    Watcher.prototype.destroy = function () {
7425        var index = this.container.watchers.indexOf(this), self = this;
7426        this.container.watchers.splice(index, 1);
7427        self.callbacks = {};
7428    };
7429    // prevent recalculating the element location
7430    Watcher.prototype.lock = function () {
7431        this.locked = true;
7432    };
7433    Watcher.prototype.unlock = function () {
7434        this.locked = false;
7435    };
7436    return Watcher;
7437}());
7438
7439var eventHandlerFactory = function (type) {
7440    return function (callback, isOne) {
7441        if (isOne === void 0) { isOne = false; }
7442        this.on.call(this, type, callback, isOne);
7443    };
7444};
7445for (var i = 0, j = _constants_js__WEBPACK_IMPORTED_MODULE_0__.eventTypes.length; i < j; i++) {
7446    var type = _constants_js__WEBPACK_IMPORTED_MODULE_0__.eventTypes[i];
7447    Watcher.prototype[type] = eventHandlerFactory(type);
7448}
7449//# sourceMappingURL=watcher.js.map
7450
7451/***/ }),
7452
vendor: 6,133 bytes, lines 7453-7612
7453/***/ "./node_modules/throttle-debounce/index.umd.js":
7454/*!*****************************************************!*\
7455  !*** ./node_modules/throttle-debounce/index.umd.js ***!
7456  \*****************************************************/
7457/***/ (function(__unused_webpack_module, exports) {
7458
7459(function (global, factory) {
7460	 true ? factory(exports) :
7461	0;
7462}(this, (function (exports) { 'use strict';
7463
7464	/* eslint-disable no-undefined,no-param-reassign,no-shadow */
7465
7466	/**
7467	 * Throttle execution of a function. Especially useful for rate limiting
7468	 * execution of handlers on events like resize and scroll.
7469	 *
7470	 * @param  {number}    delay -          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.
7471	 * @param  {boolean}   [noTrailing] -   Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the
7472	 *                                    throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time
7473	 *                                    after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,
7474	 *                                    the internal counter is reset).
7475	 * @param  {Function}  callback -       A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,
7476	 *                                    to `callback` when the throttled-function is executed.
7477	 * @param  {boolean}   [debounceMode] - If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),
7478	 *                                    schedule `callback` to execute after `delay` ms.
7479	 *
7480	 * @returns {Function}  A new, throttled, function.
7481	 */
7482	function throttle (delay, noTrailing, callback, debounceMode) {
7483	  /*
7484	   * After wrapper has stopped being called, this timeout ensures that
7485	   * `callback` is executed at the proper times in `throttle` and `end`
7486	   * debounce modes.
7487	   */
7488	  var timeoutID;
7489	  var cancelled = false; // Keep track of the last time `callback` was executed.
7490
7491	  var lastExec = 0; // Function to clear existing timeout
7492
7493	  function clearExistingTimeout() {
7494	    if (timeoutID) {
7495	      clearTimeout(timeoutID);
7496	    }
7497	  } // Function to cancel next exec
7498
7499
7500	  function cancel() {
7501	    clearExistingTimeout();
7502	    cancelled = true;
7503	  } // `noTrailing` defaults to falsy.
7504
7505
7506	  if (typeof noTrailing !== 'boolean') {
7507	    debounceMode = callback;
7508	    callback = noTrailing;
7509	    noTrailing = undefined;
7510	  }
7511	  /*
7512	   * The `wrapper` function encapsulates all of the throttling / debouncing
7513	   * functionality and when executed will limit the rate at which `callback`
7514	   * is executed.
7515	   */
7516
7517
7518	  function wrapper() {
7519	    for (var _len = arguments.length, arguments_ = new Array(_len), _key = 0; _key < _len; _key++) {
7520	      arguments_[_key] = arguments[_key];
7521	    }
7522
7523	    var self = this;
7524	    var elapsed = Date.now() - lastExec;
7525
7526	    if (cancelled) {
7527	      return;
7528	    } // Execute `callback` and update the `lastExec` timestamp.
7529
7530
7531	    function exec() {
7532	      lastExec = Date.now();
7533	      callback.apply(self, arguments_);
7534	    }
7535	    /*
7536	     * If `debounceMode` is true (at begin) this is used to clear the flag
7537	     * to allow future `callback` executions.
7538	     */
7539
7540
7541	    function clear() {
7542	      timeoutID = undefined;
7543	    }
7544
7545	    if (debounceMode && !timeoutID) {
7546	      /*
7547	       * Since `wrapper` is being called for the first time and
7548	       * `debounceMode` is true (at begin), execute `callback`.
7549	       */
7550	      exec();
7551	    }
7552
7553	    clearExistingTimeout();
7554
7555	    if (debounceMode === undefined && elapsed > delay) {
7556	      /*
7557	       * In throttle mode, if `delay` time has been exceeded, execute
7558	       * `callback`.
7559	       */
7560	      exec();
7561	    } else if (noTrailing !== true) {
7562	      /*
7563	       * In trailing throttle mode, since `delay` time has not been
7564	       * exceeded, schedule `callback` to execute `delay` ms after most
7565	       * recent execution.
7566	       *
7567	       * If `debounceMode` is true (at begin), schedule `clear` to execute
7568	       * after `delay` ms.
7569	       *
7570	       * If `debounceMode` is false (at end), schedule `callback` to
7571	       * execute after `delay` ms.
7572	       */
7573	      timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);
7574	    }
7575	  }
7576
7577	  wrapper.cancel = cancel; // Return the wrapper function.
7578
7579	  return wrapper;
7580	}
7581
7582	/* eslint-disable no-undefined */
7583	/**
7584	 * Debounce execution of a function. Debouncing, unlike throttling,
7585	 * guarantees that a function is only executed a single time, either at the
7586	 * very beginning of a series of calls, or at the very end.
7587	 *
7588	 * @param  {number}   delay -         A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.
7589	 * @param  {boolean}  [atBegin] -     Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds
7590	 *                                  after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.
7591	 *                                  (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).
7592	 * @param  {Function} callback -      A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,
7593	 *                                  to `callback` when the debounced-function is executed.
7594	 *
7595	 * @returns {Function} A new, debounced function.
7596	 */
7597
7598	function debounce (delay, atBegin, callback) {
7599	  return callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);
7600	}
7601
7602	exports.debounce = debounce;
7603	exports.throttle = throttle;
7604
7605	Object.defineProperty(exports, '__esModule', { value: true });
7606
7607})));
7608//# sourceMappingURL=index.umd.js.map
7609
7610
7611/***/ }),
7612
vendor: 15,965 bytes, lines 7613-7629
7613/***/ "./node_modules/venobox/dist/venobox.min.js":
7614/*!**************************************************!*\
7615  !*** ./node_modules/venobox/dist/venobox.min.js ***!
7616  \**************************************************/
7617/***/ (function(module) {
7618
7619!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";
7620/**
7621    * VenoBox 2.0.4
7622    * Copyright 2013-2021 Nicola Franchini
7623    * @license: https://github.com/nicolafranchini/VenoBox/blob/master/LICENSE
7624    */let e,t,o,n,s,i,a,r,l,d,c,v,u,b,p,g,f,m,y,x,h,L,w,k,S,C,E,A,P,q,M,T,j,H,O,z,B;const I=document.createElement("div");let V=0,R=0,D=0,N=!1,Q=new Image;const W={bounce:["sk-bounce","sk-bounce-dot",2],chase:["sk-chase","sk-chase-dot",6],circle:["sk-circle","sk-circle-dot",12],"circle-fade":["sk-circle-fade","sk-circle-fade-dot",12],flow:["sk-flow","sk-flow-dot",3],fold:["sk-fold","sk-fold-cube",4],grid:["sk-grid","sk-grid-cube",9],plane:["sk-plane","",0],pulse:["sk-pulse","",5],swing:["sk-swing","sk-swing-dot",2],wander:["sk-wander","sk-wander-cube",3],wave:["sk-wave","sk-wave-rec",5]},X={selector:".venobox",autoplay:!1,bgcolor:"#fff",border:"0",customClass:!1,infinigall:!1,maxWidth:"100%",navigation:!0,navKeyboard:!0,navTouch:!0,navSpeed:300,numeration:!1,overlayClose:!0,overlayColor:"rgba(23,23,23,0.95)",popup:!1,ratio:"16x9",share:!1,shareStyle:"pill",spinner:"bounce",spinColor:"#d2d2d2",titleattr:"title",titlePosition:"top",titleStyle:"bar",toolsBackground:"#1C1C1C",toolsColor:"#d2d2d2",onPreOpen:function(){return!0},onPostOpen:function(){},onPreClose:function(){return!0},onNavComplete:function(){},onContentLoaded:function(){},onInit:function(){},jQuerySelectors:!1};function Y(e,t,o){if("[object Object]"===Object.prototype.toString.call(e)){let n;for(n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.call(o,e[n],n,e)}else{let n=0,s=e.length;for(n=0;n<s;n++)t.call(o,e[n],n,e)}}function Z(e){return e}function $({timing:e,draw:t,duration:o}){let n=performance.now();requestAnimationFrame((function s(i){let a=(i-n)/o;a>1&&(a=1);let r=e(a);t(r),a<1&&requestAnimationFrame(s)}))}function F(e){if(!e)return!1;y=!0,r=e,L=!1,w=!1,S=e.getAttribute("data-maxwidth")||e.settings.maxWidth,C=e.getAttribute("data-overlay")||e.settings.overlayColor,E=e.getAttribute("data-ratio")||e.settings.ratio,A=e.getAttribute("data-autoplay")||e.settings.autoplay,P=e.getAttribute("data-href")||e.getAttribute("href"),q=e.getAttribute("data-customclass")||e.settings.customClass,z=e.getAttribute(e.settings.titleattr)||"",H=e.getAttribute("data-border")||e.settings.border}function K(){return!(!r||!document.body.classList.contains("vbox-open"))&&((!r.settings.onPreClose||"function"!=typeof r.settings.onPreClose||(r.settings.onPreClose(r,p,T,j),!1!==r.settings.onPreClose))&&(document.body.removeEventListener("keydown",G),document.body.classList.remove("vbox-open"),r.focus(),void $({duration:200,timing:Z,draw:function(e){k.style.opacity=1-e,1===e&&k.remove()}})))}function U(){le(T)}function _(){le(j)}function G(e){27===e.keyCode&&K(),B||(37==e.keyCode&&!0===w&&le(j),39==e.keyCode&&!0===L&&le(T),B=setTimeout((()=>{B=null}),100))}function J(e){a.classList.contains("vbox-"+e)||function(){y=!1,a.style.opacity=0,a.innerHTML=x;let e=a.querySelector(":first-child");e.classList.add("vbox-child"),e.style.backgroundColor=r.settings.bgcolor,e.style.maxWidth=S,e.style.transform="scale(0.9)",e.style.transition="transform 200ms";let t=a.querySelector(".vbox-child img");t&&t.addEventListener("dragstart",(function(e){e.preventDefault()})),i.scrollTo(0,0),e.style.transform="scale(1)",k.style.setProperty("--vbox-padding",H),Y(k.classList,(function(e){"vbox-overlay"!==e&&k.classList.remove(e)})),q&&k.classList.add(q),$({duration:200,timing:Z,draw:function(e){a.style.opacity=e,1===e&&u.classList.add("vbox-hidden")}}),r.settings.onContentLoaded&&"function"==typeof r.settings.onContentLoaded&&r.settings.onContentLoaded(x)}()}function ee(e,t,o){let n;if(a.classList.add("vbox-loading"),-1!==e.search(/.+\.mp4|og[gv]|webm/))n=o?" autoplay":"",x='<div class="venoratio venoratio-'+t+'"><video src="'+e+'"'+n+" controls>Your browser does not support the video tag.</video></div>";else{let s,i=function(e){let t;return e.match(/(http:|https:|)\/\/(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),RegExp.$3.indexOf("youtu")>-1?t="youtube":RegExp.$3.indexOf("vimeo")>-1&&(t="vimeo"),{type:t,id:RegExp.$6}}(e);n=o?"?rel=0&autoplay=1":"?rel=0";let a=n+function(e){let t="",o=decodeURIComponent(e).split("?");if(void 0!==o[1]){let e,n,s=o[1].split("&");for(n=0;n<s.length;n++)e=s[n].split("="),t=t+"&"+e[0]+"="+e[1]}return encodeURI(t)}(e);"vimeo"==i.type?s="https://player.vimeo.com/video/":"youtube"==i.type&&(s="https://www.youtube.com/embed/"),x='<div class="venoratio venoratio-'+t+'"><iframe webkitallowfullscreen mozallowfullscreen allowfullscreen allow="autoplay" frameborder="0" src="'+s+i.id+a+'"></iframe></div>'}a.classList.remove("vbox-loading"),J("animated")}function te(){var e;if(e=x,I.innerHTML=e,g=I.querySelectorAll("img"),g.length){let e=0;Y(g,(function(t){let o=t.src;Q=new Image,Q.onload=function(){e++,e==g.length&&(a.classList.remove("vbox-loading"),J("animated"))},Q.onerror=function(){e++,e==g.length&&(a.classList.remove("vbox-loading"),J("animated"))},Q.src=o}))}else a.classList.remove("vbox-loading"),J("animated")}function oe(e){if(!y){let t=.84*r.settings.navSpeed;a.style.transition="margin "+t+"ms ease-out, opacity "+t+"ms ease-out",M=v=e.pageY,V=R=e.pageX,N=!0}}function ne(e){if(N){N=!1;let e=r,t=!1;D=R-V,D<0&&L&&(e=T,t=!0),D>0&&w&&(e=j,t=!0),Math.abs(D)>=50&&t?le(e):(a.style.marginLeft=0,a.style.opacity=1)}}function se(e){if(N&&!y){R=e.pageX,v=e.pageY,d=R-V,c=v-M;let t=Math.abs(d);if(t>Math.abs(c)&&t<=180){let o=1.5*(1-t/180);e.preventDefault(),a.style.marginLeft=d+"px",a.style.opacity=o}}}function ie(e){if(!e)return!1;O=e.dataset.gall,h=e.settings.numeration,f=e.settings.infinigall,o.innerHTML="";let s=e.dataset.vbtype;e.settings.share&&"iframe"!==s&&"inline"!==s&&"ajax"!==s&&function(e){if(navigator.canShare){const t={url:e};o.insertAdjacentHTML("beforeend",'<div class="vbox-link-btn vbox-share-mobile"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor"><path fill-rule="evenodd" d="M3.5 6a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h9a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5h-2a.5.5 0 0 1 0-1h2A1.5 1.5 0 0 1 14 6.5v8a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 2 14.5v-8A1.5 1.5 0 0 1 3.5 5h2a.5.5 0 0 1 0 1h-2z"/><path fill-rule="evenodd" d="M7.646.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L8.5 1.707V10.5a.5.5 0 0 1-1 0V1.707L5.354 3.854a.5.5 0 1 1-.708-.708l3-3z"/></svg></div>'),o.querySelector(".vbox-share-mobile").addEventListener("click",(function(e){e.preventDefault(),navigator.share(t)}))}o.insertAdjacentHTML("beforeend",'<a target="_blank" href="'+e+'" download><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor"><path d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5z"/><path d="M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3z"/></svg></a>'),o.insertAdjacentHTML("beforeend",'<div class="vbox-tooltip"><div class="vbox-link-btn vbox-share-copy"><span class="vbox-tooltip-text" id="myTooltip"></span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor"><path fill-rule="evenodd" d="M10.854 7.146a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 1 1 .708-.708L7.5 9.793l2.646-2.647a.5.5 0 0 1 .708 0z"/><path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/><path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/></svg></div ></div>'),o.querySelector(".vbox-share-copy").addEventListener("click",(function(t){t.preventDefault();let o=document.getElementById("myTooltip");navigator.clipboard.writeText(e).then((function(){o.innerHTML='<div class="vbox-tooltip-inner">Copied</div>'}),(function(){console.log("copy failed")}))}))}(e.href),m=document.querySelectorAll('.vbox-item[data-gall="'+O+'"]'),l=Array.prototype.indexOf.call(m,e),m.length<2&&(f=!1,h=!1),T=m[l+1],j=m[l-1],!T&&f&&(T=m[0]),!j&&f&&(j=m[m.length-1]),m.length>=1?(p=l+1,t.innerHTML=p+" / "+m.length):p=1,h?t.classList.remove("vbox-hidden"):t.classList.add("vbox-hidden"),""!==z?n.classList.remove("vbox-hidden"):n.classList.add("vbox-hidden"),n.innerHTML=z,w=!1,L=!1,(T||f)&&(L=!0),(l>0||f)&&(w=!0),(w||L)&&e.settings.navTouch?(a.classList.add("vbox-grab"),a.addEventListener("touchstart",oe,!1),a.addEventListener("touchend",ne,!1),a.addEventListener("touchmove",se,!1),a.addEventListener("mousedown",oe,!1),a.addEventListener("mouseup",ne,!1),a.addEventListener("mouseout",ne,!1),a.addEventListener("mousemove",se,!1)):(a.classList.remove("vbox-grab"),a.removeEventListener("touchstart",oe,!1),a.removeEventListener("touchend",ne,!1),a.removeEventListener("touchmove",se,!1),a.removeEventListener("mousedown",oe,!1),a.removeEventListener("mouseup",ne,!1),a.removeEventListener("mouseout",ne,!1),a.removeEventListener("mousemove",se,!1));let i=k.querySelector(".vbox-next"),r=k.querySelector(".vbox-prev");w?r.classList.remove("vbox-hidden"):r.classList.add("vbox-hidden"),L?i.classList.remove("vbox-hidden"):i.classList.add("vbox-hidden"),e.settings.navigation||(i.classList.add("vbox-hidden"),r.classList.add("vbox-hidden"))}function ae(t){if(!t)return!1;e.style.backgroundColor=C,b.innerHTML=function(e){if(!e)return"Loading...";let t='<div class="sk-center '+e[0]+'">',o=0;for(o=0;o<e[2];o++)t+='<div class="'+e[1]+'"></div>';return t+="</div>",t}(W[t.settings.spinner]),k.style.setProperty("--sk-color",t.settings.spinColor),u.classList.remove("vbox-hidden"),o.classList.remove("vbox-top","vbox-bottom"),n.classList.remove("vbox-top","vbox-bottom"),"top"==t.settings.titlePosition?(n.classList.add("vbox-top"),o.classList.add("vbox-bottom")):(n.classList.add("vbox-bottom"),o.classList.add("vbox-top"));let s="bar"===t.settings.titleStyle?"100%":"auto",i="pill"===t.settings.titleStyle?"5em":"0",a="bar"===t.settings.shareStyle?"100%":"auto",r="pill"===t.settings.shareStyle?"5em":"0",l="transparent"===t.settings.titleStyle?"transparent":t.settings.toolsBackground,d="transparent"===t.settings.shareStyle?"transparent":t.settings.toolsBackground;k.style.setProperty("--vbox-title-width",s),k.style.setProperty("--vbox-title-radius",i),k.style.setProperty("--vbox-share-width",a),k.style.setProperty("--vbox-share-radius",r),k.style.setProperty("--vbox-tools-color",t.settings.toolsColor),k.style.setProperty("--vbox-title-background",l),k.style.setProperty("--vbox-share-background",d)}function re(){if(!r)return!1;switch(r.dataset.vbtype){case"iframe":e=P,t=E,a.classList.add("vbox-loading"),x='<div class="venoratio venoratio-'+t+'"><iframe src="'+e+'"></iframe></div>',a.classList.remove("vbox-loading"),J("animated");break;case"inline":!function(e){let t=document.querySelector(e);t&&(a.classList.add("vbox-loading"),x='<div class="vbox-inline">'+t.innerHTML+"</div>",a.classList.remove("vbox-loading"),J("animated"))}(P);break;case"ajax":!function(e){a.classList.add("vbox-loading");let t=new XMLHttpRequest;t.open("GET",e,!0),t.onload=function(){x='<div class="vbox-inline">'+t.response+"</div>",te()},t.onerror=function(){x='<div class="vbox-inline"></div>',a.classList.remove("vbox-loading"),J("animated")},t.send()}(P);break;case"video":ee(P,E,A);break;default:!function(e){Q.onload=function(){x='<div class="vbox-child"><img src="'+e+'"></div>',a.classList.remove("vbox-loading"),J("animated")},Q.src=e}(P)}var e,t}function le(e){if(!e||y||!document.body.classList.contains("vbox-open"))return!1;F(e),ae(e);let t=.84*r.settings.navSpeed;a.style.transition="margin "+t+"ms ease-out, opacity "+t+"ms ease-out",e===j&&a.classList.add("swipe-right"),e===T&&a.classList.add("swipe-left"),u.classList.remove("vbox-hidden");let o=a.style.opacity;a.classList.add("vbox-animated","vbox-loading"),ie(e),$({duration:r.settings.navSpeed,timing:Z,draw:function(e){a.style.opacity=o-e/o,1===e&&(a.classList.remove("swipe-left","swipe-right","vbox-animated"),a.style.marginLeft=0,a.style.transition="",J("loading"),y=!1,r.settings.onNavComplete&&"function"==typeof r.settings.onNavComplete&&r.settings.onNavComplete(r,p,T,j))}}),re()}function de(l){return!(document.body.classList.contains("vbox-open")||!l)&&(l.settings.onPreOpen&&"function"==typeof l.settings.onPreOpen&&l.settings.onPreOpen(l),!!l.settings.onPreOpen&&(F(l),document.body.insertAdjacentHTML("beforeend",s),document.body.classList.add("vbox-open"),k=document.querySelector(".vbox-overlay"),e=k.querySelector(".vbox-backdrop"),i=k.querySelector(".vbox-container"),a=i.querySelector(".vbox-content"),t=k.querySelector(".vbox-num"),o=k.querySelector(".vbox-share"),n=k.querySelector(".vbox-title"),u=k.querySelector(".vbox-preloader"),b=u.querySelector(".vbox-preloader-inner"),k.style.opacity=0,ae(l),ie(l),a.classList.add("vbox-animated","vbox-loading"),$({duration:200,timing:Z,draw:function(e){k.style.opacity=e,1===e&&(a.classList.remove("vbox-animated"),y=!1,J("loading"),r.settings.onPostOpen&&"function"==typeof r.settings.onPostOpen&&r.settings.onPostOpen(r,p,T,j))}}),re(),l.settings.navKeyboard&&(document.body.addEventListener("keydown",G),document.body.addEventListener("keyup",(()=>{B&&(clearTimeout(B),B=null)}))),document.querySelector(".vbox-prev").addEventListener("click",(function(){le(j)})),document.querySelector(".vbox-next").addEventListener("click",(function(){le(T)})),void k.addEventListener("click",(function(e){let t=document.querySelector(".vbox-close");t&&(t.contains(e.target)||t===e.target||r.settings.overlayClose&&e.target.classList.contains("vbox-overlay")||e.target.classList.contains("vbox-content")||e.target.classList.contains("vbox-backdrop")||e.target.classList.contains("vbox-close")||e.target.classList.contains("vbox-preloader")||e.target.classList.contains("vbox-container"))&&K()}))))}const ce=function(e){const t={};let o=function(e,t){let o={};return Y(e,(function(t,n){o[n]=e[n]})),Y(t,(function(e,n){o[n]=t[n]})),o}(X,e||{});return t.close=K,t.next=U,t.prev=_,t.open=de,t.settings=o,function(e,t){t.onInit&&"function"==typeof t.onInit&&t.onInit(e);let o=t.jQuerySelectors||document.querySelectorAll(t.selector);if(s='<div class="vbox-overlay"><div class="vbox-backdrop"></div><div class="vbox-preloader"><div class="vbox-preloader-inner"></div></div><div class="vbox-container"><div class="vbox-content"></div></div><div class="vbox-title"></div><div class="vbox-left-corner"><div class="vbox-num">0/0</div></div><div class="vbox-close"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" class="vbox-close-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M13.854 2.146a.5.5 0 0 1 0 .708l-11 11a.5.5 0 0 1-.708-.708l11-11a.5.5 0 0 1 .708 0Z"/><path fill-rule="evenodd" d="M2.146 2.146a.5.5 0 0 0 0 .708l11 11a.5.5 0 0 0 .708-.708l-11-11a.5.5 0 0 0-.708 0Z"/></svg></div><a class="vbox-next"><span>Next</span></a><a class="vbox-prev"><span>Prev</span></a><div class="vbox-share"></div></div>',Y(o,(function(e){if(e.classList.contains("vbox-item"))return!0;e.settings=t,e.classList.add("vbox-item"),e.addEventListener("click",(function(t){return t.preventDefault(),e.blur(),de(e),!1}))})),t.popup){let e=document.querySelector(t.popup);e.settings=t,de(e)}}(t,o),t};return"function"==typeof jQuery&&jQuery.fn.extend({venobox:function(e){const t=e||{};t.jQuerySelectors=this,new ce({pluginoptions:t})}}),ce}));
7625//# sourceMappingURL=venobox.min.js.map
7626
7627
7628/***/ }),
7629
vendor: 415,117 bytes, lines 7630-19568
7630/***/ "./node_modules/vue/dist/vue.esm.js":
7631/*!******************************************!*\
7632  !*** ./node_modules/vue/dist/vue.esm.js ***!
7633  \******************************************/
7634/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
7635
7636"use strict";
7637__webpack_require__.r(__webpack_exports__);
7638/* harmony export */ __webpack_require__.d(__webpack_exports__, {
7639/* harmony export */   "EffectScope": () => (/* binding */ EffectScope),
7640/* harmony export */   "computed": () => (/* binding */ computed),
7641/* harmony export */   "customRef": () => (/* binding */ customRef),
7642/* harmony export */   "default": () => (/* binding */ Vue),
7643/* harmony export */   "defineAsyncComponent": () => (/* binding */ defineAsyncComponent),
7644/* harmony export */   "defineComponent": () => (/* binding */ defineComponent),
7645/* harmony export */   "del": () => (/* binding */ del),
7646/* harmony export */   "effectScope": () => (/* binding */ effectScope),
7647/* harmony export */   "getCurrentInstance": () => (/* binding */ getCurrentInstance),
7648/* harmony export */   "getCurrentScope": () => (/* binding */ getCurrentScope),
7649/* harmony export */   "h": () => (/* binding */ h),
7650/* harmony export */   "inject": () => (/* binding */ inject),
7651/* harmony export */   "isProxy": () => (/* binding */ isProxy),
7652/* harmony export */   "isReactive": () => (/* binding */ isReactive),
7653/* harmony export */   "isReadonly": () => (/* binding */ isReadonly),
7654/* harmony export */   "isRef": () => (/* binding */ isRef),
7655/* harmony export */   "isShallow": () => (/* binding */ isShallow),
7656/* harmony export */   "markRaw": () => (/* binding */ markRaw),
7657/* harmony export */   "mergeDefaults": () => (/* binding */ mergeDefaults),
7658/* harmony export */   "nextTick": () => (/* binding */ nextTick),
7659/* harmony export */   "onActivated": () => (/* binding */ onActivated),
7660/* harmony export */   "onBeforeMount": () => (/* binding */ onBeforeMount),
7661/* harmony export */   "onBeforeUnmount": () => (/* binding */ onBeforeUnmount),
7662/* harmony export */   "onBeforeUpdate": () => (/* binding */ onBeforeUpdate),
7663/* harmony export */   "onDeactivated": () => (/* binding */ onDeactivated),
7664/* harmony export */   "onErrorCaptured": () => (/* binding */ onErrorCaptured),
7665/* harmony export */   "onMounted": () => (/* binding */ onMounted),
7666/* harmony export */   "onRenderTracked": () => (/* binding */ onRenderTracked),
7667/* harmony export */   "onRenderTriggered": () => (/* binding */ onRenderTriggered),
7668/* harmony export */   "onScopeDispose": () => (/* binding */ onScopeDispose),
7669/* harmony export */   "onServerPrefetch": () => (/* binding */ onServerPrefetch),
7670/* harmony export */   "onUnmounted": () => (/* binding */ onUnmounted),
7671/* harmony export */   "onUpdated": () => (/* binding */ onUpdated),
7672/* harmony export */   "provide": () => (/* binding */ provide),
7673/* harmony export */   "proxyRefs": () => (/* binding */ proxyRefs),
7674/* harmony export */   "reactive": () => (/* binding */ reactive),
7675/* harmony export */   "readonly": () => (/* binding */ readonly),
7676/* harmony export */   "ref": () => (/* binding */ ref$1),
7677/* harmony export */   "set": () => (/* binding */ set),
7678/* harmony export */   "shallowReactive": () => (/* binding */ shallowReactive),
7679/* harmony export */   "shallowReadonly": () => (/* binding */ shallowReadonly),
7680/* harmony export */   "shallowRef": () => (/* binding */ shallowRef),
7681/* harmony export */   "toRaw": () => (/* binding */ toRaw),
7682/* harmony export */   "toRef": () => (/* binding */ toRef),
7683/* harmony export */   "toRefs": () => (/* binding */ toRefs),
7684/* harmony export */   "triggerRef": () => (/* binding */ triggerRef),
7685/* harmony export */   "unref": () => (/* binding */ unref),
7686/* harmony export */   "useAttrs": () => (/* binding */ useAttrs),
7687/* harmony export */   "useCssModule": () => (/* binding */ useCssModule),
7688/* harmony export */   "useCssVars": () => (/* binding */ useCssVars),
7689/* harmony export */   "useListeners": () => (/* binding */ useListeners),
7690/* harmony export */   "useSlots": () => (/* binding */ useSlots),
7691/* harmony export */   "version": () => (/* binding */ version),
7692/* harmony export */   "watch": () => (/* binding */ watch),
7693/* harmony export */   "watchEffect": () => (/* binding */ watchEffect),
7694/* harmony export */   "watchPostEffect": () => (/* binding */ watchPostEffect),
7695/* harmony export */   "watchSyncEffect": () => (/* binding */ watchSyncEffect)
7696/* harmony export */ });
7697/*!
7698 * Vue.js v2.7.14
7699 * (c) 2014-2022 Evan You
7700 * Released under the MIT License.
7701 */
7702var emptyObject = Object.freeze({});
7703var isArray = Array.isArray;
7704// These helpers produce better VM code in JS engines due to their
7705// explicitness and function inlining.
7706function isUndef(v) {
7707    return v === undefined || v === null;
7708}
7709function isDef(v) {
7710    return v !== undefined && v !== null;
7711}
7712function isTrue(v) {
7713    return v === true;
7714}
7715function isFalse(v) {
7716    return v === false;
7717}
7718/**
7719 * Check if value is primitive.
7720 */
7721function isPrimitive(value) {
7722    return (typeof value === 'string' ||
7723        typeof value === 'number' ||
7724        // $flow-disable-line
7725        typeof value === 'symbol' ||
7726        typeof value === 'boolean');
7727}
7728function isFunction(value) {
7729    return typeof value === 'function';
7730}
7731/**
7732 * Quick object check - this is primarily used to tell
7733 * objects from primitive values when we know the value
7734 * is a JSON-compliant type.
7735 */
7736function isObject(obj) {
7737    return obj !== null && typeof obj === 'object';
7738}
7739/**
7740 * Get the raw type string of a value, e.g., [object Object].
7741 */
7742var _toString = Object.prototype.toString;
7743function toRawType(value) {
7744    return _toString.call(value).slice(8, -1);
7745}
7746/**
7747 * Strict object type check. Only returns true
7748 * for plain JavaScript objects.
7749 */
7750function isPlainObject(obj) {
7751    return _toString.call(obj) === '[object Object]';
7752}
7753function isRegExp(v) {
7754    return _toString.call(v) === '[object RegExp]';
7755}
7756/**
7757 * Check if val is a valid array index.
7758 */
7759function isValidArrayIndex(val) {
7760    var n = parseFloat(String(val));
7761    return n >= 0 && Math.floor(n) === n && isFinite(val);
7762}
7763function isPromise(val) {
7764    return (isDef(val) &&
7765        typeof val.then === 'function' &&
7766        typeof val.catch === 'function');
7767}
7768/**
7769 * Convert a value to a string that is actually rendered.
7770 */
7771function toString(val) {
7772    return val == null
7773        ? ''
7774        : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
7775            ? JSON.stringify(val, null, 2)
7776            : String(val);
7777}
7778/**
7779 * Convert an input value to a number for persistence.
7780 * If the conversion fails, return original string.
7781 */
7782function toNumber(val) {
7783    var n = parseFloat(val);
7784    return isNaN(n) ? val : n;
7785}
7786/**
7787 * Make a map and return a function for checking if a key
7788 * is in that map.
7789 */
7790function makeMap(str, expectsLowerCase) {
7791    var map = Object.create(null);
7792    var list = str.split(',');
7793    for (var i = 0; i < list.length; i++) {
7794        map[list[i]] = true;
7795    }
7796    return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };
7797}
7798/**
7799 * Check if a tag is a built-in tag.
7800 */
7801var isBuiltInTag = makeMap('slot,component', true);
7802/**
7803 * Check if an attribute is a reserved attribute.
7804 */
7805var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
7806/**
7807 * Remove an item from an array.
7808 */
7809function remove$2(arr, item) {
7810    var len = arr.length;
7811    if (len) {
7812        // fast path for the only / last item
7813        if (item === arr[len - 1]) {
7814            arr.length = len - 1;
7815            return;
7816        }
7817        var index = arr.indexOf(item);
7818        if (index > -1) {
7819            return arr.splice(index, 1);
7820        }
7821    }
7822}
7823/**
7824 * Check whether an object has the property.
7825 */
7826var hasOwnProperty = Object.prototype.hasOwnProperty;
7827function hasOwn(obj, key) {
7828    return hasOwnProperty.call(obj, key);
7829}
7830/**
7831 * Create a cached version of a pure function.
7832 */
7833function cached(fn) {
7834    var cache = Object.create(null);
7835    return function cachedFn(str) {
7836        var hit = cache[str];
7837        return hit || (cache[str] = fn(str));
7838    };
7839}
7840/**
7841 * Camelize a hyphen-delimited string.
7842 */
7843var camelizeRE = /-(\w)/g;
7844var camelize = cached(function (str) {
7845    return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });
7846});
7847/**
7848 * Capitalize a string.
7849 */
7850var capitalize = cached(function (str) {
7851    return str.charAt(0).toUpperCase() + str.slice(1);
7852});
7853/**
7854 * Hyphenate a camelCase string.
7855 */
7856var hyphenateRE = /\B([A-Z])/g;
7857var hyphenate = cached(function (str) {
7858    return str.replace(hyphenateRE, '-$1').toLowerCase();
7859});
7860/**
7861 * Simple bind polyfill for environments that do not support it,
7862 * e.g., PhantomJS 1.x. Technically, we don't need this anymore
7863 * since native bind is now performant enough in most browsers.
7864 * But removing it would mean breaking code that was able to run in
7865 * PhantomJS 1.x, so this must be kept for backward compatibility.
7866 */
7867/* istanbul ignore next */
7868function polyfillBind(fn, ctx) {
7869    function boundFn(a) {
7870        var l = arguments.length;
7871        return l
7872            ? l > 1
7873                ? fn.apply(ctx, arguments)
7874                : fn.call(ctx, a)
7875            : fn.call(ctx);
7876    }
7877    boundFn._length = fn.length;
7878    return boundFn;
7879}
7880function nativeBind(fn, ctx) {
7881    return fn.bind(ctx);
7882}
7883// @ts-expect-error bind cannot be `undefined`
7884var bind$1 = Function.prototype.bind ? nativeBind : polyfillBind;
7885/**
7886 * Convert an Array-like object to a real Array.
7887 */
7888function toArray(list, start) {
7889    start = start || 0;
7890    var i = list.length - start;
7891    var ret = new Array(i);
7892    while (i--) {
7893        ret[i] = list[i + start];
7894    }
7895    return ret;
7896}
7897/**
7898 * Mix properties into target object.
7899 */
7900function extend(to, _from) {
7901    for (var key in _from) {
7902        to[key] = _from[key];
7903    }
7904    return to;
7905}
7906/**
7907 * Merge an Array of Objects into a single Object.
7908 */
7909function toObject(arr) {
7910    var res = {};
7911    for (var i = 0; i < arr.length; i++) {
7912        if (arr[i]) {
7913            extend(res, arr[i]);
7914        }
7915    }
7916    return res;
7917}
7918/* eslint-disable no-unused-vars */
7919/**
7920 * Perform no operation.
7921 * Stubbing args to make Flow happy without leaving useless transpiled code
7922 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
7923 */
7924function noop(a, b, c) { }
7925/**
7926 * Always return false.
7927 */
7928var no = function (a, b, c) { return false; };
7929/* eslint-enable no-unused-vars */
7930/**
7931 * Return the same value.
7932 */
7933var identity = function (_) { return _; };
7934/**
7935 * Generate a string containing static keys from compiler modules.
7936 */
7937function genStaticKeys$1(modules) {
7938    return modules
7939        .reduce(function (keys, m) {
7940        return keys.concat(m.staticKeys || []);
7941    }, [])
7942        .join(',');
7943}
7944/**
7945 * Check if two values are loosely equal - that is,
7946 * if they are plain objects, do they have the same shape?
7947 */
7948function looseEqual(a, b) {
7949    if (a === b)
7950        return true;
7951    var isObjectA = isObject(a);
7952    var isObjectB = isObject(b);
7953    if (isObjectA && isObjectB) {
7954        try {
7955            var isArrayA = Array.isArray(a);
7956            var isArrayB = Array.isArray(b);
7957            if (isArrayA && isArrayB) {
7958                return (a.length === b.length &&
7959                    a.every(function (e, i) {
7960                        return looseEqual(e, b[i]);
7961                    }));
7962            }
7963            else if (a instanceof Date && b instanceof Date) {
7964                return a.getTime() === b.getTime();
7965            }
7966            else if (!isArrayA && !isArrayB) {
7967                var keysA = Object.keys(a);
7968                var keysB = Object.keys(b);
7969                return (keysA.length === keysB.length &&
7970                    keysA.every(function (key) {
7971                        return looseEqual(a[key], b[key]);
7972                    }));
7973            }
7974            else {
7975                /* istanbul ignore next */
7976                return false;
7977            }
7978        }
7979        catch (e) {
7980            /* istanbul ignore next */
7981            return false;
7982        }
7983    }
7984    else if (!isObjectA && !isObjectB) {
7985        return String(a) === String(b);
7986    }
7987    else {
7988        return false;
7989    }
7990}
7991/**
7992 * Return the first index at which a loosely equal value can be
7993 * found in the array (if value is a plain object, the array must
7994 * contain an object of the same shape), or -1 if it is not present.
7995 */
7996function looseIndexOf(arr, val) {
7997    for (var i = 0; i < arr.length; i++) {
7998        if (looseEqual(arr[i], val))
7999            return i;
8000    }
8001    return -1;
8002}
8003/**
8004 * Ensure a function is called only once.
8005 */
8006function once(fn) {
8007    var called = false;
8008    return function () {
8009        if (!called) {
8010            called = true;
8011            fn.apply(this, arguments);
8012        }
8013    };
8014}
8015// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
8016function hasChanged(x, y) {
8017    if (x === y) {
8018        return x === 0 && 1 / x !== 1 / y;
8019    }
8020    else {
8021        return x === x || y === y;
8022    }
8023}
8024
8025var SSR_ATTR = 'data-server-rendered';
8026var ASSET_TYPES = ['component', 'directive', 'filter'];
8027var LIFECYCLE_HOOKS = [
8028    'beforeCreate',
8029    'created',
8030    'beforeMount',
8031    'mounted',
8032    'beforeUpdate',
8033    'updated',
8034    'beforeDestroy',
8035    'destroyed',
8036    'activated',
8037    'deactivated',
8038    'errorCaptured',
8039    'serverPrefetch',
8040    'renderTracked',
8041    'renderTriggered'
8042];
8043
8044var config = {
8045    /**
8046     * Option merge strategies (used in core/util/options)
8047     */
8048    // $flow-disable-line
8049    optionMergeStrategies: Object.create(null),
8050    /**
8051     * Whether to suppress warnings.
8052     */
8053    silent: false,
8054    /**
8055     * Show production mode tip message on boot?
8056     */
8057    productionTip: "development" !== 'production',
8058    /**
8059     * Whether to enable devtools
8060     */
8061    devtools: "development" !== 'production',
8062    /**
8063     * Whether to record perf
8064     */
8065    performance: false,
8066    /**
8067     * Error handler for watcher errors
8068     */
8069    errorHandler: null,
8070    /**
8071     * Warn handler for watcher warns
8072     */
8073    warnHandler: null,
8074    /**
8075     * Ignore certain custom elements
8076     */
8077    ignoredElements: [],
8078    /**
8079     * Custom user key aliases for v-on
8080     */
8081    // $flow-disable-line
8082    keyCodes: Object.create(null),
8083    /**
8084     * Check if a tag is reserved so that it cannot be registered as a
8085     * component. This is platform-dependent and may be overwritten.
8086     */
8087    isReservedTag: no,
8088    /**
8089     * Check if an attribute is reserved so that it cannot be used as a component
8090     * prop. This is platform-dependent and may be overwritten.
8091     */
8092    isReservedAttr: no,
8093    /**
8094     * Check if a tag is an unknown element.
8095     * Platform-dependent.
8096     */
8097    isUnknownElement: no,
8098    /**
8099     * Get the namespace of an element
8100     */
8101    getTagNamespace: noop,
8102    /**
8103     * Parse the real tag name for the specific platform.
8104     */
8105    parsePlatformTagName: identity,
8106    /**
8107     * Check if an attribute must be bound using property, e.g. value
8108     * Platform-dependent.
8109     */
8110    mustUseProp: no,
8111    /**
8112     * Perform updates asynchronously. Intended to be used by Vue Test Utils
8113     * This will significantly reduce performance if set to false.
8114     */
8115    async: true,
8116    /**
8117     * Exposed for legacy reasons
8118     */
8119    _lifecycleHooks: LIFECYCLE_HOOKS
8120};
8121
8122/**
8123 * unicode letters used for parsing html tags, component names and property paths.
8124 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
8125 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
8126 */
8127var 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/;
8128/**
8129 * Check if a string starts with $ or _
8130 */
8131function isReserved(str) {
8132    var c = (str + '').charCodeAt(0);
8133    return c === 0x24 || c === 0x5f;
8134}
8135/**
8136 * Define a property.
8137 */
8138function def(obj, key, val, enumerable) {
8139    Object.defineProperty(obj, key, {
8140        value: val,
8141        enumerable: !!enumerable,
8142        writable: true,
8143        configurable: true
8144    });
8145}
8146/**
8147 * Parse simple path.
8148 */
8149var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]"));
8150function parsePath(path) {
8151    if (bailRE.test(path)) {
8152        return;
8153    }
8154    var segments = path.split('.');
8155    return function (obj) {
8156        for (var i = 0; i < segments.length; i++) {
8157            if (!obj)
8158                return;
8159            obj = obj[segments[i]];
8160        }
8161        return obj;
8162    };
8163}
8164
8165// can we use __proto__?
8166var hasProto = '__proto__' in {};
8167// Browser environment sniffing
8168var inBrowser = typeof window !== 'undefined';
8169var UA = inBrowser && window.navigator.userAgent.toLowerCase();
8170var isIE = UA && /msie|trident/.test(UA);
8171var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
8172var isEdge = UA && UA.indexOf('edge/') > 0;
8173UA && UA.indexOf('android') > 0;
8174var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
8175UA && /chrome\/\d+/.test(UA) && !isEdge;
8176UA && /phantomjs/.test(UA);
8177var isFF = UA && UA.match(/firefox\/(\d+)/);
8178// Firefox has a "watch" function on Object.prototype...
8179// @ts-expect-error firebox support
8180var nativeWatch = {}.watch;
8181var supportsPassive = false;
8182if (inBrowser) {
8183    try {
8184        var opts = {};
8185        Object.defineProperty(opts, 'passive', {
8186            get: function () {
8187                /* istanbul ignore next */
8188                supportsPassive = true;
8189            }
8190        }); // https://github.com/facebook/flow/issues/285
8191        window.addEventListener('test-passive', null, opts);
8192    }
8193    catch (e) { }
8194}
8195// this needs to be lazy-evaled because vue may be required before
8196// vue-server-renderer can set VUE_ENV
8197var _isServer;
8198var isServerRendering = function () {
8199    if (_isServer === undefined) {
8200        /* istanbul ignore if */
8201        if (!inBrowser && typeof __webpack_require__.g !== 'undefined') {
8202            // detect presence of vue-server-renderer and avoid
8203            // Webpack shimming the process
8204            _isServer =
8205                __webpack_require__.g['process'] && __webpack_require__.g['process'].env.VUE_ENV === 'server';
8206        }
8207        else {
8208            _isServer = false;
8209        }
8210    }
8211    return _isServer;
8212};
8213// detect devtools
8214var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
8215/* istanbul ignore next */
8216function isNative(Ctor) {
8217    return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
8218}
8219var hasSymbol = typeof Symbol !== 'undefined' &&
8220    isNative(Symbol) &&
8221    typeof Reflect !== 'undefined' &&
8222    isNative(Reflect.ownKeys);
8223var _Set; // $flow-disable-line
8224/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
8225    // use native Set when available.
8226    _Set = Set;
8227}
8228else {
8229    // a non-standard Set polyfill that only works with primitive keys.
8230    _Set = /** @class */ (function () {
8231        function Set() {
8232            this.set = Object.create(null);
8233        }
8234        Set.prototype.has = function (key) {
8235            return this.set[key] === true;
8236        };
8237        Set.prototype.add = function (key) {
8238            this.set[key] = true;
8239        };
8240        Set.prototype.clear = function () {
8241            this.set = Object.create(null);
8242        };
8243        return Set;
8244    }());
8245}
8246
8247var currentInstance = null;
8248/**
8249 * This is exposed for compatibility with v3 (e.g. some functions in VueUse
8250 * relies on it). Do not use this internally, just use `currentInstance`.
8251 *
8252 * @internal this function needs manual type declaration because it relies
8253 * on previously manually authored types from Vue 2
8254 */
8255function getCurrentInstance() {
8256    return currentInstance && { proxy: currentInstance };
8257}
8258/**
8259 * @internal
8260 */
8261function setCurrentInstance(vm) {
8262    if (vm === void 0) { vm = null; }
8263    if (!vm)
8264        currentInstance && currentInstance._scope.off();
8265    currentInstance = vm;
8266    vm && vm._scope.on();
8267}
8268
8269/**
8270 * @internal
8271 */
8272var VNode = /** @class */ (function () {
8273    function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
8274        this.tag = tag;
8275        this.data = data;
8276        this.children = children;
8277        this.text = text;
8278        this.elm = elm;
8279        this.ns = undefined;
8280        this.context = context;
8281        this.fnContext = undefined;
8282        this.fnOptions = undefined;
8283        this.fnScopeId = undefined;
8284        this.key = data && data.key;
8285        this.componentOptions = componentOptions;
8286        this.componentInstance = undefined;
8287        this.parent = undefined;
8288        this.raw = false;
8289        this.isStatic = false;
8290        this.isRootInsert = true;
8291        this.isComment = false;
8292        this.isCloned = false;
8293        this.isOnce = false;
8294        this.asyncFactory = asyncFactory;
8295        this.asyncMeta = undefined;
8296        this.isAsyncPlaceholder = false;
8297    }
8298    Object.defineProperty(VNode.prototype, "child", {
8299        // DEPRECATED: alias for componentInstance for backwards compat.
8300        /* istanbul ignore next */
8301        get: function () {
8302            return this.componentInstance;
8303        },
8304        enumerable: false,
8305        configurable: true
8306    });
8307    return VNode;
8308}());
8309var createEmptyVNode = function (text) {
8310    if (text === void 0) { text = ''; }
8311    var node = new VNode();
8312    node.text = text;
8313    node.isComment = true;
8314    return node;
8315};
8316function createTextVNode(val) {
8317    return new VNode(undefined, undefined, undefined, String(val));
8318}
8319// optimized shallow clone
8320// used for static nodes and slot nodes because they may be reused across
8321// multiple renders, cloning them avoids errors when DOM manipulations rely
8322// on their elm reference.
8323function cloneVNode(vnode) {
8324    var cloned = new VNode(vnode.tag, vnode.data, 
8325    // #7975
8326    // clone children array to avoid mutating original in case of cloning
8327    // a child.
8328    vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
8329    cloned.ns = vnode.ns;
8330    cloned.isStatic = vnode.isStatic;
8331    cloned.key = vnode.key;
8332    cloned.isComment = vnode.isComment;
8333    cloned.fnContext = vnode.fnContext;
8334    cloned.fnOptions = vnode.fnOptions;
8335    cloned.fnScopeId = vnode.fnScopeId;
8336    cloned.asyncMeta = vnode.asyncMeta;
8337    cloned.isCloned = true;
8338    return cloned;
8339}
8340
8341/* not type checking this file because flow doesn't play well with Proxy */
8342var initProxy;
8343if (true) {
8344    var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
8345        'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
8346        'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
8347        'require' // for Webpack/Browserify
8348    );
8349    var warnNonPresent_1 = function (target, key) {
8350        warn$2("Property or method \"".concat(key, "\" is not defined on the instance but ") +
8351            'referenced during render. Make sure that this property is reactive, ' +
8352            'either in the data option, or for class-based components, by ' +
8353            'initializing the property. ' +
8354            'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);
8355    };
8356    var warnReservedPrefix_1 = function (target, key) {
8357        warn$2("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") +
8358            'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
8359            'prevent conflicts with Vue internals. ' +
8360            'See: https://v2.vuejs.org/v2/api/#data', target);
8361    };
8362    var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy);
8363    if (hasProxy_1) {
8364        var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
8365        config.keyCodes = new Proxy(config.keyCodes, {
8366            set: function (target, key, value) {
8367                if (isBuiltInModifier_1(key)) {
8368                    warn$2("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key));
8369                    return false;
8370                }
8371                else {
8372                    target[key] = value;
8373                    return true;
8374                }
8375            }
8376        });
8377    }
8378    var hasHandler_1 = {
8379        has: function (target, key) {
8380            var has = key in target;
8381            var isAllowed = allowedGlobals_1(key) ||
8382                (typeof key === 'string' &&
8383                    key.charAt(0) === '_' &&
8384                    !(key in target.$data));
8385            if (!has && !isAllowed) {
8386                if (key in target.$data)
8387                    warnReservedPrefix_1(target, key);
8388                else
8389                    warnNonPresent_1(target, key);
8390            }
8391            return has || !isAllowed;
8392        }
8393    };
8394    var getHandler_1 = {
8395        get: function (target, key) {
8396            if (typeof key === 'string' && !(key in target)) {
8397                if (key in target.$data)
8398                    warnReservedPrefix_1(target, key);
8399                else
8400                    warnNonPresent_1(target, key);
8401            }
8402            return target[key];
8403        }
8404    };
8405    initProxy = function initProxy(vm) {
8406        if (hasProxy_1) {
8407            // determine which proxy handler to use
8408            var options = vm.$options;
8409            var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1;
8410            vm._renderProxy = new Proxy(vm, handlers);
8411        }
8412        else {
8413            vm._renderProxy = vm;
8414        }
8415    };
8416}
8417
8418/******************************************************************************
8419Copyright (c) Microsoft Corporation.
8420
8421Permission to use, copy, modify, and/or distribute this software for any
8422purpose with or without fee is hereby granted.
8423
8424THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
8425REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
8426AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
8427INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
8428LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
8429OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
8430PERFORMANCE OF THIS SOFTWARE.
8431***************************************************************************** */
8432
8433var __assign = function() {
8434    __assign = Object.assign || function __assign(t) {
8435        for (var s, i = 1, n = arguments.length; i < n; i++) {
8436            s = arguments[i];
8437            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
8438        }
8439        return t;
8440    };
8441    return __assign.apply(this, arguments);
8442};
8443
8444var uid$2 = 0;
8445var pendingCleanupDeps = [];
8446var cleanupDeps = function () {
8447    for (var i = 0; i < pendingCleanupDeps.length; i++) {
8448        var dep = pendingCleanupDeps[i];
8449        dep.subs = dep.subs.filter(function (s) { return s; });
8450        dep._pending = false;
8451    }
8452    pendingCleanupDeps.length = 0;
8453};
8454/**
8455 * A dep is an observable that can have multiple
8456 * directives subscribing to it.
8457 * @internal
8458 */
8459var Dep = /** @class */ (function () {
8460    function Dep() {
8461        // pending subs cleanup
8462        this._pending = false;
8463        this.id = uid$2++;
8464        this.subs = [];
8465    }
8466    Dep.prototype.addSub = function (sub) {
8467        this.subs.push(sub);
8468    };
8469    Dep.prototype.removeSub = function (sub) {
8470        // #12696 deps with massive amount of subscribers are extremely slow to
8471        // clean up in Chromium
8472        // to workaround this, we unset the sub for now, and clear them on
8473        // next scheduler flush.
8474        this.subs[this.subs.indexOf(sub)] = null;
8475        if (!this._pending) {
8476            this._pending = true;
8477            pendingCleanupDeps.push(this);
8478        }
8479    };
8480    Dep.prototype.depend = function (info) {
8481        if (Dep.target) {
8482            Dep.target.addDep(this);
8483            if ( true && info && Dep.target.onTrack) {
8484                Dep.target.onTrack(__assign({ effect: Dep.target }, info));
8485            }
8486        }
8487    };
8488    Dep.prototype.notify = function (info) {
8489        // stabilize the subscriber list first
8490        var subs = this.subs.filter(function (s) { return s; });
8491        if ( true && !config.async) {
8492            // subs aren't sorted in scheduler if not running async
8493            // we need to sort them now to make sure they fire in correct
8494            // order
8495            subs.sort(function (a, b) { return a.id - b.id; });
8496        }
8497        for (var i = 0, l = subs.length; i < l; i++) {
8498            var sub = subs[i];
8499            if ( true && info) {
8500                sub.onTrigger &&
8501                    sub.onTrigger(__assign({ effect: subs[i] }, info));
8502            }
8503            sub.update();
8504        }
8505    };
8506    return Dep;
8507}());
8508// The current target watcher being evaluated.
8509// This is globally unique because only one watcher
8510// can be evaluated at a time.
8511Dep.target = null;
8512var targetStack = [];
8513function pushTarget(target) {
8514    targetStack.push(target);
8515    Dep.target = target;
8516}
8517function popTarget() {
8518    targetStack.pop();
8519    Dep.target = targetStack[targetStack.length - 1];
8520}
8521
8522/*
8523 * not type checking this file because flow doesn't play well with
8524 * dynamically accessing methods on Array prototype
8525 */
8526var arrayProto = Array.prototype;
8527var arrayMethods = Object.create(arrayProto);
8528var methodsToPatch = [
8529    'push',
8530    'pop',
8531    'shift',
8532    'unshift',
8533    'splice',
8534    'sort',
8535    'reverse'
8536];
8537/**
8538 * Intercept mutating methods and emit events
8539 */
8540methodsToPatch.forEach(function (method) {
8541    // cache original method
8542    var original = arrayProto[method];
8543    def(arrayMethods, method, function mutator() {
8544        var args = [];
8545        for (var _i = 0; _i < arguments.length; _i++) {
8546            args[_i] = arguments[_i];
8547        }
8548        var result = original.apply(this, args);
8549        var ob = this.__ob__;
8550        var inserted;
8551        switch (method) {
8552            case 'push':
8553            case 'unshift':
8554                inserted = args;
8555                break;
8556            case 'splice':
8557                inserted = args.slice(2);
8558                break;
8559        }
8560        if (inserted)
8561            ob.observeArray(inserted);
8562        // notify change
8563        if (true) {
8564            ob.dep.notify({
8565                type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */,
8566                target: this,
8567                key: method
8568            });
8569        }
8570        else {}
8571        return result;
8572    });
8573});
8574
8575var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
8576var NO_INIITIAL_VALUE = {};
8577/**
8578 * In some cases we may want to disable observation inside a component's
8579 * update computation.
8580 */
8581var shouldObserve = true;
8582function toggleObserving(value) {
8583    shouldObserve = value;
8584}
8585// ssr mock dep
8586var mockDep = {
8587    notify: noop,
8588    depend: noop,
8589    addSub: noop,
8590    removeSub: noop
8591};
8592/**
8593 * Observer class that is attached to each observed
8594 * object. Once attached, the observer converts the target
8595 * object's property keys into getter/setters that
8596 * collect dependencies and dispatch updates.
8597 */
8598var Observer = /** @class */ (function () {
8599    function Observer(value, shallow, mock) {
8600        if (shallow === void 0) { shallow = false; }
8601        if (mock === void 0) { mock = false; }
8602        this.value = value;
8603        this.shallow = shallow;
8604        this.mock = mock;
8605        // this.value = value
8606        this.dep = mock ? mockDep : new Dep();
8607        this.vmCount = 0;
8608        def(value, '__ob__', this);
8609        if (isArray(value)) {
8610            if (!mock) {
8611                if (hasProto) {
8612                    value.__proto__ = arrayMethods;
8613                    /* eslint-enable no-proto */
8614                }
8615                else {
8616                    for (var i = 0, l = arrayKeys.length; i < l; i++) {
8617                        var key = arrayKeys[i];
8618                        def(value, key, arrayMethods[key]);
8619                    }
8620                }
8621            }
8622            if (!shallow) {
8623                this.observeArray(value);
8624            }
8625        }
8626        else {
8627            /**
8628             * Walk through all properties and convert them into
8629             * getter/setters. This method should only be called when
8630             * value type is Object.
8631             */
8632            var keys = Object.keys(value);
8633            for (var i = 0; i < keys.length; i++) {
8634                var key = keys[i];
8635                defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);
8636            }
8637        }
8638    }
8639    /**
8640     * Observe a list of Array items.
8641     */
8642    Observer.prototype.observeArray = function (value) {
8643        for (var i = 0, l = value.length; i < l; i++) {
8644            observe(value[i], false, this.mock);
8645        }
8646    };
8647    return Observer;
8648}());
8649// helpers
8650/**
8651 * Attempt to create an observer instance for a value,
8652 * returns the new observer if successfully observed,
8653 * or the existing observer if the value already has one.
8654 */
8655function observe(value, shallow, ssrMockReactivity) {
8656    if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
8657        return value.__ob__;
8658    }
8659    if (shouldObserve &&
8660        (ssrMockReactivity || !isServerRendering()) &&
8661        (isArray(value) || isPlainObject(value)) &&
8662        Object.isExtensible(value) &&
8663        !value.__v_skip /* ReactiveFlags.SKIP */ &&
8664        !isRef(value) &&
8665        !(value instanceof VNode)) {
8666        return new Observer(value, shallow, ssrMockReactivity);
8667    }
8668}
8669/**
8670 * Define a reactive property on an Object.
8671 */
8672function defineReactive(obj, key, val, customSetter, shallow, mock) {
8673    var dep = new Dep();
8674    var property = Object.getOwnPropertyDescriptor(obj, key);
8675    if (property && property.configurable === false) {
8676        return;
8677    }
8678    // cater for pre-defined getter/setters
8679    var getter = property && property.get;
8680    var setter = property && property.set;
8681    if ((!getter || setter) &&
8682        (val === NO_INIITIAL_VALUE || arguments.length === 2)) {
8683        val = obj[key];
8684    }
8685    var childOb = !shallow && observe(val, false, mock);
8686    Object.defineProperty(obj, key, {
8687        enumerable: true,
8688        configurable: true,
8689        get: function reactiveGetter() {
8690            var value = getter ? getter.call(obj) : val;
8691            if (Dep.target) {
8692                if (true) {
8693                    dep.depend({
8694                        target: obj,
8695                        type: "get" /* TrackOpTypes.GET */,
8696                        key: key
8697                    });
8698                }
8699                else {}
8700                if (childOb) {
8701                    childOb.dep.depend();
8702                    if (isArray(value)) {
8703                        dependArray(value);
8704                    }
8705                }
8706            }
8707            return isRef(value) && !shallow ? value.value : value;
8708        },
8709        set: function reactiveSetter(newVal) {
8710            var value = getter ? getter.call(obj) : val;
8711            if (!hasChanged(value, newVal)) {
8712                return;
8713            }
8714            if ( true && customSetter) {
8715                customSetter();
8716            }
8717            if (setter) {
8718                setter.call(obj, newVal);
8719            }
8720            else if (getter) {
8721                // #7981: for accessor properties without setter
8722                return;
8723            }
8724            else if (!shallow && isRef(value) && !isRef(newVal)) {
8725                value.value = newVal;
8726                return;
8727            }
8728            else {
8729                val = newVal;
8730            }
8731            childOb = !shallow && observe(newVal, false, mock);
8732            if (true) {
8733                dep.notify({
8734                    type: "set" /* TriggerOpTypes.SET */,
8735                    target: obj,
8736                    key: key,
8737                    newValue: newVal,
8738                    oldValue: value
8739                });
8740            }
8741            else {}
8742        }
8743    });
8744    return dep;
8745}
8746function set(target, key, val) {
8747    if ( true && (isUndef(target) || isPrimitive(target))) {
8748        warn$2("Cannot set reactive property on undefined, null, or primitive value: ".concat(target));
8749    }
8750    if (isReadonly(target)) {
8751         true && warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly."));
8752        return;
8753    }
8754    var ob = target.__ob__;
8755    if (isArray(target) && isValidArrayIndex(key)) {
8756        target.length = Math.max(target.length, key);
8757        target.splice(key, 1, val);
8758        // when mocking for SSR, array methods are not hijacked
8759        if (ob && !ob.shallow && ob.mock) {
8760            observe(val, false, true);
8761        }
8762        return val;
8763    }
8764    if (key in target && !(key in Object.prototype)) {
8765        target[key] = val;
8766        return val;
8767    }
8768    if (target._isVue || (ob && ob.vmCount)) {
8769         true &&
8770            warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' +
8771                'at runtime - declare it upfront in the data option.');
8772        return val;
8773    }
8774    if (!ob) {
8775        target[key] = val;
8776        return val;
8777    }
8778    defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
8779    if (true) {
8780        ob.dep.notify({
8781            type: "add" /* TriggerOpTypes.ADD */,
8782            target: target,
8783            key: key,
8784            newValue: val,
8785            oldValue: undefined
8786        });
8787    }
8788    else {}
8789    return val;
8790}
8791function del(target, key) {
8792    if ( true && (isUndef(target) || isPrimitive(target))) {
8793        warn$2("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target));
8794    }
8795    if (isArray(target) && isValidArrayIndex(key)) {
8796        target.splice(key, 1);
8797        return;
8798    }
8799    var ob = target.__ob__;
8800    if (target._isVue || (ob && ob.vmCount)) {
8801         true &&
8802            warn$2('Avoid deleting properties on a Vue instance or its root $data ' +
8803                '- just set it to null.');
8804        return;
8805    }
8806    if (isReadonly(target)) {
8807         true &&
8808            warn$2("Delete operation on key \"".concat(key, "\" failed: target is readonly."));
8809        return;
8810    }
8811    if (!hasOwn(target, key)) {
8812        return;
8813    }
8814    delete target[key];
8815    if (!ob) {
8816        return;
8817    }
8818    if (true) {
8819        ob.dep.notify({
8820            type: "delete" /* TriggerOpTypes.DELETE */,
8821            target: target,
8822            key: key
8823        });
8824    }
8825    else {}
8826}
8827/**
8828 * Collect dependencies on array elements when the array is touched, since
8829 * we cannot intercept array element access like property getters.
8830 */
8831function dependArray(value) {
8832    for (var e = void 0, i = 0, l = value.length; i < l; i++) {
8833        e = value[i];
8834        if (e && e.__ob__) {
8835            e.__ob__.dep.depend();
8836        }
8837        if (isArray(e)) {
8838            dependArray(e);
8839        }
8840    }
8841}
8842
8843function reactive(target) {
8844    makeReactive(target, false);
8845    return target;
8846}
8847/**
8848 * Return a shallowly-reactive copy of the original object, where only the root
8849 * level properties are reactive. It also does not auto-unwrap refs (even at the
8850 * root level).
8851 */
8852function shallowReactive(target) {
8853    makeReactive(target, true);
8854    def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
8855    return target;
8856}
8857function makeReactive(target, shallow) {
8858    // if trying to observe a readonly proxy, return the readonly version.
8859    if (!isReadonly(target)) {
8860        if (true) {
8861            if (isArray(target)) {
8862                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."));
8863            }
8864            var existingOb = target && target.__ob__;
8865            if (existingOb && existingOb.shallow !== shallow) {
8866                warn$2("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow."));
8867            }
8868        }
8869        var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);
8870        if ( true && !ob) {
8871            if (target == null || isPrimitive(target)) {
8872                warn$2("value cannot be made reactive: ".concat(String(target)));
8873            }
8874            if (isCollectionType(target)) {
8875                warn$2("Vue 2 does not support reactive collection types such as Map or Set.");
8876            }
8877        }
8878    }
8879}
8880function isReactive(value) {
8881    if (isReadonly(value)) {
8882        return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]);
8883    }
8884    return !!(value && value.__ob__);
8885}
8886function isShallow(value) {
8887    return !!(value && value.__v_isShallow);
8888}
8889function isReadonly(value) {
8890    return !!(value && value.__v_isReadonly);
8891}
8892function isProxy(value) {
8893    return isReactive(value) || isReadonly(value);
8894}
8895function toRaw(observed) {
8896    var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */];
8897    return raw ? toRaw(raw) : observed;
8898}
8899function markRaw(value) {
8900    // non-extensible objects won't be observed anyway
8901    if (Object.isExtensible(value)) {
8902        def(value, "__v_skip" /* ReactiveFlags.SKIP */, true);
8903    }
8904    return value;
8905}
8906/**
8907 * @internal
8908 */
8909function isCollectionType(value) {
8910    var type = toRawType(value);
8911    return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');
8912}
8913
8914/**
8915 * @internal
8916 */
8917var RefFlag = "__v_isRef";
8918function isRef(r) {
8919    return !!(r && r.__v_isRef === true);
8920}
8921function ref$1(value) {
8922    return createRef(value, false);
8923}
8924function shallowRef(value) {
8925    return createRef(value, true);
8926}
8927function createRef(rawValue, shallow) {
8928    if (isRef(rawValue)) {
8929        return rawValue;
8930    }
8931    var ref = {};
8932    def(ref, RefFlag, true);
8933    def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow);
8934    def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));
8935    return ref;
8936}
8937function triggerRef(ref) {
8938    if ( true && !ref.dep) {
8939        warn$2("received object is not a triggerable ref.");
8940    }
8941    if (true) {
8942        ref.dep &&
8943            ref.dep.notify({
8944                type: "set" /* TriggerOpTypes.SET */,
8945                target: ref,
8946                key: 'value'
8947            });
8948    }
8949    else {}
8950}
8951function unref(ref) {
8952    return isRef(ref) ? ref.value : ref;
8953}
8954function proxyRefs(objectWithRefs) {
8955    if (isReactive(objectWithRefs)) {
8956        return objectWithRefs;
8957    }
8958    var proxy = {};
8959    var keys = Object.keys(objectWithRefs);
8960    for (var i = 0; i < keys.length; i++) {
8961        proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);
8962    }
8963    return proxy;
8964}
8965function proxyWithRefUnwrap(target, source, key) {
8966    Object.defineProperty(target, key, {
8967        enumerable: true,
8968        configurable: true,
8969        get: function () {
8970            var val = source[key];
8971            if (isRef(val)) {
8972                return val.value;
8973            }
8974            else {
8975                var ob = val && val.__ob__;
8976                if (ob)
8977                    ob.dep.depend();
8978                return val;
8979            }
8980        },
8981        set: function (value) {
8982            var oldValue = source[key];
8983            if (isRef(oldValue) && !isRef(value)) {
8984                oldValue.value = value;
8985            }
8986            else {
8987                source[key] = value;
8988            }
8989        }
8990    });
8991}
8992function customRef(factory) {
8993    var dep = new Dep();
8994    var _a = factory(function () {
8995        if (true) {
8996            dep.depend({
8997                target: ref,
8998                type: "get" /* TrackOpTypes.GET */,
8999                key: 'value'
9000            });
9001        }
9002        else {}
9003    }, function () {
9004        if (true) {
9005            dep.notify({
9006                target: ref,
9007                type: "set" /* TriggerOpTypes.SET */,
9008                key: 'value'
9009            });
9010        }
9011        else {}
9012    }), get = _a.get, set = _a.set;
9013    var ref = {
9014        get value() {
9015            return get();
9016        },
9017        set value(newVal) {
9018            set(newVal);
9019        }
9020    };
9021    def(ref, RefFlag, true);
9022    return ref;
9023}
9024function toRefs(object) {
9025    if ( true && !isReactive(object)) {
9026        warn$2("toRefs() expects a reactive object but received a plain one.");
9027    }
9028    var ret = isArray(object) ? new Array(object.length) : {};
9029    for (var key in object) {
9030        ret[key] = toRef(object, key);
9031    }
9032    return ret;
9033}
9034function toRef(object, key, defaultValue) {
9035    var val = object[key];
9036    if (isRef(val)) {
9037        return val;
9038    }
9039    var ref = {
9040        get value() {
9041            var val = object[key];
9042            return val === undefined ? defaultValue : val;
9043        },
9044        set value(newVal) {
9045            object[key] = newVal;
9046        }
9047    };
9048    def(ref, RefFlag, true);
9049    return ref;
9050}
9051
9052var rawToReadonlyFlag = "__v_rawToReadonly";
9053var rawToShallowReadonlyFlag = "__v_rawToShallowReadonly";
9054function readonly(target) {
9055    return createReadonly(target, false);
9056}
9057function createReadonly(target, shallow) {
9058    if (!isPlainObject(target)) {
9059        if (true) {
9060            if (isArray(target)) {
9061                warn$2("Vue 2 does not support readonly arrays.");
9062            }
9063            else if (isCollectionType(target)) {
9064                warn$2("Vue 2 does not support readonly collection types such as Map or Set.");
9065            }
9066            else {
9067                warn$2("value cannot be made readonly: ".concat(typeof target));
9068            }
9069        }
9070        return target;
9071    }
9072    if ( true && !Object.isExtensible(target)) {
9073        warn$2("Vue 2 does not support creating readonly proxy for non-extensible object.");
9074    }
9075    // already a readonly object
9076    if (isReadonly(target)) {
9077        return target;
9078    }
9079    // already has a readonly proxy
9080    var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;
9081    var existingProxy = target[existingFlag];
9082    if (existingProxy) {
9083        return existingProxy;
9084    }
9085    var proxy = Object.create(Object.getPrototypeOf(target));
9086    def(target, existingFlag, proxy);
9087    def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true);
9088    def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target);
9089    if (isRef(target)) {
9090        def(proxy, RefFlag, true);
9091    }
9092    if (shallow || isShallow(target)) {
9093        def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
9094    }
9095    var keys = Object.keys(target);
9096    for (var i = 0; i < keys.length; i++) {
9097        defineReadonlyProperty(proxy, target, keys[i], shallow);
9098    }
9099    return proxy;
9100}
9101function defineReadonlyProperty(proxy, target, key, shallow) {
9102    Object.defineProperty(proxy, key, {
9103        enumerable: true,
9104        configurable: true,
9105        get: function () {
9106            var val = target[key];
9107            return shallow || !isPlainObject(val) ? val : readonly(val);
9108        },
9109        set: function () {
9110             true &&
9111                warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly."));
9112        }
9113    });
9114}
9115/**
9116 * Returns a reactive-copy of the original object, where only the root level
9117 * properties are readonly, and does NOT unwrap refs nor recursively convert
9118 * returned properties.
9119 * This is used for creating the props proxy object for stateful components.
9120 */
9121function shallowReadonly(target) {
9122    return createReadonly(target, true);
9123}
9124
9125function computed(getterOrOptions, debugOptions) {
9126    var getter;
9127    var setter;
9128    var onlyGetter = isFunction(getterOrOptions);
9129    if (onlyGetter) {
9130        getter = getterOrOptions;
9131        setter =  true
9132            ? function () {
9133                warn$2('Write operation failed: computed value is readonly');
9134            }
9135            : 0;
9136    }
9137    else {
9138        getter = getterOrOptions.get;
9139        setter = getterOrOptions.set;
9140    }
9141    var watcher = isServerRendering()
9142        ? null
9143        : new Watcher(currentInstance, getter, noop, { lazy: true });
9144    if ( true && watcher && debugOptions) {
9145        watcher.onTrack = debugOptions.onTrack;
9146        watcher.onTrigger = debugOptions.onTrigger;
9147    }
9148    var ref = {
9149        // some libs rely on the presence effect for checking computed refs
9150        // from normal refs, but the implementation doesn't matter
9151        effect: watcher,
9152        get value() {
9153            if (watcher) {
9154                if (watcher.dirty) {
9155                    watcher.evaluate();
9156                }
9157                if (Dep.target) {
9158                    if ( true && Dep.target.onTrack) {
9159                        Dep.target.onTrack({
9160                            effect: Dep.target,
9161                            target: ref,
9162                            type: "get" /* TrackOpTypes.GET */,
9163                            key: 'value'
9164                        });
9165                    }
9166                    watcher.depend();
9167                }
9168                return watcher.value;
9169            }
9170            else {
9171                return getter();
9172            }
9173        },
9174        set value(newVal) {
9175            setter(newVal);
9176        }
9177    };
9178    def(ref, RefFlag, true);
9179    def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter);
9180    return ref;
9181}
9182
9183var mark;
9184var measure;
9185if (true) {
9186    var perf_1 = inBrowser && window.performance;
9187    /* istanbul ignore if */
9188    if (perf_1 &&
9189        // @ts-ignore
9190        perf_1.mark &&
9191        // @ts-ignore
9192        perf_1.measure &&
9193        // @ts-ignore
9194        perf_1.clearMarks &&
9195        // @ts-ignore
9196        perf_1.clearMeasures) {
9197        mark = function (tag) { return perf_1.mark(tag); };
9198        measure = function (name, startTag, endTag) {
9199            perf_1.measure(name, startTag, endTag);
9200            perf_1.clearMarks(startTag);
9201            perf_1.clearMarks(endTag);
9202            // perf.clearMeasures(name)
9203        };
9204    }
9205}
9206
9207var normalizeEvent = cached(function (name) {
9208    var passive = name.charAt(0) === '&';
9209    name = passive ? name.slice(1) : name;
9210    var once = name.charAt(0) === '~'; // Prefixed last, checked first
9211    name = once ? name.slice(1) : name;
9212    var capture = name.charAt(0) === '!';
9213    name = capture ? name.slice(1) : name;
9214    return {
9215        name: name,
9216        once: once,
9217        capture: capture,
9218        passive: passive
9219    };
9220});
9221function createFnInvoker(fns, vm) {
9222    function invoker() {
9223        var fns = invoker.fns;
9224        if (isArray(fns)) {
9225            var cloned = fns.slice();
9226            for (var i = 0; i < cloned.length; i++) {
9227                invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler");
9228            }
9229        }
9230        else {
9231            // return handler return value for single handlers
9232            return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler");
9233        }
9234    }
9235    invoker.fns = fns;
9236    return invoker;
9237}
9238function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
9239    var name, cur, old, event;
9240    for (name in on) {
9241        cur = on[name];
9242        old = oldOn[name];
9243        event = normalizeEvent(name);
9244        if (isUndef(cur)) {
9245             true &&
9246                warn$2("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm);
9247        }
9248        else if (isUndef(old)) {
9249            if (isUndef(cur.fns)) {
9250                cur = on[name] = createFnInvoker(cur, vm);
9251            }
9252            if (isTrue(event.once)) {
9253                cur = on[name] = createOnceHandler(event.name, cur, event.capture);
9254            }
9255            add(event.name, cur, event.capture, event.passive, event.params);
9256        }
9257        else if (cur !== old) {
9258            old.fns = cur;
9259            on[name] = old;
9260        }
9261    }
9262    for (name in oldOn) {
9263        if (isUndef(on[name])) {
9264            event = normalizeEvent(name);
9265            remove(event.name, oldOn[name], event.capture);
9266        }
9267    }
9268}
9269
9270function mergeVNodeHook(def, hookKey, hook) {
9271    if (def instanceof VNode) {
9272        def = def.data.hook || (def.data.hook = {});
9273    }
9274    var invoker;
9275    var oldHook = def[hookKey];
9276    function wrappedHook() {
9277        hook.apply(this, arguments);
9278        // important: remove merged hook to ensure it's called only once
9279        // and prevent memory leak
9280        remove$2(invoker.fns, wrappedHook);
9281    }
9282    if (isUndef(oldHook)) {
9283        // no existing hook
9284        invoker = createFnInvoker([wrappedHook]);
9285    }
9286    else {
9287        /* istanbul ignore if */
9288        if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
9289            // already a merged invoker
9290            invoker = oldHook;
9291            invoker.fns.push(wrappedHook);
9292        }
9293        else {
9294            // existing plain hook
9295            invoker = createFnInvoker([oldHook, wrappedHook]);
9296        }
9297    }
9298    invoker.merged = true;
9299    def[hookKey] = invoker;
9300}
9301
9302function extractPropsFromVNodeData(data, Ctor, tag) {
9303    // we are only extracting raw values here.
9304    // validation and default values are handled in the child
9305    // component itself.
9306    var propOptions = Ctor.options.props;
9307    if (isUndef(propOptions)) {
9308        return;
9309    }
9310    var res = {};
9311    var attrs = data.attrs, props = data.props;
9312    if (isDef(attrs) || isDef(props)) {
9313        for (var key in propOptions) {
9314            var altKey = hyphenate(key);
9315            if (true) {
9316                var keyInLowerCase = key.toLowerCase();
9317                if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
9318                    tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") +
9319                        "".concat(formatComponentName(
9320                        // @ts-expect-error tag is string
9321                        tag || Ctor), ", but the declared prop name is") +
9322                        " \"".concat(key, "\". ") +
9323                        "Note that HTML attributes are case-insensitive and camelCased " +
9324                        "props need to use their kebab-case equivalents when using in-DOM " +
9325                        "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\"."));
9326                }
9327            }
9328            checkProp(res, props, key, altKey, true) ||
9329                checkProp(res, attrs, key, altKey, false);
9330        }
9331    }
9332    return res;
9333}
9334function checkProp(res, hash, key, altKey, preserve) {
9335    if (isDef(hash)) {
9336        if (hasOwn(hash, key)) {
9337            res[key] = hash[key];
9338            if (!preserve) {
9339                delete hash[key];
9340            }
9341            return true;
9342        }
9343        else if (hasOwn(hash, altKey)) {
9344            res[key] = hash[altKey];
9345            if (!preserve) {
9346                delete hash[altKey];
9347            }
9348            return true;
9349        }
9350    }
9351    return false;
9352}
9353
9354// The template compiler attempts to minimize the need for normalization by
9355// statically analyzing the template at compile time.
9356//
9357// For plain HTML markup, normalization can be completely skipped because the
9358// generated render function is guaranteed to return Array<VNode>. There are
9359// two cases where extra normalization is needed:
9360// 1. When the children contains components - because a functional component
9361// may return an Array instead of a single root. In this case, just a simple
9362// normalization is needed - if any child is an Array, we flatten the whole
9363// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
9364// because functional components already normalize their own children.
9365function simpleNormalizeChildren(children) {
9366    for (var i = 0; i < children.length; i++) {
9367        if (isArray(children[i])) {
9368            return Array.prototype.concat.apply([], children);
9369        }
9370    }
9371    return children;
9372}
9373// 2. When the children contains constructs that always generated nested Arrays,
9374// e.g. <template>, <slot>, v-for, or when the children is provided by user
9375// with hand-written render functions / JSX. In such cases a full normalization
9376// is needed to cater to all possible types of children values.
9377function normalizeChildren(children) {
9378    return isPrimitive(children)
9379        ? [createTextVNode(children)]
9380        : isArray(children)
9381            ? normalizeArrayChildren(children)
9382            : undefined;
9383}
9384function isTextNode(node) {
9385    return isDef(node) && isDef(node.text) && isFalse(node.isComment);
9386}
9387function normalizeArrayChildren(children, nestedIndex) {
9388    var res = [];
9389    var i, c, lastIndex, last;
9390    for (i = 0; i < children.length; i++) {
9391        c = children[i];
9392        if (isUndef(c) || typeof c === 'boolean')
9393            continue;
9394        lastIndex = res.length - 1;
9395        last = res[lastIndex];
9396        //  nested
9397        if (isArray(c)) {
9398            if (c.length > 0) {
9399                c = normalizeArrayChildren(c, "".concat(nestedIndex || '', "_").concat(i));
9400                // merge adjacent text nodes
9401                if (isTextNode(c[0]) && isTextNode(last)) {
9402                    res[lastIndex] = createTextVNode(last.text + c[0].text);
9403                    c.shift();
9404                }
9405                res.push.apply(res, c);
9406            }
9407        }
9408        else if (isPrimitive(c)) {
9409            if (isTextNode(last)) {
9410                // merge adjacent text nodes
9411                // this is necessary for SSR hydration because text nodes are
9412                // essentially merged when rendered to HTML strings
9413                res[lastIndex] = createTextVNode(last.text + c);
9414            }
9415            else if (c !== '') {
9416                // convert primitive to vnode
9417                res.push(createTextVNode(c));
9418            }
9419        }
9420        else {
9421            if (isTextNode(c) && isTextNode(last)) {
9422                // merge adjacent text nodes
9423                res[lastIndex] = createTextVNode(last.text + c.text);
9424            }
9425            else {
9426                // default key for nested array children (likely generated by v-for)
9427                if (isTrue(children._isVList) &&
9428                    isDef(c.tag) &&
9429                    isUndef(c.key) &&
9430                    isDef(nestedIndex)) {
9431                    c.key = "__vlist".concat(nestedIndex, "_").concat(i, "__");
9432                }
9433                res.push(c);
9434            }
9435        }
9436    }
9437    return res;
9438}
9439
9440var SIMPLE_NORMALIZE = 1;
9441var ALWAYS_NORMALIZE = 2;
9442// wrapper function for providing a more flexible interface
9443// without getting yelled at by flow
9444function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {
9445    if (isArray(data) || isPrimitive(data)) {
9446        normalizationType = children;
9447        children = data;
9448        data = undefined;
9449    }
9450    if (isTrue(alwaysNormalize)) {
9451        normalizationType = ALWAYS_NORMALIZE;
9452    }
9453    return _createElement(context, tag, data, children, normalizationType);
9454}
9455function _createElement(context, tag, data, children, normalizationType) {
9456    if (isDef(data) && isDef(data.__ob__)) {
9457         true &&
9458            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);
9459        return createEmptyVNode();
9460    }
9461    // object syntax in v-bind
9462    if (isDef(data) && isDef(data.is)) {
9463        tag = data.is;
9464    }
9465    if (!tag) {
9466        // in case of component :is set to falsy value
9467        return createEmptyVNode();
9468    }
9469    // warn against non-primitive key
9470    if ( true && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
9471        warn$2('Avoid using non-primitive value as key, ' +
9472            'use string/number value instead.', context);
9473    }
9474    // support single function children as default scoped slot
9475    if (isArray(children) && isFunction(children[0])) {
9476        data = data || {};
9477        data.scopedSlots = { default: children[0] };
9478        children.length = 0;
9479    }
9480    if (normalizationType === ALWAYS_NORMALIZE) {
9481        children = normalizeChildren(children);
9482    }
9483    else if (normalizationType === SIMPLE_NORMALIZE) {
9484        children = simpleNormalizeChildren(children);
9485    }
9486    var vnode, ns;
9487    if (typeof tag === 'string') {
9488        var Ctor = void 0;
9489        ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
9490        if (config.isReservedTag(tag)) {
9491            // platform built-in elements
9492            if ( true &&
9493                isDef(data) &&
9494                isDef(data.nativeOn) &&
9495                data.tag !== 'component') {
9496                warn$2("The .native modifier for v-on is only valid on components but it was used on <".concat(tag, ">."), context);
9497            }
9498            vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);
9499        }
9500        else if ((!data || !data.pre) &&
9501            isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {
9502            // component
9503            vnode = createComponent(Ctor, data, context, children, tag);
9504        }
9505        else {
9506            // unknown or unlisted namespaced elements
9507            // check at runtime because it may get assigned a namespace when its
9508            // parent normalizes children
9509            vnode = new VNode(tag, data, children, undefined, undefined, context);
9510        }
9511    }
9512    else {
9513        // direct component options / constructor
9514        vnode = createComponent(tag, data, context, children);
9515    }
9516    if (isArray(vnode)) {
9517        return vnode;
9518    }
9519    else if (isDef(vnode)) {
9520        if (isDef(ns))
9521            applyNS(vnode, ns);
9522        if (isDef(data))
9523            registerDeepBindings(data);
9524        return vnode;
9525    }
9526    else {
9527        return createEmptyVNode();
9528    }
9529}
9530function applyNS(vnode, ns, force) {
9531    vnode.ns = ns;
9532    if (vnode.tag === 'foreignObject') {
9533        // use default namespace inside foreignObject
9534        ns = undefined;
9535        force = true;
9536    }
9537    if (isDef(vnode.children)) {
9538        for (var i = 0, l = vnode.children.length; i < l; i++) {
9539            var child = vnode.children[i];
9540            if (isDef(child.tag) &&
9541                (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
9542                applyNS(child, ns, force);
9543            }
9544        }
9545    }
9546}
9547// ref #5318
9548// necessary to ensure parent re-render when deep bindings like :style and
9549// :class are used on slot nodes
9550function registerDeepBindings(data) {
9551    if (isObject(data.style)) {
9552        traverse(data.style);
9553    }
9554    if (isObject(data.class)) {
9555        traverse(data.class);
9556    }
9557}
9558
9559/**
9560 * Runtime helper for rendering v-for lists.
9561 */
9562function renderList(val, render) {
9563    var ret = null, i, l, keys, key;
9564    if (isArray(val) || typeof val === 'string') {
9565        ret = new Array(val.length);
9566        for (i = 0, l = val.length; i < l; i++) {
9567            ret[i] = render(val[i], i);
9568        }
9569    }
9570    else if (typeof val === 'number') {
9571        ret = new Array(val);
9572        for (i = 0; i < val; i++) {
9573            ret[i] = render(i + 1, i);
9574        }
9575    }
9576    else if (isObject(val)) {
9577        if (hasSymbol && val[Symbol.iterator]) {
9578            ret = [];
9579            var iterator = val[Symbol.iterator]();
9580            var result = iterator.next();
9581            while (!result.done) {
9582                ret.push(render(result.value, ret.length));
9583                result = iterator.next();
9584            }
9585        }
9586        else {
9587            keys = Object.keys(val);
9588            ret = new Array(keys.length);
9589            for (i = 0, l = keys.length; i < l; i++) {
9590                key = keys[i];
9591                ret[i] = render(val[key], key, i);
9592            }
9593        }
9594    }
9595    if (!isDef(ret)) {
9596        ret = [];
9597    }
9598    ret._isVList = true;
9599    return ret;
9600}
9601
9602/**
9603 * Runtime helper for rendering <slot>
9604 */
9605function renderSlot(name, fallbackRender, props, bindObject) {
9606    var scopedSlotFn = this.$scopedSlots[name];
9607    var nodes;
9608    if (scopedSlotFn) {
9609        // scoped slot
9610        props = props || {};
9611        if (bindObject) {
9612            if ( true && !isObject(bindObject)) {
9613                warn$2('slot v-bind without argument expects an Object', this);
9614            }
9615            props = extend(extend({}, bindObject), props);
9616        }
9617        nodes =
9618            scopedSlotFn(props) ||
9619                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
9620    }
9621    else {
9622        nodes =
9623            this.$slots[name] ||
9624                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
9625    }
9626    var target = props && props.slot;
9627    if (target) {
9628        return this.$createElement('template', { slot: target }, nodes);
9629    }
9630    else {
9631        return nodes;
9632    }
9633}
9634
9635/**
9636 * Runtime helper for resolving filters
9637 */
9638function resolveFilter(id) {
9639    return resolveAsset(this.$options, 'filters', id, true) || identity;
9640}
9641
9642function isKeyNotMatch(expect, actual) {
9643    if (isArray(expect)) {
9644        return expect.indexOf(actual) === -1;
9645    }
9646    else {
9647        return expect !== actual;
9648    }
9649}
9650/**
9651 * Runtime helper for checking keyCodes from config.
9652 * exposed as Vue.prototype._k
9653 * passing in eventKeyName as last argument separately for backwards compat
9654 */
9655function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
9656    var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
9657    if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
9658        return isKeyNotMatch(builtInKeyName, eventKeyName);
9659    }
9660    else if (mappedKeyCode) {
9661        return isKeyNotMatch(mappedKeyCode, eventKeyCode);
9662    }
9663    else if (eventKeyName) {
9664        return hyphenate(eventKeyName) !== key;
9665    }
9666    return eventKeyCode === undefined;
9667}
9668
9669/**
9670 * Runtime helper for merging v-bind="object" into a VNode's data.
9671 */
9672function bindObjectProps(data, tag, value, asProp, isSync) {
9673    if (value) {
9674        if (!isObject(value)) {
9675             true &&
9676                warn$2('v-bind without argument expects an Object or Array value', this);
9677        }
9678        else {
9679            if (isArray(value)) {
9680                value = toObject(value);
9681            }
9682            var hash = void 0;
9683            var _loop_1 = function (key) {
9684                if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
9685                    hash = data;
9686                }
9687                else {
9688                    var type = data.attrs && data.attrs.type;
9689                    hash =
9690                        asProp || config.mustUseProp(tag, type, key)
9691                            ? data.domProps || (data.domProps = {})
9692                            : data.attrs || (data.attrs = {});
9693                }
9694                var camelizedKey = camelize(key);
9695                var hyphenatedKey = hyphenate(key);
9696                if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
9697                    hash[key] = value[key];
9698                    if (isSync) {
9699                        var on = data.on || (data.on = {});
9700                        on["update:".concat(key)] = function ($event) {
9701                            value[key] = $event;
9702                        };
9703                    }
9704                }
9705            };
9706            for (var key in value) {
9707                _loop_1(key);
9708            }
9709        }
9710    }
9711    return data;
9712}
9713
9714/**
9715 * Runtime helper for rendering static trees.
9716 */
9717function renderStatic(index, isInFor) {
9718    var cached = this._staticTrees || (this._staticTrees = []);
9719    var tree = cached[index];
9720    // if has already-rendered static tree and not inside v-for,
9721    // we can reuse the same tree.
9722    if (tree && !isInFor) {
9723        return tree;
9724    }
9725    // otherwise, render a fresh tree.
9726    tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates
9727    );
9728    markStatic$1(tree, "__static__".concat(index), false);
9729    return tree;
9730}
9731/**
9732 * Runtime helper for v-once.
9733 * Effectively it means marking the node as static with a unique key.
9734 */
9735function markOnce(tree, index, key) {
9736    markStatic$1(tree, "__once__".concat(index).concat(key ? "_".concat(key) : ""), true);
9737    return tree;
9738}
9739function markStatic$1(tree, key, isOnce) {
9740    if (isArray(tree)) {
9741        for (var i = 0; i < tree.length; i++) {
9742            if (tree[i] && typeof tree[i] !== 'string') {
9743                markStaticNode(tree[i], "".concat(key, "_").concat(i), isOnce);
9744            }
9745        }
9746    }
9747    else {
9748        markStaticNode(tree, key, isOnce);
9749    }
9750}
9751function markStaticNode(node, key, isOnce) {
9752    node.isStatic = true;
9753    node.key = key;
9754    node.isOnce = isOnce;
9755}
9756
9757function bindObjectListeners(data, value) {
9758    if (value) {
9759        if (!isPlainObject(value)) {
9760             true && warn$2('v-on without argument expects an Object value', this);
9761        }
9762        else {
9763            var on = (data.on = data.on ? extend({}, data.on) : {});
9764            for (var key in value) {
9765                var existing = on[key];
9766                var ours = value[key];
9767                on[key] = existing ? [].concat(existing, ours) : ours;
9768            }
9769        }
9770    }
9771    return data;
9772}
9773
9774function resolveScopedSlots(fns, res, 
9775// the following are added in 2.6
9776hasDynamicKeys, contentHashKey) {
9777    res = res || { $stable: !hasDynamicKeys };
9778    for (var i = 0; i < fns.length; i++) {
9779        var slot = fns[i];
9780        if (isArray(slot)) {
9781            resolveScopedSlots(slot, res, hasDynamicKeys);
9782        }
9783        else if (slot) {
9784            // marker for reverse proxying v-slot without scope on this.$slots
9785            // @ts-expect-error
9786            if (slot.proxy) {
9787                // @ts-expect-error
9788                slot.fn.proxy = true;
9789            }
9790            res[slot.key] = slot.fn;
9791        }
9792    }
9793    if (contentHashKey) {
9794        res.$key = contentHashKey;
9795    }
9796    return res;
9797}
9798
9799// helper to process dynamic keys for dynamic arguments in v-bind and v-on.
9800function bindDynamicKeys(baseObj, values) {
9801    for (var i = 0; i < values.length; i += 2) {
9802        var key = values[i];
9803        if (typeof key === 'string' && key) {
9804            baseObj[values[i]] = values[i + 1];
9805        }
9806        else if ( true && key !== '' && key !== null) {
9807            // null is a special value for explicitly removing a binding
9808            warn$2("Invalid value for dynamic directive argument (expected string or null): ".concat(key), this);
9809        }
9810    }
9811    return baseObj;
9812}
9813// helper to dynamically append modifier runtime markers to event names.
9814// ensure only append when value is already string, otherwise it will be cast
9815// to string and cause the type check to miss.
9816function prependModifier(value, symbol) {
9817    return typeof value === 'string' ? symbol + value : value;
9818}
9819
9820function installRenderHelpers(target) {
9821    target._o = markOnce;
9822    target._n = toNumber;
9823    target._s = toString;
9824    target._l = renderList;
9825    target._t = renderSlot;
9826    target._q = looseEqual;
9827    target._i = looseIndexOf;
9828    target._m = renderStatic;
9829    target._f = resolveFilter;
9830    target._k = checkKeyCodes;
9831    target._b = bindObjectProps;
9832    target._v = createTextVNode;
9833    target._e = createEmptyVNode;
9834    target._u = resolveScopedSlots;
9835    target._g = bindObjectListeners;
9836    target._d = bindDynamicKeys;
9837    target._p = prependModifier;
9838}
9839
9840/**
9841 * Runtime helper for resolving raw children VNodes into a slot object.
9842 */
9843function resolveSlots(children, context) {
9844    if (!children || !children.length) {
9845        return {};
9846    }
9847    var slots = {};
9848    for (var i = 0, l = children.length; i < l; i++) {
9849        var child = children[i];
9850        var data = child.data;
9851        // remove slot attribute if the node is resolved as a Vue slot node
9852        if (data && data.attrs && data.attrs.slot) {
9853            delete data.attrs.slot;
9854        }
9855        // named slots should only be respected if the vnode was rendered in the
9856        // same context.
9857        if ((child.context === context || child.fnContext === context) &&
9858            data &&
9859            data.slot != null) {
9860            var name_1 = data.slot;
9861            var slot = slots[name_1] || (slots[name_1] = []);
9862            if (child.tag === 'template') {
9863                slot.push.apply(slot, child.children || []);
9864            }
9865            else {
9866                slot.push(child);
9867            }
9868        }
9869        else {
9870            (slots.default || (slots.default = [])).push(child);
9871        }
9872    }
9873    // ignore slots that contains only whitespace
9874    for (var name_2 in slots) {
9875        if (slots[name_2].every(isWhitespace)) {
9876            delete slots[name_2];
9877        }
9878    }
9879    return slots;
9880}
9881function isWhitespace(node) {
9882    return (node.isComment && !node.asyncFactory) || node.text === ' ';
9883}
9884
9885function isAsyncPlaceholder(node) {
9886    // @ts-expect-error not really boolean type
9887    return node.isComment && node.asyncFactory;
9888}
9889
9890function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {
9891    var res;
9892    var hasNormalSlots = Object.keys(normalSlots).length > 0;
9893    var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;
9894    var key = scopedSlots && scopedSlots.$key;
9895    if (!scopedSlots) {
9896        res = {};
9897    }
9898    else if (scopedSlots._normalized) {
9899        // fast path 1: child component re-render only, parent did not change
9900        return scopedSlots._normalized;
9901    }
9902    else if (isStable &&
9903        prevScopedSlots &&
9904        prevScopedSlots !== emptyObject &&
9905        key === prevScopedSlots.$key &&
9906        !hasNormalSlots &&
9907        !prevScopedSlots.$hasNormal) {
9908        // fast path 2: stable scoped slots w/ no normal slots to proxy,
9909        // only need to normalize once
9910        return prevScopedSlots;
9911    }
9912    else {
9913        res = {};
9914        for (var key_1 in scopedSlots) {
9915            if (scopedSlots[key_1] && key_1[0] !== '$') {
9916                res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]);
9917            }
9918        }
9919    }
9920    // expose normal slots on scopedSlots
9921    for (var key_2 in normalSlots) {
9922        if (!(key_2 in res)) {
9923            res[key_2] = proxyNormalSlot(normalSlots, key_2);
9924        }
9925    }
9926    // avoriaz seems to mock a non-extensible $scopedSlots object
9927    // and when that is passed down this would cause an error
9928    if (scopedSlots && Object.isExtensible(scopedSlots)) {
9929        scopedSlots._normalized = res;
9930    }
9931    def(res, '$stable', isStable);
9932    def(res, '$key', key);
9933    def(res, '$hasNormal', hasNormalSlots);
9934    return res;
9935}
9936function normalizeScopedSlot(vm, normalSlots, key, fn) {
9937    var normalized = function () {
9938        var cur = currentInstance;
9939        setCurrentInstance(vm);
9940        var res = arguments.length ? fn.apply(null, arguments) : fn({});
9941        res =
9942            res && typeof res === 'object' && !isArray(res)
9943                ? [res] // single vnode
9944                : normalizeChildren(res);
9945        var vnode = res && res[0];
9946        setCurrentInstance(cur);
9947        return res &&
9948            (!vnode ||
9949                (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391
9950            ? undefined
9951            : res;
9952    };
9953    // this is a slot using the new v-slot syntax without scope. although it is
9954    // compiled as a scoped slot, render fn users would expect it to be present
9955    // on this.$slots because the usage is semantically a normal slot.
9956    if (fn.proxy) {
9957        Object.defineProperty(normalSlots, key, {
9958            get: normalized,
9959            enumerable: true,
9960            configurable: true
9961        });
9962    }
9963    return normalized;
9964}
9965function proxyNormalSlot(slots, key) {
9966    return function () { return slots[key]; };
9967}
9968
9969function initSetup(vm) {
9970    var options = vm.$options;
9971    var setup = options.setup;
9972    if (setup) {
9973        var ctx = (vm._setupContext = createSetupContext(vm));
9974        setCurrentInstance(vm);
9975        pushTarget();
9976        var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, "setup");
9977        popTarget();
9978        setCurrentInstance();
9979        if (isFunction(setupResult)) {
9980            // render function
9981            // @ts-ignore
9982            options.render = setupResult;
9983        }
9984        else if (isObject(setupResult)) {
9985            // bindings
9986            if ( true && setupResult instanceof VNode) {
9987                warn$2("setup() should not return VNodes directly - " +
9988                    "return a render function instead.");
9989            }
9990            vm._setupState = setupResult;
9991            // __sfc indicates compiled bindings from <script setup>
9992            if (!setupResult.__sfc) {
9993                for (var key in setupResult) {
9994                    if (!isReserved(key)) {
9995                        proxyWithRefUnwrap(vm, setupResult, key);
9996                    }
9997                    else if (true) {
9998                        warn$2("Avoid using variables that start with _ or $ in setup().");
9999                    }
10000                }
10001            }
10002            else {
10003                // exposed for compiled render fn
10004                var proxy = (vm._setupProxy = {});
10005                for (var key in setupResult) {
10006                    if (key !== '__sfc') {
10007                        proxyWithRefUnwrap(proxy, setupResult, key);
10008                    }
10009                }
10010            }
10011        }
10012        else if ( true && setupResult !== undefined) {
10013            warn$2("setup() should return an object. Received: ".concat(setupResult === null ? 'null' : typeof setupResult));
10014        }
10015    }
10016}
10017function createSetupContext(vm) {
10018    var exposeCalled = false;
10019    return {
10020        get attrs() {
10021            if (!vm._attrsProxy) {
10022                var proxy = (vm._attrsProxy = {});
10023                def(proxy, '_v_attr_proxy', true);
10024                syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');
10025            }
10026            return vm._attrsProxy;
10027        },
10028        get listeners() {
10029            if (!vm._listenersProxy) {
10030                var proxy = (vm._listenersProxy = {});
10031                syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');
10032            }
10033            return vm._listenersProxy;
10034        },
10035        get slots() {
10036            return initSlotsProxy(vm);
10037        },
10038        emit: bind$1(vm.$emit, vm),
10039        expose: function (exposed) {
10040            if (true) {
10041                if (exposeCalled) {
10042                    warn$2("expose() should be called only once per setup().", vm);
10043                }
10044                exposeCalled = true;
10045            }
10046            if (exposed) {
10047                Object.keys(exposed).forEach(function (key) {
10048                    return proxyWithRefUnwrap(vm, exposed, key);
10049                });
10050            }
10051        }
10052    };
10053}
10054function syncSetupProxy(to, from, prev, instance, type) {
10055    var changed = false;
10056    for (var key in from) {
10057        if (!(key in to)) {
10058            changed = true;
10059            defineProxyAttr(to, key, instance, type);
10060        }
10061        else if (from[key] !== prev[key]) {
10062            changed = true;
10063        }
10064    }
10065    for (var key in to) {
10066        if (!(key in from)) {
10067            changed = true;
10068            delete to[key];
10069        }
10070    }
10071    return changed;
10072}
10073function defineProxyAttr(proxy, key, instance, type) {
10074    Object.defineProperty(proxy, key, {
10075        enumerable: true,
10076        configurable: true,
10077        get: function () {
10078            return instance[type][key];
10079        }
10080    });
10081}
10082function initSlotsProxy(vm) {
10083    if (!vm._slotsProxy) {
10084        syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots);
10085    }
10086    return vm._slotsProxy;
10087}
10088function syncSetupSlots(to, from) {
10089    for (var key in from) {
10090        to[key] = from[key];
10091    }
10092    for (var key in to) {
10093        if (!(key in from)) {
10094            delete to[key];
10095        }
10096    }
10097}
10098/**
10099 * @internal use manual type def because public setup context type relies on
10100 * legacy VNode types
10101 */
10102function useSlots() {
10103    return getContext().slots;
10104}
10105/**
10106 * @internal use manual type def because public setup context type relies on
10107 * legacy VNode types
10108 */
10109function useAttrs() {
10110    return getContext().attrs;
10111}
10112/**
10113 * Vue 2 only
10114 * @internal use manual type def because public setup context type relies on
10115 * legacy VNode types
10116 */
10117function useListeners() {
10118    return getContext().listeners;
10119}
10120function getContext() {
10121    if ( true && !currentInstance) {
10122        warn$2("useContext() called without active instance.");
10123    }
10124    var vm = currentInstance;
10125    return vm._setupContext || (vm._setupContext = createSetupContext(vm));
10126}
10127/**
10128 * Runtime helper for merging default declarations. Imported by compiled code
10129 * only.
10130 * @internal
10131 */
10132function mergeDefaults(raw, defaults) {
10133    var props = isArray(raw)
10134        ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {})
10135        : raw;
10136    for (var key in defaults) {
10137        var opt = props[key];
10138        if (opt) {
10139            if (isArray(opt) || isFunction(opt)) {
10140                props[key] = { type: opt, default: defaults[key] };
10141            }
10142            else {
10143                opt.default = defaults[key];
10144            }
10145        }
10146        else if (opt === null) {
10147            props[key] = { default: defaults[key] };
10148        }
10149        else if (true) {
10150            warn$2("props default key \"".concat(key, "\" has no corresponding declaration."));
10151        }
10152    }
10153    return props;
10154}
10155
10156function initRender(vm) {
10157    vm._vnode = null; // the root of the child tree
10158    vm._staticTrees = null; // v-once cached trees
10159    var options = vm.$options;
10160    var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree
10161    var renderContext = parentVnode && parentVnode.context;
10162    vm.$slots = resolveSlots(options._renderChildren, renderContext);
10163    vm.$scopedSlots = parentVnode
10164        ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots)
10165        : emptyObject;
10166    // bind the createElement fn to this instance
10167    // so that we get proper render context inside it.
10168    // args order: tag, data, children, normalizationType, alwaysNormalize
10169    // internal version is used by render functions compiled from templates
10170    // @ts-expect-error
10171    vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); };
10172    // normalization is always applied for the public version, used in
10173    // user-written render functions.
10174    // @ts-expect-error
10175    vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); };
10176    // $attrs & $listeners are exposed for easier HOC creation.
10177    // they need to be reactive so that HOCs using them are always updated
10178    var parentData = parentVnode && parentVnode.data;
10179    /* istanbul ignore else */
10180    if (true) {
10181        defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () {
10182            !isUpdatingChildComponent && warn$2("$attrs is readonly.", vm);
10183        }, true);
10184        defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {
10185            !isUpdatingChildComponent && warn$2("$listeners is readonly.", vm);
10186        }, true);
10187    }
10188    else {}
10189}
10190var currentRenderingInstance = null;
10191function renderMixin(Vue) {
10192    // install runtime convenience helpers
10193    installRenderHelpers(Vue.prototype);
10194    Vue.prototype.$nextTick = function (fn) {
10195        return nextTick(fn, this);
10196    };
10197    Vue.prototype._render = function () {
10198        var vm = this;
10199        var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode;
10200        if (_parentVnode && vm._isMounted) {
10201            vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);
10202            if (vm._slotsProxy) {
10203                syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);
10204            }
10205        }
10206        // set parent vnode. this allows render functions to have access
10207        // to the data on the placeholder node.
10208        vm.$vnode = _parentVnode;
10209        // render self
10210        var vnode;
10211        try {
10212            // There's no need to maintain a stack because all render fns are called
10213            // separately from one another. Nested component's render fns are called
10214            // when parent component is patched.
10215            setCurrentInstance(vm);
10216            currentRenderingInstance = vm;
10217            vnode = render.call(vm._renderProxy, vm.$createElement);
10218        }
10219        catch (e) {
10220            handleError(e, vm, "render");
10221            // return error render result,
10222            // or previous vnode to prevent render error causing blank component
10223            /* istanbul ignore else */
10224            if ( true && vm.$options.renderError) {
10225                try {
10226                    vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
10227                }
10228                catch (e) {
10229                    handleError(e, vm, "renderError");
10230                    vnode = vm._vnode;
10231                }
10232            }
10233            else {
10234                vnode = vm._vnode;
10235            }
10236        }
10237        finally {
10238            currentRenderingInstance = null;
10239            setCurrentInstance();
10240        }
10241        // if the returned array contains only a single node, allow it
10242        if (isArray(vnode) && vnode.length === 1) {
10243            vnode = vnode[0];
10244        }
10245        // return empty vnode in case the render function errored out
10246        if (!(vnode instanceof VNode)) {
10247            if ( true && isArray(vnode)) {
10248                warn$2('Multiple root nodes returned from render function. Render function ' +
10249                    'should return a single root node.', vm);
10250            }
10251            vnode = createEmptyVNode();
10252        }
10253        // set parent
10254        vnode.parent = _parentVnode;
10255        return vnode;
10256    };
10257}
10258
10259function ensureCtor(comp, base) {
10260    if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {
10261        comp = comp.default;
10262    }
10263    return isObject(comp) ? base.extend(comp) : comp;
10264}
10265function createAsyncPlaceholder(factory, data, context, children, tag) {
10266    var node = createEmptyVNode();
10267    node.asyncFactory = factory;
10268    node.asyncMeta = { data: data, context: context, children: children, tag: tag };
10269    return node;
10270}
10271function resolveAsyncComponent(factory, baseCtor) {
10272    if (isTrue(factory.error) && isDef(factory.errorComp)) {
10273        return factory.errorComp;
10274    }
10275    if (isDef(factory.resolved)) {
10276        return factory.resolved;
10277    }
10278    var owner = currentRenderingInstance;
10279    if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
10280        // already pending
10281        factory.owners.push(owner);
10282    }
10283    if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
10284        return factory.loadingComp;
10285    }
10286    if (owner && !isDef(factory.owners)) {
10287        var owners_1 = (factory.owners = [owner]);
10288        var sync_1 = true;
10289        var timerLoading_1 = null;
10290        var timerTimeout_1 = null;
10291        owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); });
10292        var forceRender_1 = function (renderCompleted) {
10293            for (var i = 0, l = owners_1.length; i < l; i++) {
10294                owners_1[i].$forceUpdate();
10295            }
10296            if (renderCompleted) {
10297                owners_1.length = 0;
10298                if (timerLoading_1 !== null) {
10299                    clearTimeout(timerLoading_1);
10300                    timerLoading_1 = null;
10301                }
10302                if (timerTimeout_1 !== null) {
10303                    clearTimeout(timerTimeout_1);
10304                    timerTimeout_1 = null;
10305                }
10306            }
10307        };
10308        var resolve = once(function (res) {
10309            // cache resolved
10310            factory.resolved = ensureCtor(res, baseCtor);
10311            // invoke callbacks only if this is not a synchronous resolve
10312            // (async resolves are shimmed as synchronous during SSR)
10313            if (!sync_1) {
10314                forceRender_1(true);
10315            }
10316            else {
10317                owners_1.length = 0;
10318            }
10319        });
10320        var reject_1 = once(function (reason) {
10321             true &&
10322                warn$2("Failed to resolve async component: ".concat(String(factory)) +
10323                    (reason ? "\nReason: ".concat(reason) : ''));
10324            if (isDef(factory.errorComp)) {
10325                factory.error = true;
10326                forceRender_1(true);
10327            }
10328        });
10329        var res_1 = factory(resolve, reject_1);
10330        if (isObject(res_1)) {
10331            if (isPromise(res_1)) {
10332                // () => Promise
10333                if (isUndef(factory.resolved)) {
10334                    res_1.then(resolve, reject_1);
10335                }
10336            }
10337            else if (isPromise(res_1.component)) {
10338                res_1.component.then(resolve, reject_1);
10339                if (isDef(res_1.error)) {
10340                    factory.errorComp = ensureCtor(res_1.error, baseCtor);
10341                }
10342                if (isDef(res_1.loading)) {
10343                    factory.loadingComp = ensureCtor(res_1.loading, baseCtor);
10344                    if (res_1.delay === 0) {
10345                        factory.loading = true;
10346                    }
10347                    else {
10348                        // @ts-expect-error NodeJS timeout type
10349                        timerLoading_1 = setTimeout(function () {
10350                            timerLoading_1 = null;
10351                            if (isUndef(factory.resolved) && isUndef(factory.error)) {
10352                                factory.loading = true;
10353                                forceRender_1(false);
10354                            }
10355                        }, res_1.delay || 200);
10356                    }
10357                }
10358                if (isDef(res_1.timeout)) {
10359                    // @ts-expect-error NodeJS timeout type
10360                    timerTimeout_1 = setTimeout(function () {
10361                        timerTimeout_1 = null;
10362                        if (isUndef(factory.resolved)) {
10363                            reject_1( true ? "timeout (".concat(res_1.timeout, "ms)") : 0);
10364                        }
10365                    }, res_1.timeout);
10366                }
10367            }
10368        }
10369        sync_1 = false;
10370        // return in case resolved synchronously
10371        return factory.loading ? factory.loadingComp : factory.resolved;
10372    }
10373}
10374
10375function getFirstComponentChild(children) {
10376    if (isArray(children)) {
10377        for (var i = 0; i < children.length; i++) {
10378            var c = children[i];
10379            if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
10380                return c;
10381            }
10382        }
10383    }
10384}
10385
10386function initEvents(vm) {
10387    vm._events = Object.create(null);
10388    vm._hasHookEvent = false;
10389    // init parent attached events
10390    var listeners = vm.$options._parentListeners;
10391    if (listeners) {
10392        updateComponentListeners(vm, listeners);
10393    }
10394}
10395var target$1;
10396function add$1(event, fn) {
10397    target$1.$on(event, fn);
10398}
10399function remove$1(event, fn) {
10400    target$1.$off(event, fn);
10401}
10402function createOnceHandler$1(event, fn) {
10403    var _target = target$1;
10404    return function onceHandler() {
10405        var res = fn.apply(null, arguments);
10406        if (res !== null) {
10407            _target.$off(event, onceHandler);
10408        }
10409    };
10410}
10411function updateComponentListeners(vm, listeners, oldListeners) {
10412    target$1 = vm;
10413    updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);
10414    target$1 = undefined;
10415}
10416function eventsMixin(Vue) {
10417    var hookRE = /^hook:/;
10418    Vue.prototype.$on = function (event, fn) {
10419        var vm = this;
10420        if (isArray(event)) {
10421            for (var i = 0, l = event.length; i < l; i++) {
10422                vm.$on(event[i], fn);
10423            }
10424        }
10425        else {
10426            (vm._events[event] || (vm._events[event] = [])).push(fn);
10427            // optimize hook:event cost by using a boolean flag marked at registration
10428            // instead of a hash lookup
10429            if (hookRE.test(event)) {
10430                vm._hasHookEvent = true;
10431            }
10432        }
10433        return vm;
10434    };
10435    Vue.prototype.$once = function (event, fn) {
10436        var vm = this;
10437        function on() {
10438            vm.$off(event, on);
10439            fn.apply(vm, arguments);
10440        }
10441        on.fn = fn;
10442        vm.$on(event, on);
10443        return vm;
10444    };
10445    Vue.prototype.$off = function (event, fn) {
10446        var vm = this;
10447        // all
10448        if (!arguments.length) {
10449            vm._events = Object.create(null);
10450            return vm;
10451        }
10452        // array of events
10453        if (isArray(event)) {
10454            for (var i_1 = 0, l = event.length; i_1 < l; i_1++) {
10455                vm.$off(event[i_1], fn);
10456            }
10457            return vm;
10458        }
10459        // specific event
10460        var cbs = vm._events[event];
10461        if (!cbs) {
10462            return vm;
10463        }
10464        if (!fn) {
10465            vm._events[event] = null;
10466            return vm;
10467        }
10468        // specific handler
10469        var cb;
10470        var i = cbs.length;
10471        while (i--) {
10472            cb = cbs[i];
10473            if (cb === fn || cb.fn === fn) {
10474                cbs.splice(i, 1);
10475                break;
10476            }
10477        }
10478        return vm;
10479    };
10480    Vue.prototype.$emit = function (event) {
10481        var vm = this;
10482        if (true) {
10483            var lowerCaseEvent = event.toLowerCase();
10484            if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
10485                tip("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") +
10486                    "".concat(formatComponentName(vm), " but the handler is registered for \"").concat(event, "\". ") +
10487                    "Note that HTML attributes are case-insensitive and you cannot use " +
10488                    "v-on to listen to camelCase events when using in-DOM templates. " +
10489                    "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\"."));
10490            }
10491        }
10492        var cbs = vm._events[event];
10493        if (cbs) {
10494            cbs = cbs.length > 1 ? toArray(cbs) : cbs;
10495            var args = toArray(arguments, 1);
10496            var info = "event handler for \"".concat(event, "\"");
10497            for (var i = 0, l = cbs.length; i < l; i++) {
10498                invokeWithErrorHandling(cbs[i], vm, args, vm, info);
10499            }
10500        }
10501        return vm;
10502    };
10503}
10504
10505var activeInstance = null;
10506var isUpdatingChildComponent = false;
10507function setActiveInstance(vm) {
10508    var prevActiveInstance = activeInstance;
10509    activeInstance = vm;
10510    return function () {
10511        activeInstance = prevActiveInstance;
10512    };
10513}
10514function initLifecycle(vm) {
10515    var options = vm.$options;
10516    // locate first non-abstract parent
10517    var parent = options.parent;
10518    if (parent && !options.abstract) {
10519        while (parent.$options.abstract && parent.$parent) {
10520            parent = parent.$parent;
10521        }
10522        parent.$children.push(vm);
10523    }
10524    vm.$parent = parent;
10525    vm.$root = parent ? parent.$root : vm;
10526    vm.$children = [];
10527    vm.$refs = {};
10528    vm._provided = parent ? parent._provided : Object.create(null);
10529    vm._watcher = null;
10530    vm._inactive = null;
10531    vm._directInactive = false;
10532    vm._isMounted = false;
10533    vm._isDestroyed = false;
10534    vm._isBeingDestroyed = false;
10535}
10536function lifecycleMixin(Vue) {
10537    Vue.prototype._update = function (vnode, hydrating) {
10538        var vm = this;
10539        var prevEl = vm.$el;
10540        var prevVnode = vm._vnode;
10541        var restoreActiveInstance = setActiveInstance(vm);
10542        vm._vnode = vnode;
10543        // Vue.prototype.__patch__ is injected in entry points
10544        // based on the rendering backend used.
10545        if (!prevVnode) {
10546            // initial render
10547            vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
10548        }
10549        else {
10550            // updates
10551            vm.$el = vm.__patch__(prevVnode, vnode);
10552        }
10553        restoreActiveInstance();
10554        // update __vue__ reference
10555        if (prevEl) {
10556            prevEl.__vue__ = null;
10557        }
10558        if (vm.$el) {
10559            vm.$el.__vue__ = vm;
10560        }
10561        // if parent is an HOC, update its $el as well
10562        var wrapper = vm;
10563        while (wrapper &&
10564            wrapper.$vnode &&
10565            wrapper.$parent &&
10566            wrapper.$vnode === wrapper.$parent._vnode) {
10567            wrapper.$parent.$el = wrapper.$el;
10568            wrapper = wrapper.$parent;
10569        }
10570        // updated hook is called by the scheduler to ensure that children are
10571        // updated in a parent's updated hook.
10572    };
10573    Vue.prototype.$forceUpdate = function () {
10574        var vm = this;
10575        if (vm._watcher) {
10576            vm._watcher.update();
10577        }
10578    };
10579    Vue.prototype.$destroy = function () {
10580        var vm = this;
10581        if (vm._isBeingDestroyed) {
10582            return;
10583        }
10584        callHook$1(vm, 'beforeDestroy');
10585        vm._isBeingDestroyed = true;
10586        // remove self from parent
10587        var parent = vm.$parent;
10588        if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
10589            remove$2(parent.$children, vm);
10590        }
10591        // teardown scope. this includes both the render watcher and other
10592        // watchers created
10593        vm._scope.stop();
10594        // remove reference from data ob
10595        // frozen object may not have observer.
10596        if (vm._data.__ob__) {
10597            vm._data.__ob__.vmCount--;
10598        }
10599        // call the last hook...
10600        vm._isDestroyed = true;
10601        // invoke destroy hooks on current rendered tree
10602        vm.__patch__(vm._vnode, null);
10603        // fire destroyed hook
10604        callHook$1(vm, 'destroyed');
10605        // turn off all instance listeners.
10606        vm.$off();
10607        // remove __vue__ reference
10608        if (vm.$el) {
10609            vm.$el.__vue__ = null;
10610        }
10611        // release circular reference (#6759)
10612        if (vm.$vnode) {
10613            vm.$vnode.parent = null;
10614        }
10615    };
10616}
10617function mountComponent(vm, el, hydrating) {
10618    vm.$el = el;
10619    if (!vm.$options.render) {
10620        // @ts-expect-error invalid type
10621        vm.$options.render = createEmptyVNode;
10622        if (true) {
10623            /* istanbul ignore if */
10624            if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
10625                vm.$options.el ||
10626                el) {
10627                warn$2('You are using the runtime-only build of Vue where the template ' +
10628                    'compiler is not available. Either pre-compile the templates into ' +
10629                    'render functions, or use the compiler-included build.', vm);
10630            }
10631            else {
10632                warn$2('Failed to mount component: template or render function not defined.', vm);
10633            }
10634        }
10635    }
10636    callHook$1(vm, 'beforeMount');
10637    var updateComponent;
10638    /* istanbul ignore if */
10639    if ( true && config.performance && mark) {
10640        updateComponent = function () {
10641            var name = vm._name;
10642            var id = vm._uid;
10643            var startTag = "vue-perf-start:".concat(id);
10644            var endTag = "vue-perf-end:".concat(id);
10645            mark(startTag);
10646            var vnode = vm._render();
10647            mark(endTag);
10648            measure("vue ".concat(name, " render"), startTag, endTag);
10649            mark(startTag);
10650            vm._update(vnode, hydrating);
10651            mark(endTag);
10652            measure("vue ".concat(name, " patch"), startTag, endTag);
10653        };
10654    }
10655    else {
10656        updateComponent = function () {
10657            vm._update(vm._render(), hydrating);
10658        };
10659    }
10660    var watcherOptions = {
10661        before: function () {
10662            if (vm._isMounted && !vm._isDestroyed) {
10663                callHook$1(vm, 'beforeUpdate');
10664            }
10665        }
10666    };
10667    if (true) {
10668        watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); };
10669        watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); };
10670    }
10671    // we set this to vm._watcher inside the watcher's constructor
10672    // since the watcher's initial patch may call $forceUpdate (e.g. inside child
10673    // component's mounted hook), which relies on vm._watcher being already defined
10674    new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);
10675    hydrating = false;
10676    // flush buffer for flush: "pre" watchers queued in setup()
10677    var preWatchers = vm._preWatchers;
10678    if (preWatchers) {
10679        for (var i = 0; i < preWatchers.length; i++) {
10680            preWatchers[i].run();
10681        }
10682    }
10683    // manually mounted instance, call mounted on self
10684    // mounted is called for render-created child components in its inserted hook
10685    if (vm.$vnode == null) {
10686        vm._isMounted = true;
10687        callHook$1(vm, 'mounted');
10688    }
10689    return vm;
10690}
10691function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
10692    if (true) {
10693        isUpdatingChildComponent = true;
10694    }
10695    // determine whether component has slot children
10696    // we need to do this before overwriting $options._renderChildren.
10697    // check if there are dynamic scopedSlots (hand-written or compiled but with
10698    // dynamic slot names). Static scoped slots compiled from template has the
10699    // "$stable" marker.
10700    var newScopedSlots = parentVnode.data.scopedSlots;
10701    var oldScopedSlots = vm.$scopedSlots;
10702    var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||
10703        (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
10704        (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
10705        (!newScopedSlots && vm.$scopedSlots.$key));
10706    // Any static slot children from the parent may have changed during parent's
10707    // update. Dynamic scoped slots may also have changed. In such cases, a forced
10708    // update is necessary to ensure correctness.
10709    var needsForceUpdate = !!(renderChildren || // has new static slots
10710        vm.$options._renderChildren || // has old static slots
10711        hasDynamicScopedSlot);
10712    var prevVNode = vm.$vnode;
10713    vm.$options._parentVnode = parentVnode;
10714    vm.$vnode = parentVnode; // update vm's placeholder node without re-render
10715    if (vm._vnode) {
10716        // update child tree's parent
10717        vm._vnode.parent = parentVnode;
10718    }
10719    vm.$options._renderChildren = renderChildren;
10720    // update $attrs and $listeners hash
10721    // these are also reactive so they may trigger child update if the child
10722    // used them during render
10723    var attrs = parentVnode.data.attrs || emptyObject;
10724    if (vm._attrsProxy) {
10725        // force update if attrs are accessed and has changed since it may be
10726        // passed to a child component.
10727        if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {
10728            needsForceUpdate = true;
10729        }
10730    }
10731    vm.$attrs = attrs;
10732    // update listeners
10733    listeners = listeners || emptyObject;
10734    var prevListeners = vm.$options._parentListeners;
10735    if (vm._listenersProxy) {
10736        syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');
10737    }
10738    vm.$listeners = vm.$options._parentListeners = listeners;
10739    updateComponentListeners(vm, listeners, prevListeners);
10740    // update props
10741    if (propsData && vm.$options.props) {
10742        toggleObserving(false);
10743        var props = vm._props;
10744        var propKeys = vm.$options._propKeys || [];
10745        for (var i = 0; i < propKeys.length; i++) {
10746            var key = propKeys[i];
10747            var propOptions = vm.$options.props; // wtf flow?
10748            props[key] = validateProp(key, propOptions, propsData, vm);
10749        }
10750        toggleObserving(true);
10751        // keep a copy of raw propsData
10752        vm.$options.propsData = propsData;
10753    }
10754    // resolve slots + force update if has children
10755    if (needsForceUpdate) {
10756        vm.$slots = resolveSlots(renderChildren, parentVnode.context);
10757        vm.$forceUpdate();
10758    }
10759    if (true) {
10760        isUpdatingChildComponent = false;
10761    }
10762}
10763function isInInactiveTree(vm) {
10764    while (vm && (vm = vm.$parent)) {
10765        if (vm._inactive)
10766            return true;
10767    }
10768    return false;
10769}
10770function activateChildComponent(vm, direct) {
10771    if (direct) {
10772        vm._directInactive = false;
10773        if (isInInactiveTree(vm)) {
10774            return;
10775        }
10776    }
10777    else if (vm._directInactive) {
10778        return;
10779    }
10780    if (vm._inactive || vm._inactive === null) {
10781        vm._inactive = false;
10782        for (var i = 0; i < vm.$children.length; i++) {
10783            activateChildComponent(vm.$children[i]);
10784        }
10785        callHook$1(vm, 'activated');
10786    }
10787}
10788function deactivateChildComponent(vm, direct) {
10789    if (direct) {
10790        vm._directInactive = true;
10791        if (isInInactiveTree(vm)) {
10792            return;
10793        }
10794    }
10795    if (!vm._inactive) {
10796        vm._inactive = true;
10797        for (var i = 0; i < vm.$children.length; i++) {
10798            deactivateChildComponent(vm.$children[i]);
10799        }
10800        callHook$1(vm, 'deactivated');
10801    }
10802}
10803function callHook$1(vm, hook, args, setContext) {
10804    if (setContext === void 0) { setContext = true; }
10805    // #7573 disable dep collection when invoking lifecycle hooks
10806    pushTarget();
10807    var prev = currentInstance;
10808    setContext && setCurrentInstance(vm);
10809    var handlers = vm.$options[hook];
10810    var info = "".concat(hook, " hook");
10811    if (handlers) {
10812        for (var i = 0, j = handlers.length; i < j; i++) {
10813            invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);
10814        }
10815    }
10816    if (vm._hasHookEvent) {
10817        vm.$emit('hook:' + hook);
10818    }
10819    setContext && setCurrentInstance(prev);
10820    popTarget();
10821}
10822
10823var MAX_UPDATE_COUNT = 100;
10824var queue = [];
10825var activatedChildren = [];
10826var has = {};
10827var circular = {};
10828var waiting = false;
10829var flushing = false;
10830var index$1 = 0;
10831/**
10832 * Reset the scheduler's state.
10833 */
10834function resetSchedulerState() {
10835    index$1 = queue.length = activatedChildren.length = 0;
10836    has = {};
10837    if (true) {
10838        circular = {};
10839    }
10840    waiting = flushing = false;
10841}
10842// Async edge case #6566 requires saving the timestamp when event listeners are
10843// attached. However, calling performance.now() has a perf overhead especially
10844// if the page has thousands of event listeners. Instead, we take a timestamp
10845// every time the scheduler flushes and use that for all event listeners
10846// attached during that flush.
10847var currentFlushTimestamp = 0;
10848// Async edge case fix requires storing an event listener's attach timestamp.
10849var getNow = Date.now;
10850// Determine what event timestamp the browser is using. Annoyingly, the
10851// timestamp can either be hi-res (relative to page load) or low-res
10852// (relative to UNIX epoch), so in order to compare time we have to use the
10853// same timestamp type when saving the flush timestamp.
10854// All IE versions use low-res event timestamps, and have problematic clock
10855// implementations (#9632)
10856if (inBrowser && !isIE) {
10857    var performance_1 = window.performance;
10858    if (performance_1 &&
10859        typeof performance_1.now === 'function' &&
10860        getNow() > document.createEvent('Event').timeStamp) {
10861        // if the event timestamp, although evaluated AFTER the Date.now(), is
10862        // smaller than it, it means the event is using a hi-res timestamp,
10863        // and we need to use the hi-res version for event listener timestamps as
10864        // well.
10865        getNow = function () { return performance_1.now(); };
10866    }
10867}
10868var sortCompareFn = function (a, b) {
10869    if (a.post) {
10870        if (!b.post)
10871            return 1;
10872    }
10873    else if (b.post) {
10874        return -1;
10875    }
10876    return a.id - b.id;
10877};
10878/**
10879 * Flush both queues and run the watchers.
10880 */
10881function flushSchedulerQueue() {
10882    currentFlushTimestamp = getNow();
10883    flushing = true;
10884    var watcher, id;
10885    // Sort queue before flush.
10886    // This ensures that:
10887    // 1. Components are updated from parent to child. (because parent is always
10888    //    created before the child)
10889    // 2. A component's user watchers are run before its render watcher (because
10890    //    user watchers are created before the render watcher)
10891    // 3. If a component is destroyed during a parent component's watcher run,
10892    //    its watchers can be skipped.
10893    queue.sort(sortCompareFn);
10894    // do not cache length because more watchers might be pushed
10895    // as we run existing watchers
10896    for (index$1 = 0; index$1 < queue.length; index$1++) {
10897        watcher = queue[index$1];
10898        if (watcher.before) {
10899            watcher.before();
10900        }
10901        id = watcher.id;
10902        has[id] = null;
10903        watcher.run();
10904        // in dev build, check and stop circular updates.
10905        if ( true && has[id] != null) {
10906            circular[id] = (circular[id] || 0) + 1;
10907            if (circular[id] > MAX_UPDATE_COUNT) {
10908                warn$2('You may have an infinite update loop ' +
10909                    (watcher.user
10910                        ? "in watcher with expression \"".concat(watcher.expression, "\"")
10911                        : "in a component render function."), watcher.vm);
10912                break;
10913            }
10914        }
10915    }
10916    // keep copies of post queues before resetting state
10917    var activatedQueue = activatedChildren.slice();
10918    var updatedQueue = queue.slice();
10919    resetSchedulerState();
10920    // call component updated and activated hooks
10921    callActivatedHooks(activatedQueue);
10922    callUpdatedHooks(updatedQueue);
10923    cleanupDeps();
10924    // devtool hook
10925    /* istanbul ignore if */
10926    if (devtools && config.devtools) {
10927        devtools.emit('flush');
10928    }
10929}
10930function callUpdatedHooks(queue) {
10931    var i = queue.length;
10932    while (i--) {
10933        var watcher = queue[i];
10934        var vm = watcher.vm;
10935        if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
10936            callHook$1(vm, 'updated');
10937        }
10938    }
10939}
10940/**
10941 * Queue a kept-alive component that was activated during patch.
10942 * The queue will be processed after the entire tree has been patched.
10943 */
10944function queueActivatedComponent(vm) {
10945    // setting _inactive to false here so that a render function can
10946    // rely on checking whether it's in an inactive tree (e.g. router-view)
10947    vm._inactive = false;
10948    activatedChildren.push(vm);
10949}
10950function callActivatedHooks(queue) {
10951    for (var i = 0; i < queue.length; i++) {
10952        queue[i]._inactive = true;
10953        activateChildComponent(queue[i], true /* true */);
10954    }
10955}
10956/**
10957 * Push a watcher into the watcher queue.
10958 * Jobs with duplicate IDs will be skipped unless it's
10959 * pushed when the queue is being flushed.
10960 */
10961function queueWatcher(watcher) {
10962    var id = watcher.id;
10963    if (has[id] != null) {
10964        return;
10965    }
10966    if (watcher === Dep.target && watcher.noRecurse) {
10967        return;
10968    }
10969    has[id] = true;
10970    if (!flushing) {
10971        queue.push(watcher);
10972    }
10973    else {
10974        // if already flushing, splice the watcher based on its id
10975        // if already past its id, it will be run next immediately.
10976        var i = queue.length - 1;
10977        while (i > index$1 && queue[i].id > watcher.id) {
10978            i--;
10979        }
10980        queue.splice(i + 1, 0, watcher);
10981    }
10982    // queue the flush
10983    if (!waiting) {
10984        waiting = true;
10985        if ( true && !config.async) {
10986            flushSchedulerQueue();
10987            return;
10988        }
10989        nextTick(flushSchedulerQueue);
10990    }
10991}
10992
10993var WATCHER = "watcher";
10994var WATCHER_CB = "".concat(WATCHER, " callback");
10995var WATCHER_GETTER = "".concat(WATCHER, " getter");
10996var WATCHER_CLEANUP = "".concat(WATCHER, " cleanup");
10997// Simple effect.
10998function watchEffect(effect, options) {
10999    return doWatch(effect, null, options);
11000}
11001function watchPostEffect(effect, options) {
11002    return doWatch(effect, null, ( true
11003        ? __assign(__assign({}, options), { flush: 'post' }) : 0));
11004}
11005function watchSyncEffect(effect, options) {
11006    return doWatch(effect, null, ( true
11007        ? __assign(__assign({}, options), { flush: 'sync' }) : 0));
11008}
11009// initial value for watchers to trigger on undefined initial values
11010var INITIAL_WATCHER_VALUE = {};
11011// implementation
11012function watch(source, cb, options) {
11013    if ( true && typeof cb !== 'function') {
11014        warn$2("`watch(fn, options?)` signature has been moved to a separate API. " +
11015            "Use `watchEffect(fn, options?)` instead. `watch` now only " +
11016            "supports `watch(source, cb, options?) signature.");
11017    }
11018    return doWatch(source, cb, options);
11019}
11020function doWatch(source, cb, _a) {
11021    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;
11022    if ( true && !cb) {
11023        if (immediate !== undefined) {
11024            warn$2("watch() \"immediate\" option is only respected when using the " +
11025                "watch(source, callback, options?) signature.");
11026        }
11027        if (deep !== undefined) {
11028            warn$2("watch() \"deep\" option is only respected when using the " +
11029                "watch(source, callback, options?) signature.");
11030        }
11031    }
11032    var warnInvalidSource = function (s) {
11033        warn$2("Invalid watch source: ".concat(s, ". A watch source can only be a getter/effect ") +
11034            "function, a ref, a reactive object, or an array of these types.");
11035    };
11036    var instance = currentInstance;
11037    var call = function (fn, type, args) {
11038        if (args === void 0) { args = null; }
11039        return invokeWithErrorHandling(fn, null, args, instance, type);
11040    };
11041    var getter;
11042    var forceTrigger = false;
11043    var isMultiSource = false;
11044    if (isRef(source)) {
11045        getter = function () { return source.value; };
11046        forceTrigger = isShallow(source);
11047    }
11048    else if (isReactive(source)) {
11049        getter = function () {
11050            source.__ob__.dep.depend();
11051            return source;
11052        };
11053        deep = true;
11054    }
11055    else if (isArray(source)) {
11056        isMultiSource = true;
11057        forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); });
11058        getter = function () {
11059            return source.map(function (s) {
11060                if (isRef(s)) {
11061                    return s.value;
11062                }
11063                else if (isReactive(s)) {
11064                    return traverse(s);
11065                }
11066                else if (isFunction(s)) {
11067                    return call(s, WATCHER_GETTER);
11068                }
11069                else {
11070                     true && warnInvalidSource(s);
11071                }
11072            });
11073        };
11074    }
11075    else if (isFunction(source)) {
11076        if (cb) {
11077            // getter with cb
11078            getter = function () { return call(source, WATCHER_GETTER); };
11079        }
11080        else {
11081            // no cb -> simple effect
11082            getter = function () {
11083                if (instance && instance._isDestroyed) {
11084                    return;
11085                }
11086                if (cleanup) {
11087                    cleanup();
11088                }
11089                return call(source, WATCHER, [onCleanup]);
11090            };
11091        }
11092    }
11093    else {
11094        getter = noop;
11095         true && warnInvalidSource(source);
11096    }
11097    if (cb && deep) {
11098        var baseGetter_1 = getter;
11099        getter = function () { return traverse(baseGetter_1()); };
11100    }
11101    var cleanup;
11102    var onCleanup = function (fn) {
11103        cleanup = watcher.onStop = function () {
11104            call(fn, WATCHER_CLEANUP);
11105        };
11106    };
11107    // in SSR there is no need to setup an actual effect, and it should be noop
11108    // unless it's eager
11109    if (isServerRendering()) {
11110        // we will also not call the invalidate callback (+ runner is not set up)
11111        onCleanup = noop;
11112        if (!cb) {
11113            getter();
11114        }
11115        else if (immediate) {
11116            call(cb, WATCHER_CB, [
11117                getter(),
11118                isMultiSource ? [] : undefined,
11119                onCleanup
11120            ]);
11121        }
11122        return noop;
11123    }
11124    var watcher = new Watcher(currentInstance, getter, noop, {
11125        lazy: true
11126    });
11127    watcher.noRecurse = !cb;
11128    var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
11129    // overwrite default run
11130    watcher.run = function () {
11131        if (!watcher.active) {
11132            return;
11133        }
11134        if (cb) {
11135            // watch(source, cb)
11136            var newValue = watcher.get();
11137            if (deep ||
11138                forceTrigger ||
11139                (isMultiSource
11140                    ? newValue.some(function (v, i) {
11141                        return hasChanged(v, oldValue[i]);
11142                    })
11143                    : hasChanged(newValue, oldValue))) {
11144                // cleanup before running cb again
11145                if (cleanup) {
11146                    cleanup();
11147                }
11148                call(cb, WATCHER_CB, [
11149                    newValue,
11150                    // pass undefined as the old value when it's changed for the first time
11151                    oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,
11152                    onCleanup
11153                ]);
11154                oldValue = newValue;
11155            }
11156        }
11157        else {
11158            // watchEffect
11159            watcher.get();
11160        }
11161    };
11162    if (flush === 'sync') {
11163        watcher.update = watcher.run;
11164    }
11165    else if (flush === 'post') {
11166        watcher.post = true;
11167        watcher.update = function () { return queueWatcher(watcher); };
11168    }
11169    else {
11170        // pre
11171        watcher.update = function () {
11172            if (instance && instance === currentInstance && !instance._isMounted) {
11173                // pre-watcher triggered before
11174                var buffer = instance._preWatchers || (instance._preWatchers = []);
11175                if (buffer.indexOf(watcher) < 0)
11176                    buffer.push(watcher);
11177            }
11178            else {
11179                queueWatcher(watcher);
11180            }
11181        };
11182    }
11183    if (true) {
11184        watcher.onTrack = onTrack;
11185        watcher.onTrigger = onTrigger;
11186    }
11187    // initial run
11188    if (cb) {
11189        if (immediate) {
11190            watcher.run();
11191        }
11192        else {
11193            oldValue = watcher.get();
11194        }
11195    }
11196    else if (flush === 'post' && instance) {
11197        instance.$once('hook:mounted', function () { return watcher.get(); });
11198    }
11199    else {
11200        watcher.get();
11201    }
11202    return function () {
11203        watcher.teardown();
11204    };
11205}
11206
11207var activeEffectScope;
11208var EffectScope = /** @class */ (function () {
11209    function EffectScope(detached) {
11210        if (detached === void 0) { detached = false; }
11211        this.detached = detached;
11212        /**
11213         * @internal
11214         */
11215        this.active = true;
11216        /**
11217         * @internal
11218         */
11219        this.effects = [];
11220        /**
11221         * @internal
11222         */
11223        this.cleanups = [];
11224        this.parent = activeEffectScope;
11225        if (!detached && activeEffectScope) {
11226            this.index =
11227                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
11228        }
11229    }
11230    EffectScope.prototype.run = function (fn) {
11231        if (this.active) {
11232            var currentEffectScope = activeEffectScope;
11233            try {
11234                activeEffectScope = this;
11235                return fn();
11236            }
11237            finally {
11238                activeEffectScope = currentEffectScope;
11239            }
11240        }
11241        else if (true) {
11242            warn$2("cannot run an inactive effect scope.");
11243        }
11244    };
11245    /**
11246     * This should only be called on non-detached scopes
11247     * @internal
11248     */
11249    EffectScope.prototype.on = function () {
11250        activeEffectScope = this;
11251    };
11252    /**
11253     * This should only be called on non-detached scopes
11254     * @internal
11255     */
11256    EffectScope.prototype.off = function () {
11257        activeEffectScope = this.parent;
11258    };
11259    EffectScope.prototype.stop = function (fromParent) {
11260        if (this.active) {
11261            var i = void 0, l = void 0;
11262            for (i = 0, l = this.effects.length; i < l; i++) {
11263                this.effects[i].teardown();
11264            }
11265            for (i = 0, l = this.cleanups.length; i < l; i++) {
11266                this.cleanups[i]();
11267            }
11268            if (this.scopes) {
11269                for (i = 0, l = this.scopes.length; i < l; i++) {
11270                    this.scopes[i].stop(true);
11271                }
11272            }
11273            // nested scope, dereference from parent to avoid memory leaks
11274            if (!this.detached && this.parent && !fromParent) {
11275                // optimized O(1) removal
11276                var last = this.parent.scopes.pop();
11277                if (last && last !== this) {
11278                    this.parent.scopes[this.index] = last;
11279                    last.index = this.index;
11280                }
11281            }
11282            this.parent = undefined;
11283            this.active = false;
11284        }
11285    };
11286    return EffectScope;
11287}());
11288function effectScope(detached) {
11289    return new EffectScope(detached);
11290}
11291/**
11292 * @internal
11293 */
11294function recordEffectScope(effect, scope) {
11295    if (scope === void 0) { scope = activeEffectScope; }
11296    if (scope && scope.active) {
11297        scope.effects.push(effect);
11298    }
11299}
11300function getCurrentScope() {
11301    return activeEffectScope;
11302}
11303function onScopeDispose(fn) {
11304    if (activeEffectScope) {
11305        activeEffectScope.cleanups.push(fn);
11306    }
11307    else if (true) {
11308        warn$2("onScopeDispose() is called when there is no active effect scope" +
11309            " to be associated with.");
11310    }
11311}
11312
11313function provide(key, value) {
11314    if (!currentInstance) {
11315        if (true) {
11316            warn$2("provide() can only be used inside setup().");
11317        }
11318    }
11319    else {
11320        // TS doesn't allow symbol as index type
11321        resolveProvided(currentInstance)[key] = value;
11322    }
11323}
11324function resolveProvided(vm) {
11325    // by default an instance inherits its parent's provides object
11326    // but when it needs to provide values of its own, it creates its
11327    // own provides object using parent provides object as prototype.
11328    // this way in `inject` we can simply look up injections from direct
11329    // parent and let the prototype chain do the work.
11330    var existing = vm._provided;
11331    var parentProvides = vm.$parent && vm.$parent._provided;
11332    if (parentProvides === existing) {
11333        return (vm._provided = Object.create(parentProvides));
11334    }
11335    else {
11336        return existing;
11337    }
11338}
11339function inject(key, defaultValue, treatDefaultAsFactory) {
11340    if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }
11341    // fallback to `currentRenderingInstance` so that this can be called in
11342    // a functional component
11343    var instance = currentInstance;
11344    if (instance) {
11345        // #2400
11346        // to support `app.use` plugins,
11347        // fallback to appContext's `provides` if the instance is at root
11348        var provides = instance.$parent && instance.$parent._provided;
11349        if (provides && key in provides) {
11350            // TS doesn't allow symbol as index type
11351            return provides[key];
11352        }
11353        else if (arguments.length > 1) {
11354            return treatDefaultAsFactory && isFunction(defaultValue)
11355                ? defaultValue.call(instance)
11356                : defaultValue;
11357        }
11358        else if (true) {
11359            warn$2("injection \"".concat(String(key), "\" not found."));
11360        }
11361    }
11362    else if (true) {
11363        warn$2("inject() can only be used inside setup() or functional components.");
11364    }
11365}
11366
11367/**
11368 * @internal this function needs manual public type declaration because it relies
11369 * on previously manually authored types from Vue 2
11370 */
11371function h(type, props, children) {
11372    if (!currentInstance) {
11373         true &&
11374            warn$2("globally imported h() can only be invoked when there is an active " +
11375                "component instance, e.g. synchronously in a component's render or setup function.");
11376    }
11377    return createElement$1(currentInstance, type, props, children, 2, true);
11378}
11379
11380function handleError(err, vm, info) {
11381    // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
11382    // See: https://github.com/vuejs/vuex/issues/1505
11383    pushTarget();
11384    try {
11385        if (vm) {
11386            var cur = vm;
11387            while ((cur = cur.$parent)) {
11388                var hooks = cur.$options.errorCaptured;
11389                if (hooks) {
11390                    for (var i = 0; i < hooks.length; i++) {
11391                        try {
11392                            var capture = hooks[i].call(cur, err, vm, info) === false;
11393                            if (capture)
11394                                return;
11395                        }
11396                        catch (e) {
11397                            globalHandleError(e, cur, 'errorCaptured hook');
11398                        }
11399                    }
11400                }
11401            }
11402        }
11403        globalHandleError(err, vm, info);
11404    }
11405    finally {
11406        popTarget();
11407    }
11408}
11409function invokeWithErrorHandling(handler, context, args, vm, info) {
11410    var res;
11411    try {
11412        res = args ? handler.apply(context, args) : handler.call(context);
11413        if (res && !res._isVue && isPromise(res) && !res._handled) {
11414            res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
11415            res._handled = true;
11416        }
11417    }
11418    catch (e) {
11419        handleError(e, vm, info);
11420    }
11421    return res;
11422}
11423function globalHandleError(err, vm, info) {
11424    if (config.errorHandler) {
11425        try {
11426            return config.errorHandler.call(null, err, vm, info);
11427        }
11428        catch (e) {
11429            // if the user intentionally throws the original error in the handler,
11430            // do not log it twice
11431            if (e !== err) {
11432                logError(e, null, 'config.errorHandler');
11433            }
11434        }
11435    }
11436    logError(err, vm, info);
11437}
11438function logError(err, vm, info) {
11439    if (true) {
11440        warn$2("Error in ".concat(info, ": \"").concat(err.toString(), "\""), vm);
11441    }
11442    /* istanbul ignore else */
11443    if (inBrowser && typeof console !== 'undefined') {
11444        console.error(err);
11445    }
11446    else {
11447        throw err;
11448    }
11449}
11450
11451/* globals MutationObserver */
11452var isUsingMicroTask = false;
11453var callbacks = [];
11454var pending = false;
11455function flushCallbacks() {
11456    pending = false;
11457    var copies = callbacks.slice(0);
11458    callbacks.length = 0;
11459    for (var i = 0; i < copies.length; i++) {
11460        copies[i]();
11461    }
11462}
11463// Here we have async deferring wrappers using microtasks.
11464// In 2.5 we used (macro) tasks (in combination with microtasks).
11465// However, it has subtle problems when state is changed right before repaint
11466// (e.g. #6813, out-in transitions).
11467// Also, using (macro) tasks in event handler would cause some weird behaviors
11468// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
11469// So we now use microtasks everywhere, again.
11470// A major drawback of this tradeoff is that there are some scenarios
11471// where microtasks have too high a priority and fire in between supposedly
11472// sequential events (e.g. #4521, #6690, which have workarounds)
11473// or even between bubbling of the same event (#6566).
11474var timerFunc;
11475// The nextTick behavior leverages the microtask queue, which can be accessed
11476// via either native Promise.then or MutationObserver.
11477// MutationObserver has wider support, however it is seriously bugged in
11478// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
11479// completely stops working after triggering a few times... so, if native
11480// Promise is available, we will use it:
11481/* istanbul ignore next, $flow-disable-line */
11482if (typeof Promise !== 'undefined' && isNative(Promise)) {
11483    var p_1 = Promise.resolve();
11484    timerFunc = function () {
11485        p_1.then(flushCallbacks);
11486        // In problematic UIWebViews, Promise.then doesn't completely break, but
11487        // it can get stuck in a weird state where callbacks are pushed into the
11488        // microtask queue but the queue isn't being flushed, until the browser
11489        // needs to do some other work, e.g. handle a timer. Therefore we can
11490        // "force" the microtask queue to be flushed by adding an empty timer.
11491        if (isIOS)
11492            setTimeout(noop);
11493    };
11494    isUsingMicroTask = true;
11495}
11496else if (!isIE &&
11497    typeof MutationObserver !== 'undefined' &&
11498    (isNative(MutationObserver) ||
11499        // PhantomJS and iOS 7.x
11500        MutationObserver.toString() === '[object MutationObserverConstructor]')) {
11501    // Use MutationObserver where native Promise is not available,
11502    // e.g. PhantomJS, iOS7, Android 4.4
11503    // (#6466 MutationObserver is unreliable in IE11)
11504    var counter_1 = 1;
11505    var observer = new MutationObserver(flushCallbacks);
11506    var textNode_1 = document.createTextNode(String(counter_1));
11507    observer.observe(textNode_1, {
11508        characterData: true
11509    });
11510    timerFunc = function () {
11511        counter_1 = (counter_1 + 1) % 2;
11512        textNode_1.data = String(counter_1);
11513    };
11514    isUsingMicroTask = true;
11515}
11516else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
11517    // Fallback to setImmediate.
11518    // Technically it leverages the (macro) task queue,
11519    // but it is still a better choice than setTimeout.
11520    timerFunc = function () {
11521        setImmediate(flushCallbacks);
11522    };
11523}
11524else {
11525    // Fallback to setTimeout.
11526    timerFunc = function () {
11527        setTimeout(flushCallbacks, 0);
11528    };
11529}
11530/**
11531 * @internal
11532 */
11533function nextTick(cb, ctx) {
11534    var _resolve;
11535    callbacks.push(function () {
11536        if (cb) {
11537            try {
11538                cb.call(ctx);
11539            }
11540            catch (e) {
11541                handleError(e, ctx, 'nextTick');
11542            }
11543        }
11544        else if (_resolve) {
11545            _resolve(ctx);
11546        }
11547    });
11548    if (!pending) {
11549        pending = true;
11550        timerFunc();
11551    }
11552    // $flow-disable-line
11553    if (!cb && typeof Promise !== 'undefined') {
11554        return new Promise(function (resolve) {
11555            _resolve = resolve;
11556        });
11557    }
11558}
11559
11560function useCssModule(name) {
11561    if (name === void 0) { name = '$style'; }
11562    /* istanbul ignore else */
11563    {
11564        if (!currentInstance) {
11565             true && warn$2("useCssModule must be called inside setup()");
11566            return emptyObject;
11567        }
11568        var mod = currentInstance[name];
11569        if (!mod) {
11570             true &&
11571                warn$2("Current instance does not have CSS module named \"".concat(name, "\"."));
11572            return emptyObject;
11573        }
11574        return mod;
11575    }
11576}
11577
11578/**
11579 * Runtime helper for SFC's CSS variable injection feature.
11580 * @private
11581 */
11582function useCssVars(getter) {
11583    if (!inBrowser && !false)
11584        return;
11585    var instance = currentInstance;
11586    if (!instance) {
11587         true &&
11588            warn$2("useCssVars is called without current active component instance.");
11589        return;
11590    }
11591    watchPostEffect(function () {
11592        var el = instance.$el;
11593        var vars = getter(instance, instance._setupProxy);
11594        if (el && el.nodeType === 1) {
11595            var style = el.style;
11596            for (var key in vars) {
11597                style.setProperty("--".concat(key), vars[key]);
11598            }
11599        }
11600    });
11601}
11602
11603/**
11604 * v3-compatible async component API.
11605 * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts
11606 * because it relies on existing manual types
11607 */
11608function defineAsyncComponent(source) {
11609    if (isFunction(source)) {
11610        source = { loader: source };
11611    }
11612    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
11613    _b = source.suspensible, // undefined = never times out
11614    suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true
11615    userOnError = source.onError;
11616    if ( true && suspensible) {
11617        warn$2("The suspensiblbe option for async components is not supported in Vue2. It is ignored.");
11618    }
11619    var pendingRequest = null;
11620    var retries = 0;
11621    var retry = function () {
11622        retries++;
11623        pendingRequest = null;
11624        return load();
11625    };
11626    var load = function () {
11627        var thisRequest;
11628        return (pendingRequest ||
11629            (thisRequest = pendingRequest =
11630                loader()
11631                    .catch(function (err) {
11632                    err = err instanceof Error ? err : new Error(String(err));
11633                    if (userOnError) {
11634                        return new Promise(function (resolve, reject) {
11635                            var userRetry = function () { return resolve(retry()); };
11636                            var userFail = function () { return reject(err); };
11637                            userOnError(err, userRetry, userFail, retries + 1);
11638                        });
11639                    }
11640                    else {
11641                        throw err;
11642                    }
11643                })
11644                    .then(function (comp) {
11645                    if (thisRequest !== pendingRequest && pendingRequest) {
11646                        return pendingRequest;
11647                    }
11648                    if ( true && !comp) {
11649                        warn$2("Async component loader resolved to undefined. " +
11650                            "If you are using retry(), make sure to return its return value.");
11651                    }
11652                    // interop module default
11653                    if (comp &&
11654                        (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {
11655                        comp = comp.default;
11656                    }
11657                    if ( true && comp && !isObject(comp) && !isFunction(comp)) {
11658                        throw new Error("Invalid async component load result: ".concat(comp));
11659                    }
11660                    return comp;
11661                })));
11662    };
11663    return function () {
11664        var component = load();
11665        return {
11666            component: component,
11667            delay: delay,
11668            timeout: timeout,
11669            error: errorComponent,
11670            loading: loadingComponent
11671        };
11672    };
11673}
11674
11675function createLifeCycle(hookName) {
11676    return function (fn, target) {
11677        if (target === void 0) { target = currentInstance; }
11678        if (!target) {
11679             true &&
11680                warn$2("".concat(formatName(hookName), " is called when there is no active component instance to be ") +
11681                    "associated with. " +
11682                    "Lifecycle injection APIs can only be used during execution of setup().");
11683            return;
11684        }
11685        return injectHook(target, hookName, fn);
11686    };
11687}
11688function formatName(name) {
11689    if (name === 'beforeDestroy') {
11690        name = 'beforeUnmount';
11691    }
11692    else if (name === 'destroyed') {
11693        name = 'unmounted';
11694    }
11695    return "on".concat(name[0].toUpperCase() + name.slice(1));
11696}
11697function injectHook(instance, hookName, fn) {
11698    var options = instance.$options;
11699    options[hookName] = mergeLifecycleHook(options[hookName], fn);
11700}
11701var onBeforeMount = createLifeCycle('beforeMount');
11702var onMounted = createLifeCycle('mounted');
11703var onBeforeUpdate = createLifeCycle('beforeUpdate');
11704var onUpdated = createLifeCycle('updated');
11705var onBeforeUnmount = createLifeCycle('beforeDestroy');
11706var onUnmounted = createLifeCycle('destroyed');
11707var onActivated = createLifeCycle('activated');
11708var onDeactivated = createLifeCycle('deactivated');
11709var onServerPrefetch = createLifeCycle('serverPrefetch');
11710var onRenderTracked = createLifeCycle('renderTracked');
11711var onRenderTriggered = createLifeCycle('renderTriggered');
11712var injectErrorCapturedHook = createLifeCycle('errorCaptured');
11713function onErrorCaptured(hook, target) {
11714    if (target === void 0) { target = currentInstance; }
11715    injectErrorCapturedHook(hook, target);
11716}
11717
11718/**
11719 * Note: also update dist/vue.runtime.mjs when adding new exports to this file.
11720 */
11721var version = '2.7.14';
11722/**
11723 * @internal type is manually declared in <root>/types/v3-define-component.d.ts
11724 */
11725function defineComponent(options) {
11726    return options;
11727}
11728
11729var seenObjects = new _Set();
11730/**
11731 * Recursively traverse an object to evoke all converted
11732 * getters, so that every nested property inside the object
11733 * is collected as a "deep" dependency.
11734 */
11735function traverse(val) {
11736    _traverse(val, seenObjects);
11737    seenObjects.clear();
11738    return val;
11739}
11740function _traverse(val, seen) {
11741    var i, keys;
11742    var isA = isArray(val);
11743    if ((!isA && !isObject(val)) ||
11744        val.__v_skip /* ReactiveFlags.SKIP */ ||
11745        Object.isFrozen(val) ||
11746        val instanceof VNode) {
11747        return;
11748    }
11749    if (val.__ob__) {
11750        var depId = val.__ob__.dep.id;
11751        if (seen.has(depId)) {
11752            return;
11753        }
11754        seen.add(depId);
11755    }
11756    if (isA) {
11757        i = val.length;
11758        while (i--)
11759            _traverse(val[i], seen);
11760    }
11761    else if (isRef(val)) {
11762        _traverse(val.value, seen);
11763    }
11764    else {
11765        keys = Object.keys(val);
11766        i = keys.length;
11767        while (i--)
11768            _traverse(val[keys[i]], seen);
11769    }
11770}
11771
11772var uid$1 = 0;
11773/**
11774 * A watcher parses an expression, collects dependencies,
11775 * and fires callback when the expression value changes.
11776 * This is used for both the $watch() api and directives.
11777 * @internal
11778 */
11779var Watcher = /** @class */ (function () {
11780    function Watcher(vm, expOrFn, cb, options, isRenderWatcher) {
11781        recordEffectScope(this, 
11782        // if the active effect scope is manually created (not a component scope),
11783        // prioritize it
11784        activeEffectScope && !activeEffectScope._vm
11785            ? activeEffectScope
11786            : vm
11787                ? vm._scope
11788                : undefined);
11789        if ((this.vm = vm) && isRenderWatcher) {
11790            vm._watcher = this;
11791        }
11792        // options
11793        if (options) {
11794            this.deep = !!options.deep;
11795            this.user = !!options.user;
11796            this.lazy = !!options.lazy;
11797            this.sync = !!options.sync;
11798            this.before = options.before;
11799            if (true) {
11800                this.onTrack = options.onTrack;
11801                this.onTrigger = options.onTrigger;
11802            }
11803        }
11804        else {
11805            this.deep = this.user = this.lazy = this.sync = false;
11806        }
11807        this.cb = cb;
11808        this.id = ++uid$1; // uid for batching
11809        this.active = true;
11810        this.post = false;
11811        this.dirty = this.lazy; // for lazy watchers
11812        this.deps = [];
11813        this.newDeps = [];
11814        this.depIds = new _Set();
11815        this.newDepIds = new _Set();
11816        this.expression =  true ? expOrFn.toString() : 0;
11817        // parse expression for getter
11818        if (isFunction(expOrFn)) {
11819            this.getter = expOrFn;
11820        }
11821        else {
11822            this.getter = parsePath(expOrFn);
11823            if (!this.getter) {
11824                this.getter = noop;
11825                 true &&
11826                    warn$2("Failed watching path: \"".concat(expOrFn, "\" ") +
11827                        'Watcher only accepts simple dot-delimited paths. ' +
11828                        'For full control, use a function instead.', vm);
11829            }
11830        }
11831        this.value = this.lazy ? undefined : this.get();
11832    }
11833    /**
11834     * Evaluate the getter, and re-collect dependencies.
11835     */
11836    Watcher.prototype.get = function () {
11837        pushTarget(this);
11838        var value;
11839        var vm = this.vm;
11840        try {
11841            value = this.getter.call(vm, vm);
11842        }
11843        catch (e) {
11844            if (this.user) {
11845                handleError(e, vm, "getter for watcher \"".concat(this.expression, "\""));
11846            }
11847            else {
11848                throw e;
11849            }
11850        }
11851        finally {
11852            // "touch" every property so they are all tracked as
11853            // dependencies for deep watching
11854            if (this.deep) {
11855                traverse(value);
11856            }
11857            popTarget();
11858            this.cleanupDeps();
11859        }
11860        return value;
11861    };
11862    /**
11863     * Add a dependency to this directive.
11864     */
11865    Watcher.prototype.addDep = function (dep) {
11866        var id = dep.id;
11867        if (!this.newDepIds.has(id)) {
11868            this.newDepIds.add(id);
11869            this.newDeps.push(dep);
11870            if (!this.depIds.has(id)) {
11871                dep.addSub(this);
11872            }
11873        }
11874    };
11875    /**
11876     * Clean up for dependency collection.
11877     */
11878    Watcher.prototype.cleanupDeps = function () {
11879        var i = this.deps.length;
11880        while (i--) {
11881            var dep = this.deps[i];
11882            if (!this.newDepIds.has(dep.id)) {
11883                dep.removeSub(this);
11884            }
11885        }
11886        var tmp = this.depIds;
11887        this.depIds = this.newDepIds;
11888        this.newDepIds = tmp;
11889        this.newDepIds.clear();
11890        tmp = this.deps;
11891        this.deps = this.newDeps;
11892        this.newDeps = tmp;
11893        this.newDeps.length = 0;
11894    };
11895    /**
11896     * Subscriber interface.
11897     * Will be called when a dependency changes.
11898     */
11899    Watcher.prototype.update = function () {
11900        /* istanbul ignore else */
11901        if (this.lazy) {
11902            this.dirty = true;
11903        }
11904        else if (this.sync) {
11905            this.run();
11906        }
11907        else {
11908            queueWatcher(this);
11909        }
11910    };
11911    /**
11912     * Scheduler job interface.
11913     * Will be called by the scheduler.
11914     */
11915    Watcher.prototype.run = function () {
11916        if (this.active) {
11917            var value = this.get();
11918            if (value !== this.value ||
11919                // Deep watchers and watchers on Object/Arrays should fire even
11920                // when the value is the same, because the value may
11921                // have mutated.
11922                isObject(value) ||
11923                this.deep) {
11924                // set new value
11925                var oldValue = this.value;
11926                this.value = value;
11927                if (this.user) {
11928                    var info = "callback for watcher \"".concat(this.expression, "\"");
11929                    invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);
11930                }
11931                else {
11932                    this.cb.call(this.vm, value, oldValue);
11933                }
11934            }
11935        }
11936    };
11937    /**
11938     * Evaluate the value of the watcher.
11939     * This only gets called for lazy watchers.
11940     */
11941    Watcher.prototype.evaluate = function () {
11942        this.value = this.get();
11943        this.dirty = false;
11944    };
11945    /**
11946     * Depend on all deps collected by this watcher.
11947     */
11948    Watcher.prototype.depend = function () {
11949        var i = this.deps.length;
11950        while (i--) {
11951            this.deps[i].depend();
11952        }
11953    };
11954    /**
11955     * Remove self from all dependencies' subscriber list.
11956     */
11957    Watcher.prototype.teardown = function () {
11958        if (this.vm && !this.vm._isBeingDestroyed) {
11959            remove$2(this.vm._scope.effects, this);
11960        }
11961        if (this.active) {
11962            var i = this.deps.length;
11963            while (i--) {
11964                this.deps[i].removeSub(this);
11965            }
11966            this.active = false;
11967            if (this.onStop) {
11968                this.onStop();
11969            }
11970        }
11971    };
11972    return Watcher;
11973}());
11974
11975var sharedPropertyDefinition = {
11976    enumerable: true,
11977    configurable: true,
11978    get: noop,
11979    set: noop
11980};
11981function proxy(target, sourceKey, key) {
11982    sharedPropertyDefinition.get = function proxyGetter() {
11983        return this[sourceKey][key];
11984    };
11985    sharedPropertyDefinition.set = function proxySetter(val) {
11986        this[sourceKey][key] = val;
11987    };
11988    Object.defineProperty(target, key, sharedPropertyDefinition);
11989}
11990function initState(vm) {
11991    var opts = vm.$options;
11992    if (opts.props)
11993        initProps$1(vm, opts.props);
11994    // Composition API
11995    initSetup(vm);
11996    if (opts.methods)
11997        initMethods(vm, opts.methods);
11998    if (opts.data) {
11999        initData(vm);
12000    }
12001    else {
12002        var ob = observe((vm._data = {}));
12003        ob && ob.vmCount++;
12004    }
12005    if (opts.computed)
12006        initComputed$1(vm, opts.computed);
12007    if (opts.watch && opts.watch !== nativeWatch) {
12008        initWatch(vm, opts.watch);
12009    }
12010}
12011function initProps$1(vm, propsOptions) {
12012    var propsData = vm.$options.propsData || {};
12013    var props = (vm._props = shallowReactive({}));
12014    // cache prop keys so that future props updates can iterate using Array
12015    // instead of dynamic object key enumeration.
12016    var keys = (vm.$options._propKeys = []);
12017    var isRoot = !vm.$parent;
12018    // root instance props should be converted
12019    if (!isRoot) {
12020        toggleObserving(false);
12021    }
12022    var _loop_1 = function (key) {
12023        keys.push(key);
12024        var value = validateProp(key, propsOptions, propsData, vm);
12025        /* istanbul ignore else */
12026        if (true) {
12027            var hyphenatedKey = hyphenate(key);
12028            if (isReservedAttribute(hyphenatedKey) ||
12029                config.isReservedAttr(hyphenatedKey)) {
12030                warn$2("\"".concat(hyphenatedKey, "\" is a reserved attribute and cannot be used as component prop."), vm);
12031            }
12032            defineReactive(props, key, value, function () {
12033                if (!isRoot && !isUpdatingChildComponent) {
12034                    warn$2("Avoid mutating a prop directly since the value will be " +
12035                        "overwritten whenever the parent component re-renders. " +
12036                        "Instead, use a data or computed property based on the prop's " +
12037                        "value. Prop being mutated: \"".concat(key, "\""), vm);
12038                }
12039            });
12040        }
12041        else {}
12042        // static props are already proxied on the component's prototype
12043        // during Vue.extend(). We only need to proxy props defined at
12044        // instantiation here.
12045        if (!(key in vm)) {
12046            proxy(vm, "_props", key);
12047        }
12048    };
12049    for (var key in propsOptions) {
12050        _loop_1(key);
12051    }
12052    toggleObserving(true);
12053}
12054function initData(vm) {
12055    var data = vm.$options.data;
12056    data = vm._data = isFunction(data) ? getData(data, vm) : data || {};
12057    if (!isPlainObject(data)) {
12058        data = {};
12059         true &&
12060            warn$2('data functions should return an object:\n' +
12061                'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);
12062    }
12063    // proxy data on instance
12064    var keys = Object.keys(data);
12065    var props = vm.$options.props;
12066    var methods = vm.$options.methods;
12067    var i = keys.length;
12068    while (i--) {
12069        var key = keys[i];
12070        if (true) {
12071            if (methods && hasOwn(methods, key)) {
12072                warn$2("Method \"".concat(key, "\" has already been defined as a data property."), vm);
12073            }
12074        }
12075        if (props && hasOwn(props, key)) {
12076             true &&
12077                warn$2("The data property \"".concat(key, "\" is already declared as a prop. ") +
12078                    "Use prop default value instead.", vm);
12079        }
12080        else if (!isReserved(key)) {
12081            proxy(vm, "_data", key);
12082        }
12083    }
12084    // observe data
12085    var ob = observe(data);
12086    ob && ob.vmCount++;
12087}
12088function getData(data, vm) {
12089    // #7573 disable dep collection when invoking data getters
12090    pushTarget();
12091    try {
12092        return data.call(vm, vm);
12093    }
12094    catch (e) {
12095        handleError(e, vm, "data()");
12096        return {};
12097    }
12098    finally {
12099        popTarget();
12100    }
12101}
12102var computedWatcherOptions = { lazy: true };
12103function initComputed$1(vm, computed) {
12104    // $flow-disable-line
12105    var watchers = (vm._computedWatchers = Object.create(null));
12106    // computed properties are just getters during SSR
12107    var isSSR = isServerRendering();
12108    for (var key in computed) {
12109        var userDef = computed[key];
12110        var getter = isFunction(userDef) ? userDef : userDef.get;
12111        if ( true && getter == null) {
12112            warn$2("Getter is missing for computed property \"".concat(key, "\"."), vm);
12113        }
12114        if (!isSSR) {
12115            // create internal watcher for the computed property.
12116            watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);
12117        }
12118        // component-defined computed properties are already defined on the
12119        // component prototype. We only need to define computed properties defined
12120        // at instantiation here.
12121        if (!(key in vm)) {
12122            defineComputed(vm, key, userDef);
12123        }
12124        else if (true) {
12125            if (key in vm.$data) {
12126                warn$2("The computed property \"".concat(key, "\" is already defined in data."), vm);
12127            }
12128            else if (vm.$options.props && key in vm.$options.props) {
12129                warn$2("The computed property \"".concat(key, "\" is already defined as a prop."), vm);
12130            }
12131            else if (vm.$options.methods && key in vm.$options.methods) {
12132                warn$2("The computed property \"".concat(key, "\" is already defined as a method."), vm);
12133            }
12134        }
12135    }
12136}
12137function defineComputed(target, key, userDef) {
12138    var shouldCache = !isServerRendering();
12139    if (isFunction(userDef)) {
12140        sharedPropertyDefinition.get = shouldCache
12141            ? createComputedGetter(key)
12142            : createGetterInvoker(userDef);
12143        sharedPropertyDefinition.set = noop;
12144    }
12145    else {
12146        sharedPropertyDefinition.get = userDef.get
12147            ? shouldCache && userDef.cache !== false
12148                ? createComputedGetter(key)
12149                : createGetterInvoker(userDef.get)
12150            : noop;
12151        sharedPropertyDefinition.set = userDef.set || noop;
12152    }
12153    if ( true && sharedPropertyDefinition.set === noop) {
12154        sharedPropertyDefinition.set = function () {
12155            warn$2("Computed property \"".concat(key, "\" was assigned to but it has no setter."), this);
12156        };
12157    }
12158    Object.defineProperty(target, key, sharedPropertyDefinition);
12159}
12160function createComputedGetter(key) {
12161    return function computedGetter() {
12162        var watcher = this._computedWatchers && this._computedWatchers[key];
12163        if (watcher) {
12164            if (watcher.dirty) {
12165                watcher.evaluate();
12166            }
12167            if (Dep.target) {
12168                if ( true && Dep.target.onTrack) {
12169                    Dep.target.onTrack({
12170                        effect: Dep.target,
12171                        target: this,
12172                        type: "get" /* TrackOpTypes.GET */,
12173                        key: key
12174                    });
12175                }
12176                watcher.depend();
12177            }
12178            return watcher.value;
12179        }
12180    };
12181}
12182function createGetterInvoker(fn) {
12183    return function computedGetter() {
12184        return fn.call(this, this);
12185    };
12186}
12187function initMethods(vm, methods) {
12188    var props = vm.$options.props;
12189    for (var key in methods) {
12190        if (true) {
12191            if (typeof methods[key] !== 'function') {
12192                warn$2("Method \"".concat(key, "\" has type \"").concat(typeof methods[key], "\" in the component definition. ") +
12193                    "Did you reference the function correctly?", vm);
12194            }
12195            if (props && hasOwn(props, key)) {
12196                warn$2("Method \"".concat(key, "\" has already been defined as a prop."), vm);
12197            }
12198            if (key in vm && isReserved(key)) {
12199                warn$2("Method \"".concat(key, "\" conflicts with an existing Vue instance method. ") +
12200                    "Avoid defining component methods that start with _ or $.");
12201            }
12202        }
12203        vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm);
12204    }
12205}
12206function initWatch(vm, watch) {
12207    for (var key in watch) {
12208        var handler = watch[key];
12209        if (isArray(handler)) {
12210            for (var i = 0; i < handler.length; i++) {
12211                createWatcher(vm, key, handler[i]);
12212            }
12213        }
12214        else {
12215            createWatcher(vm, key, handler);
12216        }
12217    }
12218}
12219function createWatcher(vm, expOrFn, handler, options) {
12220    if (isPlainObject(handler)) {
12221        options = handler;
12222        handler = handler.handler;
12223    }
12224    if (typeof handler === 'string') {
12225        handler = vm[handler];
12226    }
12227    return vm.$watch(expOrFn, handler, options);
12228}
12229function stateMixin(Vue) {
12230    // flow somehow has problems with directly declared definition object
12231    // when using Object.defineProperty, so we have to procedurally build up
12232    // the object here.
12233    var dataDef = {};
12234    dataDef.get = function () {
12235        return this._data;
12236    };
12237    var propsDef = {};
12238    propsDef.get = function () {
12239        return this._props;
12240    };
12241    if (true) {
12242        dataDef.set = function () {
12243            warn$2('Avoid replacing instance root $data. ' +
12244                'Use nested data properties instead.', this);
12245        };
12246        propsDef.set = function () {
12247            warn$2("$props is readonly.", this);
12248        };
12249    }
12250    Object.defineProperty(Vue.prototype, '$data', dataDef);
12251    Object.defineProperty(Vue.prototype, '$props', propsDef);
12252    Vue.prototype.$set = set;
12253    Vue.prototype.$delete = del;
12254    Vue.prototype.$watch = function (expOrFn, cb, options) {
12255        var vm = this;
12256        if (isPlainObject(cb)) {
12257            return createWatcher(vm, expOrFn, cb, options);
12258        }
12259        options = options || {};
12260        options.user = true;
12261        var watcher = new Watcher(vm, expOrFn, cb, options);
12262        if (options.immediate) {
12263            var info = "callback for immediate watcher \"".concat(watcher.expression, "\"");
12264            pushTarget();
12265            invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);
12266            popTarget();
12267        }
12268        return function unwatchFn() {
12269            watcher.teardown();
12270        };
12271    };
12272}
12273
12274function initProvide(vm) {
12275    var provideOption = vm.$options.provide;
12276    if (provideOption) {
12277        var provided = isFunction(provideOption)
12278            ? provideOption.call(vm)
12279            : provideOption;
12280        if (!isObject(provided)) {
12281            return;
12282        }
12283        var source = resolveProvided(vm);
12284        // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to
12285        // iterate the keys ourselves.
12286        var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);
12287        for (var i = 0; i < keys.length; i++) {
12288            var key = keys[i];
12289            Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));
12290        }
12291    }
12292}
12293function initInjections(vm) {
12294    var result = resolveInject(vm.$options.inject, vm);
12295    if (result) {
12296        toggleObserving(false);
12297        Object.keys(result).forEach(function (key) {
12298            /* istanbul ignore else */
12299            if (true) {
12300                defineReactive(vm, key, result[key], function () {
12301                    warn$2("Avoid mutating an injected value directly since the changes will be " +
12302                        "overwritten whenever the provided component re-renders. " +
12303                        "injection being mutated: \"".concat(key, "\""), vm);
12304                });
12305            }
12306            else {}
12307        });
12308        toggleObserving(true);
12309    }
12310}
12311function resolveInject(inject, vm) {
12312    if (inject) {
12313        // inject is :any because flow is not smart enough to figure out cached
12314        var result = Object.create(null);
12315        var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
12316        for (var i = 0; i < keys.length; i++) {
12317            var key = keys[i];
12318            // #6574 in case the inject object is observed...
12319            if (key === '__ob__')
12320                continue;
12321            var provideKey = inject[key].from;
12322            if (provideKey in vm._provided) {
12323                result[key] = vm._provided[provideKey];
12324            }
12325            else if ('default' in inject[key]) {
12326                var provideDefault = inject[key].default;
12327                result[key] = isFunction(provideDefault)
12328                    ? provideDefault.call(vm)
12329                    : provideDefault;
12330            }
12331            else if (true) {
12332                warn$2("Injection \"".concat(key, "\" not found"), vm);
12333            }
12334        }
12335        return result;
12336    }
12337}
12338
12339var uid = 0;
12340function initMixin$1(Vue) {
12341    Vue.prototype._init = function (options) {
12342        var vm = this;
12343        // a uid
12344        vm._uid = uid++;
12345        var startTag, endTag;
12346        /* istanbul ignore if */
12347        if ( true && config.performance && mark) {
12348            startTag = "vue-perf-start:".concat(vm._uid);
12349            endTag = "vue-perf-end:".concat(vm._uid);
12350            mark(startTag);
12351        }
12352        // a flag to mark this as a Vue instance without having to do instanceof
12353        // check
12354        vm._isVue = true;
12355        // avoid instances from being observed
12356        vm.__v_skip = true;
12357        // effect scope
12358        vm._scope = new EffectScope(true /* detached */);
12359        vm._scope._vm = true;
12360        // merge options
12361        if (options && options._isComponent) {
12362            // optimize internal component instantiation
12363            // since dynamic options merging is pretty slow, and none of the
12364            // internal component options needs special treatment.
12365            initInternalComponent(vm, options);
12366        }
12367        else {
12368            vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);
12369        }
12370        /* istanbul ignore else */
12371        if (true) {
12372            initProxy(vm);
12373        }
12374        else {}
12375        // expose real self
12376        vm._self = vm;
12377        initLifecycle(vm);
12378        initEvents(vm);
12379        initRender(vm);
12380        callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);
12381        initInjections(vm); // resolve injections before data/props
12382        initState(vm);
12383        initProvide(vm); // resolve provide after data/props
12384        callHook$1(vm, 'created');
12385        /* istanbul ignore if */
12386        if ( true && config.performance && mark) {
12387            vm._name = formatComponentName(vm, false);
12388            mark(endTag);
12389            measure("vue ".concat(vm._name, " init"), startTag, endTag);
12390        }
12391        if (vm.$options.el) {
12392            vm.$mount(vm.$options.el);
12393        }
12394    };
12395}
12396function initInternalComponent(vm, options) {
12397    var opts = (vm.$options = Object.create(vm.constructor.options));
12398    // doing this because it's faster than dynamic enumeration.
12399    var parentVnode = options._parentVnode;
12400    opts.parent = options.parent;
12401    opts._parentVnode = parentVnode;
12402    var vnodeComponentOptions = parentVnode.componentOptions;
12403    opts.propsData = vnodeComponentOptions.propsData;
12404    opts._parentListeners = vnodeComponentOptions.listeners;
12405    opts._renderChildren = vnodeComponentOptions.children;
12406    opts._componentTag = vnodeComponentOptions.tag;
12407    if (options.render) {
12408        opts.render = options.render;
12409        opts.staticRenderFns = options.staticRenderFns;
12410    }
12411}
12412function resolveConstructorOptions(Ctor) {
12413    var options = Ctor.options;
12414    if (Ctor.super) {
12415        var superOptions = resolveConstructorOptions(Ctor.super);
12416        var cachedSuperOptions = Ctor.superOptions;
12417        if (superOptions !== cachedSuperOptions) {
12418            // super option changed,
12419            // need to resolve new options.
12420            Ctor.superOptions = superOptions;
12421            // check if there are any late-modified/attached options (#4976)
12422            var modifiedOptions = resolveModifiedOptions(Ctor);
12423            // update base extend options
12424            if (modifiedOptions) {
12425                extend(Ctor.extendOptions, modifiedOptions);
12426            }
12427            options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
12428            if (options.name) {
12429                options.components[options.name] = Ctor;
12430            }
12431        }
12432    }
12433    return options;
12434}
12435function resolveModifiedOptions(Ctor) {
12436    var modified;
12437    var latest = Ctor.options;
12438    var sealed = Ctor.sealedOptions;
12439    for (var key in latest) {
12440        if (latest[key] !== sealed[key]) {
12441            if (!modified)
12442                modified = {};
12443            modified[key] = latest[key];
12444        }
12445    }
12446    return modified;
12447}
12448
12449function FunctionalRenderContext(data, props, children, parent, Ctor) {
12450    var _this = this;
12451    var options = Ctor.options;
12452    // ensure the createElement function in functional components
12453    // gets a unique context - this is necessary for correct named slot check
12454    var contextVm;
12455    if (hasOwn(parent, '_uid')) {
12456        contextVm = Object.create(parent);
12457        contextVm._original = parent;
12458    }
12459    else {
12460        // the context vm passed in is a functional context as well.
12461        // in this case we want to make sure we are able to get a hold to the
12462        // real context instance.
12463        contextVm = parent;
12464        // @ts-ignore
12465        parent = parent._original;
12466    }
12467    var isCompiled = isTrue(options._compiled);
12468    var needNormalization = !isCompiled;
12469    this.data = data;
12470    this.props = props;
12471    this.children = children;
12472    this.parent = parent;
12473    this.listeners = data.on || emptyObject;
12474    this.injections = resolveInject(options.inject, parent);
12475    this.slots = function () {
12476        if (!_this.$slots) {
12477            normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent)));
12478        }
12479        return _this.$slots;
12480    };
12481    Object.defineProperty(this, 'scopedSlots', {
12482        enumerable: true,
12483        get: function () {
12484            return normalizeScopedSlots(parent, data.scopedSlots, this.slots());
12485        }
12486    });
12487    // support for compiled functional template
12488    if (isCompiled) {
12489        // exposing $options for renderStatic()
12490        this.$options = options;
12491        // pre-resolve slots for renderSlot()
12492        this.$slots = this.slots();
12493        this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);
12494    }
12495    if (options._scopeId) {
12496        this._c = function (a, b, c, d) {
12497            var vnode = createElement$1(contextVm, a, b, c, d, needNormalization);
12498            if (vnode && !isArray(vnode)) {
12499                vnode.fnScopeId = options._scopeId;
12500                vnode.fnContext = parent;
12501            }
12502            return vnode;
12503        };
12504    }
12505    else {
12506        this._c = function (a, b, c, d) {
12507            return createElement$1(contextVm, a, b, c, d, needNormalization);
12508        };
12509    }
12510}
12511installRenderHelpers(FunctionalRenderContext.prototype);
12512function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
12513    var options = Ctor.options;
12514    var props = {};
12515    var propOptions = options.props;
12516    if (isDef(propOptions)) {
12517        for (var key in propOptions) {
12518            props[key] = validateProp(key, propOptions, propsData || emptyObject);
12519        }
12520    }
12521    else {
12522        if (isDef(data.attrs))
12523            mergeProps(props, data.attrs);
12524        if (isDef(data.props))
12525            mergeProps(props, data.props);
12526    }
12527    var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
12528    var vnode = options.render.call(null, renderContext._c, renderContext);
12529    if (vnode instanceof VNode) {
12530        return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
12531    }
12532    else if (isArray(vnode)) {
12533        var vnodes = normalizeChildren(vnode) || [];
12534        var res = new Array(vnodes.length);
12535        for (var i = 0; i < vnodes.length; i++) {
12536            res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
12537        }
12538        return res;
12539    }
12540}
12541function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
12542    // #7817 clone node before setting fnContext, otherwise if the node is reused
12543    // (e.g. it was from a cached normal slot) the fnContext causes named slots
12544    // that should not be matched to match.
12545    var clone = cloneVNode(vnode);
12546    clone.fnContext = contextVm;
12547    clone.fnOptions = options;
12548    if (true) {
12549        (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =
12550            renderContext;
12551    }
12552    if (data.slot) {
12553        (clone.data || (clone.data = {})).slot = data.slot;
12554    }
12555    return clone;
12556}
12557function mergeProps(to, from) {
12558    for (var key in from) {
12559        to[camelize(key)] = from[key];
12560    }
12561}
12562
12563function getComponentName(options) {
12564    return options.name || options.__name || options._componentTag;
12565}
12566// inline hooks to be invoked on component VNodes during patch
12567var componentVNodeHooks = {
12568    init: function (vnode, hydrating) {
12569        if (vnode.componentInstance &&
12570            !vnode.componentInstance._isDestroyed &&
12571            vnode.data.keepAlive) {
12572            // kept-alive components, treat as a patch
12573            var mountedNode = vnode; // work around flow
12574            componentVNodeHooks.prepatch(mountedNode, mountedNode);
12575        }
12576        else {
12577            var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));
12578            child.$mount(hydrating ? vnode.elm : undefined, hydrating);
12579        }
12580    },
12581    prepatch: function (oldVnode, vnode) {
12582        var options = vnode.componentOptions;
12583        var child = (vnode.componentInstance = oldVnode.componentInstance);
12584        updateChildComponent(child, options.propsData, // updated props
12585        options.listeners, // updated listeners
12586        vnode, // new parent vnode
12587        options.children // new children
12588        );
12589    },
12590    insert: function (vnode) {
12591        var context = vnode.context, componentInstance = vnode.componentInstance;
12592        if (!componentInstance._isMounted) {
12593            componentInstance._isMounted = true;
12594            callHook$1(componentInstance, 'mounted');
12595        }
12596        if (vnode.data.keepAlive) {
12597            if (context._isMounted) {
12598                // vue-router#1212
12599                // During updates, a kept-alive component's child components may
12600                // change, so directly walking the tree here may call activated hooks
12601                // on incorrect children. Instead we push them into a queue which will
12602                // be processed after the whole patch process ended.
12603                queueActivatedComponent(componentInstance);
12604            }
12605            else {
12606                activateChildComponent(componentInstance, true /* direct */);
12607            }
12608        }
12609    },
12610    destroy: function (vnode) {
12611        var componentInstance = vnode.componentInstance;
12612        if (!componentInstance._isDestroyed) {
12613            if (!vnode.data.keepAlive) {
12614                componentInstance.$destroy();
12615            }
12616            else {
12617                deactivateChildComponent(componentInstance, true /* direct */);
12618            }
12619        }
12620    }
12621};
12622var hooksToMerge = Object.keys(componentVNodeHooks);
12623function createComponent(Ctor, data, context, children, tag) {
12624    if (isUndef(Ctor)) {
12625        return;
12626    }
12627    var baseCtor = context.$options._base;
12628    // plain options object: turn it into a constructor
12629    if (isObject(Ctor)) {
12630        Ctor = baseCtor.extend(Ctor);
12631    }
12632    // if at this stage it's not a constructor or an async component factory,
12633    // reject.
12634    if (typeof Ctor !== 'function') {
12635        if (true) {
12636            warn$2("Invalid Component definition: ".concat(String(Ctor)), context);
12637        }
12638        return;
12639    }
12640    // async component
12641    var asyncFactory;
12642    // @ts-expect-error
12643    if (isUndef(Ctor.cid)) {
12644        asyncFactory = Ctor;
12645        Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
12646        if (Ctor === undefined) {
12647            // return a placeholder node for async component, which is rendered
12648            // as a comment node but preserves all the raw information for the node.
12649            // the information will be used for async server-rendering and hydration.
12650            return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
12651        }
12652    }
12653    data = data || {};
12654    // resolve constructor options in case global mixins are applied after
12655    // component constructor creation
12656    resolveConstructorOptions(Ctor);
12657    // transform component v-model data into props & events
12658    if (isDef(data.model)) {
12659        // @ts-expect-error
12660        transformModel(Ctor.options, data);
12661    }
12662    // extract props
12663    // @ts-expect-error
12664    var propsData = extractPropsFromVNodeData(data, Ctor, tag);
12665    // functional component
12666    // @ts-expect-error
12667    if (isTrue(Ctor.options.functional)) {
12668        return createFunctionalComponent(Ctor, propsData, data, context, children);
12669    }
12670    // extract listeners, since these needs to be treated as
12671    // child component listeners instead of DOM listeners
12672    var listeners = data.on;
12673    // replace with listeners with .native modifier
12674    // so it gets processed during parent component patch.
12675    data.on = data.nativeOn;
12676    // @ts-expect-error
12677    if (isTrue(Ctor.options.abstract)) {
12678        // abstract components do not keep anything
12679        // other than props & listeners & slot
12680        // work around flow
12681        var slot = data.slot;
12682        data = {};
12683        if (slot) {
12684            data.slot = slot;
12685        }
12686    }
12687    // install component management hooks onto the placeholder node
12688    installComponentHooks(data);
12689    // return a placeholder vnode
12690    // @ts-expect-error
12691    var name = getComponentName(Ctor.options) || tag;
12692    var vnode = new VNode(
12693    // @ts-expect-error
12694    "vue-component-".concat(Ctor.cid).concat(name ? "-".concat(name) : ''), data, undefined, undefined, undefined, context, 
12695    // @ts-expect-error
12696    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory);
12697    return vnode;
12698}
12699function createComponentInstanceForVnode(
12700// we know it's MountedComponentVNode but flow doesn't
12701vnode, 
12702// activeInstance in lifecycle state
12703parent) {
12704    var options = {
12705        _isComponent: true,
12706        _parentVnode: vnode,
12707        parent: parent
12708    };
12709    // check inline-template render functions
12710    var inlineTemplate = vnode.data.inlineTemplate;
12711    if (isDef(inlineTemplate)) {
12712        options.render = inlineTemplate.render;
12713        options.staticRenderFns = inlineTemplate.staticRenderFns;
12714    }
12715    return new vnode.componentOptions.Ctor(options);
12716}
12717function installComponentHooks(data) {
12718    var hooks = data.hook || (data.hook = {});
12719    for (var i = 0; i < hooksToMerge.length; i++) {
12720        var key = hooksToMerge[i];
12721        var existing = hooks[key];
12722        var toMerge = componentVNodeHooks[key];
12723        // @ts-expect-error
12724        if (existing !== toMerge && !(existing && existing._merged)) {
12725            hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
12726        }
12727    }
12728}
12729function mergeHook(f1, f2) {
12730    var merged = function (a, b) {
12731        // flow complains about extra args which is why we use any
12732        f1(a, b);
12733        f2(a, b);
12734    };
12735    merged._merged = true;
12736    return merged;
12737}
12738// transform component v-model info (value and callback) into
12739// prop and event handler respectively.
12740function transformModel(options, data) {
12741    var prop = (options.model && options.model.prop) || 'value';
12742    var event = (options.model && options.model.event) || 'input';
12743    (data.attrs || (data.attrs = {}))[prop] = data.model.value;
12744    var on = data.on || (data.on = {});
12745    var existing = on[event];
12746    var callback = data.model.callback;
12747    if (isDef(existing)) {
12748        if (isArray(existing)
12749            ? existing.indexOf(callback) === -1
12750            : existing !== callback) {
12751            on[event] = [callback].concat(existing);
12752        }
12753    }
12754    else {
12755        on[event] = callback;
12756    }
12757}
12758
12759var warn$2 = noop;
12760var tip = noop;
12761var generateComponentTrace; // work around flow check
12762var formatComponentName;
12763if (true) {
12764    var hasConsole_1 = typeof console !== 'undefined';
12765    var classifyRE_1 = /(?:^|[-_])(\w)/g;
12766    var classify_1 = function (str) {
12767        return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, '');
12768    };
12769    warn$2 = function (msg, vm) {
12770        if (vm === void 0) { vm = currentInstance; }
12771        var trace = vm ? generateComponentTrace(vm) : '';
12772        if (config.warnHandler) {
12773            config.warnHandler.call(null, msg, vm, trace);
12774        }
12775        else if (hasConsole_1 && !config.silent) {
12776            console.error("[Vue warn]: ".concat(msg).concat(trace));
12777        }
12778    };
12779    tip = function (msg, vm) {
12780        if (hasConsole_1 && !config.silent) {
12781            console.warn("[Vue tip]: ".concat(msg) + (vm ? generateComponentTrace(vm) : ''));
12782        }
12783    };
12784    formatComponentName = function (vm, includeFile) {
12785        if (vm.$root === vm) {
12786            return '<Root>';
12787        }
12788        var options = isFunction(vm) && vm.cid != null
12789            ? vm.options
12790            : vm._isVue
12791                ? vm.$options || vm.constructor.options
12792                : vm;
12793        var name = getComponentName(options);
12794        var file = options.__file;
12795        if (!name && file) {
12796            var match = file.match(/([^/\\]+)\.vue$/);
12797            name = match && match[1];
12798        }
12799        return ((name ? "<".concat(classify_1(name), ">") : "<Anonymous>") +
12800            (file && includeFile !== false ? " at ".concat(file) : ''));
12801    };
12802    var repeat_1 = function (str, n) {
12803        var res = '';
12804        while (n) {
12805            if (n % 2 === 1)
12806                res += str;
12807            if (n > 1)
12808                str += str;
12809            n >>= 1;
12810        }
12811        return res;
12812    };
12813    generateComponentTrace = function (vm) {
12814        if (vm._isVue && vm.$parent) {
12815            var tree = [];
12816            var currentRecursiveSequence = 0;
12817            while (vm) {
12818                if (tree.length > 0) {
12819                    var last = tree[tree.length - 1];
12820                    if (last.constructor === vm.constructor) {
12821                        currentRecursiveSequence++;
12822                        vm = vm.$parent;
12823                        continue;
12824                    }
12825                    else if (currentRecursiveSequence > 0) {
12826                        tree[tree.length - 1] = [last, currentRecursiveSequence];
12827                        currentRecursiveSequence = 0;
12828                    }
12829                }
12830                tree.push(vm);
12831                vm = vm.$parent;
12832            }
12833            return ('\n\nfound in\n\n' +
12834                tree
12835                    .map(function (vm, i) {
12836                    return "".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm)
12837                        ? "".concat(formatComponentName(vm[0]), "... (").concat(vm[1], " recursive calls)")
12838                        : formatComponentName(vm));
12839                })
12840                    .join('\n'));
12841        }
12842        else {
12843            return "\n\n(found in ".concat(formatComponentName(vm), ")");
12844        }
12845    };
12846}
12847
12848/**
12849 * Option overwriting strategies are functions that handle
12850 * how to merge a parent option value and a child option
12851 * value into the final value.
12852 */
12853var strats = config.optionMergeStrategies;
12854/**
12855 * Options with restrictions
12856 */
12857if (true) {
12858    strats.el = strats.propsData = function (parent, child, vm, key) {
12859        if (!vm) {
12860            warn$2("option \"".concat(key, "\" can only be used during instance ") +
12861                'creation with the `new` keyword.');
12862        }
12863        return defaultStrat(parent, child);
12864    };
12865}
12866/**
12867 * Helper that recursively merges two data objects together.
12868 */
12869function mergeData(to, from, recursive) {
12870    if (recursive === void 0) { recursive = true; }
12871    if (!from)
12872        return to;
12873    var key, toVal, fromVal;
12874    var keys = hasSymbol
12875        ? Reflect.ownKeys(from)
12876        : Object.keys(from);
12877    for (var i = 0; i < keys.length; i++) {
12878        key = keys[i];
12879        // in case the object is already observed...
12880        if (key === '__ob__')
12881            continue;
12882        toVal = to[key];
12883        fromVal = from[key];
12884        if (!recursive || !hasOwn(to, key)) {
12885            set(to, key, fromVal);
12886        }
12887        else if (toVal !== fromVal &&
12888            isPlainObject(toVal) &&
12889            isPlainObject(fromVal)) {
12890            mergeData(toVal, fromVal);
12891        }
12892    }
12893    return to;
12894}
12895/**
12896 * Data
12897 */
12898function mergeDataOrFn(parentVal, childVal, vm) {
12899    if (!vm) {
12900        // in a Vue.extend merge, both should be functions
12901        if (!childVal) {
12902            return parentVal;
12903        }
12904        if (!parentVal) {
12905            return childVal;
12906        }
12907        // when parentVal & childVal are both present,
12908        // we need to return a function that returns the
12909        // merged result of both functions... no need to
12910        // check if parentVal is a function here because
12911        // it has to be a function to pass previous merges.
12912        return function mergedDataFn() {
12913            return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);
12914        };
12915    }
12916    else {
12917        return function mergedInstanceDataFn() {
12918            // instance merge
12919            var instanceData = isFunction(childVal)
12920                ? childVal.call(vm, vm)
12921                : childVal;
12922            var defaultData = isFunction(parentVal)
12923                ? parentVal.call(vm, vm)
12924                : parentVal;
12925            if (instanceData) {
12926                return mergeData(instanceData, defaultData);
12927            }
12928            else {
12929                return defaultData;
12930            }
12931        };
12932    }
12933}
12934strats.data = function (parentVal, childVal, vm) {
12935    if (!vm) {
12936        if (childVal && typeof childVal !== 'function') {
12937             true &&
12938                warn$2('The "data" option should be a function ' +
12939                    'that returns a per-instance value in component ' +
12940                    'definitions.', vm);
12941            return parentVal;
12942        }
12943        return mergeDataOrFn(parentVal, childVal);
12944    }
12945    return mergeDataOrFn(parentVal, childVal, vm);
12946};
12947/**
12948 * Hooks and props are merged as arrays.
12949 */
12950function mergeLifecycleHook(parentVal, childVal) {
12951    var res = childVal
12952        ? parentVal
12953            ? parentVal.concat(childVal)
12954            : isArray(childVal)
12955                ? childVal
12956                : [childVal]
12957        : parentVal;
12958    return res ? dedupeHooks(res) : res;
12959}
12960function dedupeHooks(hooks) {
12961    var res = [];
12962    for (var i = 0; i < hooks.length; i++) {
12963        if (res.indexOf(hooks[i]) === -1) {
12964            res.push(hooks[i]);
12965        }
12966    }
12967    return res;
12968}
12969LIFECYCLE_HOOKS.forEach(function (hook) {
12970    strats[hook] = mergeLifecycleHook;
12971});
12972/**
12973 * Assets
12974 *
12975 * When a vm is present (instance creation), we need to do
12976 * a three-way merge between constructor options, instance
12977 * options and parent options.
12978 */
12979function mergeAssets(parentVal, childVal, vm, key) {
12980    var res = Object.create(parentVal || null);
12981    if (childVal) {
12982         true && assertObjectType(key, childVal, vm);
12983        return extend(res, childVal);
12984    }
12985    else {
12986        return res;
12987    }
12988}
12989ASSET_TYPES.forEach(function (type) {
12990    strats[type + 's'] = mergeAssets;
12991});
12992/**
12993 * Watchers.
12994 *
12995 * Watchers hashes should not overwrite one
12996 * another, so we merge them as arrays.
12997 */
12998strats.watch = function (parentVal, childVal, vm, key) {
12999    // work around Firefox's Object.prototype.watch...
13000    //@ts-expect-error work around
13001    if (parentVal === nativeWatch)
13002        parentVal = undefined;
13003    //@ts-expect-error work around
13004    if (childVal === nativeWatch)
13005        childVal = undefined;
13006    /* istanbul ignore if */
13007    if (!childVal)
13008        return Object.create(parentVal || null);
13009    if (true) {
13010        assertObjectType(key, childVal, vm);
13011    }
13012    if (!parentVal)
13013        return childVal;
13014    var ret = {};
13015    extend(ret, parentVal);
13016    for (var key_1 in childVal) {
13017        var parent_1 = ret[key_1];
13018        var child = childVal[key_1];
13019        if (parent_1 && !isArray(parent_1)) {
13020            parent_1 = [parent_1];
13021        }
13022        ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child];
13023    }
13024    return ret;
13025};
13026/**
13027 * Other object hashes.
13028 */
13029strats.props =
13030    strats.methods =
13031        strats.inject =
13032            strats.computed =
13033                function (parentVal, childVal, vm, key) {
13034                    if (childVal && "development" !== 'production') {
13035                        assertObjectType(key, childVal, vm);
13036                    }
13037                    if (!parentVal)
13038                        return childVal;
13039                    var ret = Object.create(null);
13040                    extend(ret, parentVal);
13041                    if (childVal)
13042                        extend(ret, childVal);
13043                    return ret;
13044                };
13045strats.provide = function (parentVal, childVal) {
13046    if (!parentVal)
13047        return childVal;
13048    return function () {
13049        var ret = Object.create(null);
13050        mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);
13051        if (childVal) {
13052            mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive
13053            );
13054        }
13055        return ret;
13056    };
13057};
13058/**
13059 * Default strategy.
13060 */
13061var defaultStrat = function (parentVal, childVal) {
13062    return childVal === undefined ? parentVal : childVal;
13063};
13064/**
13065 * Validate component names
13066 */
13067function checkComponents(options) {
13068    for (var key in options.components) {
13069        validateComponentName(key);
13070    }
13071}
13072function validateComponentName(name) {
13073    if (!new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(unicodeRegExp.source, "]*$")).test(name)) {
13074        warn$2('Invalid component name: "' +
13075            name +
13076            '". Component names ' +
13077            'should conform to valid custom element name in html5 specification.');
13078    }
13079    if (isBuiltInTag(name) || config.isReservedTag(name)) {
13080        warn$2('Do not use built-in or reserved HTML elements as component ' +
13081            'id: ' +
13082            name);
13083    }
13084}
13085/**
13086 * Ensure all props option syntax are normalized into the
13087 * Object-based format.
13088 */
13089function normalizeProps(options, vm) {
13090    var props = options.props;
13091    if (!props)
13092        return;
13093    var res = {};
13094    var i, val, name;
13095    if (isArray(props)) {
13096        i = props.length;
13097        while (i--) {
13098            val = props[i];
13099            if (typeof val === 'string') {
13100                name = camelize(val);
13101                res[name] = { type: null };
13102            }
13103            else if (true) {
13104                warn$2('props must be strings when using array syntax.');
13105            }
13106        }
13107    }
13108    else if (isPlainObject(props)) {
13109        for (var key in props) {
13110            val = props[key];
13111            name = camelize(key);
13112            res[name] = isPlainObject(val) ? val : { type: val };
13113        }
13114    }
13115    else if (true) {
13116        warn$2("Invalid value for option \"props\": expected an Array or an Object, " +
13117            "but got ".concat(toRawType(props), "."), vm);
13118    }
13119    options.props = res;
13120}
13121/**
13122 * Normalize all injections into Object-based format
13123 */
13124function normalizeInject(options, vm) {
13125    var inject = options.inject;
13126    if (!inject)
13127        return;
13128    var normalized = (options.inject = {});
13129    if (isArray(inject)) {
13130        for (var i = 0; i < inject.length; i++) {
13131            normalized[inject[i]] = { from: inject[i] };
13132        }
13133    }
13134    else if (isPlainObject(inject)) {
13135        for (var key in inject) {
13136            var val = inject[key];
13137            normalized[key] = isPlainObject(val)
13138                ? extend({ from: key }, val)
13139                : { from: val };
13140        }
13141    }
13142    else if (true) {
13143        warn$2("Invalid value for option \"inject\": expected an Array or an Object, " +
13144            "but got ".concat(toRawType(inject), "."), vm);
13145    }
13146}
13147/**
13148 * Normalize raw function directives into object format.
13149 */
13150function normalizeDirectives$1(options) {
13151    var dirs = options.directives;
13152    if (dirs) {
13153        for (var key in dirs) {
13154            var def = dirs[key];
13155            if (isFunction(def)) {
13156                dirs[key] = { bind: def, update: def };
13157            }
13158        }
13159    }
13160}
13161function assertObjectType(name, value, vm) {
13162    if (!isPlainObject(value)) {
13163        warn$2("Invalid value for option \"".concat(name, "\": expected an Object, ") +
13164            "but got ".concat(toRawType(value), "."), vm);
13165    }
13166}
13167/**
13168 * Merge two option objects into a new one.
13169 * Core utility used in both instantiation and inheritance.
13170 */
13171function mergeOptions(parent, child, vm) {
13172    if (true) {
13173        checkComponents(child);
13174    }
13175    if (isFunction(child)) {
13176        // @ts-expect-error
13177        child = child.options;
13178    }
13179    normalizeProps(child, vm);
13180    normalizeInject(child, vm);
13181    normalizeDirectives$1(child);
13182    // Apply extends and mixins on the child options,
13183    // but only if it is a raw options object that isn't
13184    // the result of another mergeOptions call.
13185    // Only merged options has the _base property.
13186    if (!child._base) {
13187        if (child.extends) {
13188            parent = mergeOptions(parent, child.extends, vm);
13189        }
13190        if (child.mixins) {
13191            for (var i = 0, l = child.mixins.length; i < l; i++) {
13192                parent = mergeOptions(parent, child.mixins[i], vm);
13193            }
13194        }
13195    }
13196    var options = {};
13197    var key;
13198    for (key in parent) {
13199        mergeField(key);
13200    }
13201    for (key in child) {
13202        if (!hasOwn(parent, key)) {
13203            mergeField(key);
13204        }
13205    }
13206    function mergeField(key) {
13207        var strat = strats[key] || defaultStrat;
13208        options[key] = strat(parent[key], child[key], vm, key);
13209    }
13210    return options;
13211}
13212/**
13213 * Resolve an asset.
13214 * This function is used because child instances need access
13215 * to assets defined in its ancestor chain.
13216 */
13217function resolveAsset(options, type, id, warnMissing) {
13218    /* istanbul ignore if */
13219    if (typeof id !== 'string') {
13220        return;
13221    }
13222    var assets = options[type];
13223    // check local registration variations first
13224    if (hasOwn(assets, id))
13225        return assets[id];
13226    var camelizedId = camelize(id);
13227    if (hasOwn(assets, camelizedId))
13228        return assets[camelizedId];
13229    var PascalCaseId = capitalize(camelizedId);
13230    if (hasOwn(assets, PascalCaseId))
13231        return assets[PascalCaseId];
13232    // fallback to prototype chain
13233    var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
13234    if ( true && warnMissing && !res) {
13235        warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id);
13236    }
13237    return res;
13238}
13239
13240function validateProp(key, propOptions, propsData, vm) {
13241    var prop = propOptions[key];
13242    var absent = !hasOwn(propsData, key);
13243    var value = propsData[key];
13244    // boolean casting
13245    var booleanIndex = getTypeIndex(Boolean, prop.type);
13246    if (booleanIndex > -1) {
13247        if (absent && !hasOwn(prop, 'default')) {
13248            value = false;
13249        }
13250        else if (value === '' || value === hyphenate(key)) {
13251            // only cast empty string / same name to boolean if
13252            // boolean has higher priority
13253            var stringIndex = getTypeIndex(String, prop.type);
13254            if (stringIndex < 0 || booleanIndex < stringIndex) {
13255                value = true;
13256            }
13257        }
13258    }
13259    // check default value
13260    if (value === undefined) {
13261        value = getPropDefaultValue(vm, prop, key);
13262        // since the default value is a fresh copy,
13263        // make sure to observe it.
13264        var prevShouldObserve = shouldObserve;
13265        toggleObserving(true);
13266        observe(value);
13267        toggleObserving(prevShouldObserve);
13268    }
13269    if (true) {
13270        assertProp(prop, key, value, vm, absent);
13271    }
13272    return value;
13273}
13274/**
13275 * Get the default value of a prop.
13276 */
13277function getPropDefaultValue(vm, prop, key) {
13278    // no default, return undefined
13279    if (!hasOwn(prop, 'default')) {
13280        return undefined;
13281    }
13282    var def = prop.default;
13283    // warn against non-factory defaults for Object & Array
13284    if ( true && isObject(def)) {
13285        warn$2('Invalid default value for prop "' +
13286            key +
13287            '": ' +
13288            'Props with type Object/Array must use a factory function ' +
13289            'to return the default value.', vm);
13290    }
13291    // the raw prop value was also undefined from previous render,
13292    // return previous default value to avoid unnecessary watcher trigger
13293    if (vm &&
13294        vm.$options.propsData &&
13295        vm.$options.propsData[key] === undefined &&
13296        vm._props[key] !== undefined) {
13297        return vm._props[key];
13298    }
13299    // call factory function for non-Function types
13300    // a value is Function if its prototype is function even across different execution context
13301    return isFunction(def) && getType(prop.type) !== 'Function'
13302        ? def.call(vm)
13303        : def;
13304}
13305/**
13306 * Assert whether a prop is valid.
13307 */
13308function assertProp(prop, name, value, vm, absent) {
13309    if (prop.required && absent) {
13310        warn$2('Missing required prop: "' + name + '"', vm);
13311        return;
13312    }
13313    if (value == null && !prop.required) {
13314        return;
13315    }
13316    var type = prop.type;
13317    var valid = !type || type === true;
13318    var expectedTypes = [];
13319    if (type) {
13320        if (!isArray(type)) {
13321            type = [type];
13322        }
13323        for (var i = 0; i < type.length && !valid; i++) {
13324            var assertedType = assertType(value, type[i], vm);
13325            expectedTypes.push(assertedType.expectedType || '');
13326            valid = assertedType.valid;
13327        }
13328    }
13329    var haveExpectedTypes = expectedTypes.some(function (t) { return t; });
13330    if (!valid && haveExpectedTypes) {
13331        warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm);
13332        return;
13333    }
13334    var validator = prop.validator;
13335    if (validator) {
13336        if (!validator(value)) {
13337            warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
13338        }
13339    }
13340}
13341var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
13342function assertType(value, type, vm) {
13343    var valid;
13344    var expectedType = getType(type);
13345    if (simpleCheckRE.test(expectedType)) {
13346        var t = typeof value;
13347        valid = t === expectedType.toLowerCase();
13348        // for primitive wrapper objects
13349        if (!valid && t === 'object') {
13350            valid = value instanceof type;
13351        }
13352    }
13353    else if (expectedType === 'Object') {
13354        valid = isPlainObject(value);
13355    }
13356    else if (expectedType === 'Array') {
13357        valid = isArray(value);
13358    }
13359    else {
13360        try {
13361            valid = value instanceof type;
13362        }
13363        catch (e) {
13364            warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
13365            valid = false;
13366        }
13367    }
13368    return {
13369        valid: valid,
13370        expectedType: expectedType
13371    };
13372}
13373var functionTypeCheckRE = /^\s*function (\w+)/;
13374/**
13375 * Use function string name to check built-in types,
13376 * because a simple equality check will fail when running
13377 * across different vms / iframes.
13378 */
13379function getType(fn) {
13380    var match = fn && fn.toString().match(functionTypeCheckRE);
13381    return match ? match[1] : '';
13382}
13383function isSameType(a, b) {
13384    return getType(a) === getType(b);
13385}
13386function getTypeIndex(type, expectedTypes) {
13387    if (!isArray(expectedTypes)) {
13388        return isSameType(expectedTypes, type) ? 0 : -1;
13389    }
13390    for (var i = 0, len = expectedTypes.length; i < len; i++) {
13391        if (isSameType(expectedTypes[i], type)) {
13392            return i;
13393        }
13394    }
13395    return -1;
13396}
13397function getInvalidTypeMessage(name, value, expectedTypes) {
13398    var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") +
13399        " Expected ".concat(expectedTypes.map(capitalize).join(', '));
13400    var expectedType = expectedTypes[0];
13401    var receivedType = toRawType(value);
13402    // check if we need to specify expected value
13403    if (expectedTypes.length === 1 &&
13404        isExplicable(expectedType) &&
13405        isExplicable(typeof value) &&
13406        !isBoolean(expectedType, receivedType)) {
13407        message += " with value ".concat(styleValue(value, expectedType));
13408    }
13409    message += ", got ".concat(receivedType, " ");
13410    // check if we need to specify received value
13411    if (isExplicable(receivedType)) {
13412        message += "with value ".concat(styleValue(value, receivedType), ".");
13413    }
13414    return message;
13415}
13416function styleValue(value, type) {
13417    if (type === 'String') {
13418        return "\"".concat(value, "\"");
13419    }
13420    else if (type === 'Number') {
13421        return "".concat(Number(value));
13422    }
13423    else {
13424        return "".concat(value);
13425    }
13426}
13427var EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
13428function isExplicable(value) {
13429    return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; });
13430}
13431function isBoolean() {
13432    var args = [];
13433    for (var _i = 0; _i < arguments.length; _i++) {
13434        args[_i] = arguments[_i];
13435    }
13436    return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; });
13437}
13438
13439function Vue(options) {
13440    if ( true && !(this instanceof Vue)) {
13441        warn$2('Vue is a constructor and should be called with the `new` keyword');
13442    }
13443    this._init(options);
13444}
13445//@ts-expect-error Vue has function type
13446initMixin$1(Vue);
13447//@ts-expect-error Vue has function type
13448stateMixin(Vue);
13449//@ts-expect-error Vue has function type
13450eventsMixin(Vue);
13451//@ts-expect-error Vue has function type
13452lifecycleMixin(Vue);
13453//@ts-expect-error Vue has function type
13454renderMixin(Vue);
13455
13456function initUse(Vue) {
13457    Vue.use = function (plugin) {
13458        var installedPlugins = this._installedPlugins || (this._installedPlugins = []);
13459        if (installedPlugins.indexOf(plugin) > -1) {
13460            return this;
13461        }
13462        // additional parameters
13463        var args = toArray(arguments, 1);
13464        args.unshift(this);
13465        if (isFunction(plugin.install)) {
13466            plugin.install.apply(plugin, args);
13467        }
13468        else if (isFunction(plugin)) {
13469            plugin.apply(null, args);
13470        }
13471        installedPlugins.push(plugin);
13472        return this;
13473    };
13474}
13475
13476function initMixin(Vue) {
13477    Vue.mixin = function (mixin) {
13478        this.options = mergeOptions(this.options, mixin);
13479        return this;
13480    };
13481}
13482
13483function initExtend(Vue) {
13484    /**
13485     * Each instance constructor, including Vue, has a unique
13486     * cid. This enables us to create wrapped "child
13487     * constructors" for prototypal inheritance and cache them.
13488     */
13489    Vue.cid = 0;
13490    var cid = 1;
13491    /**
13492     * Class inheritance
13493     */
13494    Vue.extend = function (extendOptions) {
13495        extendOptions = extendOptions || {};
13496        var Super = this;
13497        var SuperId = Super.cid;
13498        var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
13499        if (cachedCtors[SuperId]) {
13500            return cachedCtors[SuperId];
13501        }
13502        var name = getComponentName(extendOptions) || getComponentName(Super.options);
13503        if ( true && name) {
13504            validateComponentName(name);
13505        }
13506        var Sub = function VueComponent(options) {
13507            this._init(options);
13508        };
13509        Sub.prototype = Object.create(Super.prototype);
13510        Sub.prototype.constructor = Sub;
13511        Sub.cid = cid++;
13512        Sub.options = mergeOptions(Super.options, extendOptions);
13513        Sub['super'] = Super;
13514        // For props and computed properties, we define the proxy getters on
13515        // the Vue instances at extension time, on the extended prototype. This
13516        // avoids Object.defineProperty calls for each instance created.
13517        if (Sub.options.props) {
13518            initProps(Sub);
13519        }
13520        if (Sub.options.computed) {
13521            initComputed(Sub);
13522        }
13523        // allow further extension/mixin/plugin usage
13524        Sub.extend = Super.extend;
13525        Sub.mixin = Super.mixin;
13526        Sub.use = Super.use;
13527        // create asset registers, so extended classes
13528        // can have their private assets too.
13529        ASSET_TYPES.forEach(function (type) {
13530            Sub[type] = Super[type];
13531        });
13532        // enable recursive self-lookup
13533        if (name) {
13534            Sub.options.components[name] = Sub;
13535        }
13536        // keep a reference to the super options at extension time.
13537        // later at instantiation we can check if Super's options have
13538        // been updated.
13539        Sub.superOptions = Super.options;
13540        Sub.extendOptions = extendOptions;
13541        Sub.sealedOptions = extend({}, Sub.options);
13542        // cache constructor
13543        cachedCtors[SuperId] = Sub;
13544        return Sub;
13545    };
13546}
13547function initProps(Comp) {
13548    var props = Comp.options.props;
13549    for (var key in props) {
13550        proxy(Comp.prototype, "_props", key);
13551    }
13552}
13553function initComputed(Comp) {
13554    var computed = Comp.options.computed;
13555    for (var key in computed) {
13556        defineComputed(Comp.prototype, key, computed[key]);
13557    }
13558}
13559
13560function initAssetRegisters(Vue) {
13561    /**
13562     * Create asset registration methods.
13563     */
13564    ASSET_TYPES.forEach(function (type) {
13565        // @ts-expect-error function is not exact same type
13566        Vue[type] = function (id, definition) {
13567            if (!definition) {
13568                return this.options[type + 's'][id];
13569            }
13570            else {
13571                /* istanbul ignore if */
13572                if ( true && type === 'component') {
13573                    validateComponentName(id);
13574                }
13575                if (type === 'component' && isPlainObject(definition)) {
13576                    // @ts-expect-error
13577                    definition.name = definition.name || id;
13578                    definition = this.options._base.extend(definition);
13579                }
13580                if (type === 'directive' && isFunction(definition)) {
13581                    definition = { bind: definition, update: definition };
13582                }
13583                this.options[type + 's'][id] = definition;
13584                return definition;
13585            }
13586        };
13587    });
13588}
13589
13590function _getComponentName(opts) {
13591    return opts && (getComponentName(opts.Ctor.options) || opts.tag);
13592}
13593function matches(pattern, name) {
13594    if (isArray(pattern)) {
13595        return pattern.indexOf(name) > -1;
13596    }
13597    else if (typeof pattern === 'string') {
13598        return pattern.split(',').indexOf(name) > -1;
13599    }
13600    else if (isRegExp(pattern)) {
13601        return pattern.test(name);
13602    }
13603    /* istanbul ignore next */
13604    return false;
13605}
13606function pruneCache(keepAliveInstance, filter) {
13607    var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode;
13608    for (var key in cache) {
13609        var entry = cache[key];
13610        if (entry) {
13611            var name_1 = entry.name;
13612            if (name_1 && !filter(name_1)) {
13613                pruneCacheEntry(cache, key, keys, _vnode);
13614            }
13615        }
13616    }
13617}
13618function pruneCacheEntry(cache, key, keys, current) {
13619    var entry = cache[key];
13620    if (entry && (!current || entry.tag !== current.tag)) {
13621        // @ts-expect-error can be undefined
13622        entry.componentInstance.$destroy();
13623    }
13624    cache[key] = null;
13625    remove$2(keys, key);
13626}
13627var patternTypes = [String, RegExp, Array];
13628// TODO defineComponent
13629var KeepAlive = {
13630    name: 'keep-alive',
13631    abstract: true,
13632    props: {
13633        include: patternTypes,
13634        exclude: patternTypes,
13635        max: [String, Number]
13636    },
13637    methods: {
13638        cacheVNode: function () {
13639            var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache;
13640            if (vnodeToCache) {
13641                var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions;
13642                cache[keyToCache] = {
13643                    name: _getComponentName(componentOptions),
13644                    tag: tag,
13645                    componentInstance: componentInstance
13646                };
13647                keys.push(keyToCache);
13648                // prune oldest entry
13649                if (this.max && keys.length > parseInt(this.max)) {
13650                    pruneCacheEntry(cache, keys[0], keys, this._vnode);
13651                }
13652                this.vnodeToCache = null;
13653            }
13654        }
13655    },
13656    created: function () {
13657        this.cache = Object.create(null);
13658        this.keys = [];
13659    },
13660    destroyed: function () {
13661        for (var key in this.cache) {
13662            pruneCacheEntry(this.cache, key, this.keys);
13663        }
13664    },
13665    mounted: function () {
13666        var _this = this;
13667        this.cacheVNode();
13668        this.$watch('include', function (val) {
13669            pruneCache(_this, function (name) { return matches(val, name); });
13670        });
13671        this.$watch('exclude', function (val) {
13672            pruneCache(_this, function (name) { return !matches(val, name); });
13673        });
13674    },
13675    updated: function () {
13676        this.cacheVNode();
13677    },
13678    render: function () {
13679        var slot = this.$slots.default;
13680        var vnode = getFirstComponentChild(slot);
13681        var componentOptions = vnode && vnode.componentOptions;
13682        if (componentOptions) {
13683            // check pattern
13684            var name_2 = _getComponentName(componentOptions);
13685            var _a = this, include = _a.include, exclude = _a.exclude;
13686            if (
13687            // not included
13688            (include && (!name_2 || !matches(include, name_2))) ||
13689                // excluded
13690                (exclude && name_2 && matches(exclude, name_2))) {
13691                return vnode;
13692            }
13693            var _b = this, cache = _b.cache, keys = _b.keys;
13694            var key = vnode.key == null
13695                ? // same constructor may get registered as different local components
13696                    // so cid alone is not enough (#3269)
13697                    componentOptions.Ctor.cid +
13698                        (componentOptions.tag ? "::".concat(componentOptions.tag) : '')
13699                : vnode.key;
13700            if (cache[key]) {
13701                vnode.componentInstance = cache[key].componentInstance;
13702                // make current key freshest
13703                remove$2(keys, key);
13704                keys.push(key);
13705            }
13706            else {
13707                // delay setting the cache until update
13708                this.vnodeToCache = vnode;
13709                this.keyToCache = key;
13710            }
13711            // @ts-expect-error can vnode.data can be undefined
13712            vnode.data.keepAlive = true;
13713        }
13714        return vnode || (slot && slot[0]);
13715    }
13716};
13717
13718var builtInComponents = {
13719    KeepAlive: KeepAlive
13720};
13721
13722function initGlobalAPI(Vue) {
13723    // config
13724    var configDef = {};
13725    configDef.get = function () { return config; };
13726    if (true) {
13727        configDef.set = function () {
13728            warn$2('Do not replace the Vue.config object, set individual fields instead.');
13729        };
13730    }
13731    Object.defineProperty(Vue, 'config', configDef);
13732    // exposed util methods.
13733    // NOTE: these are not considered part of the public API - avoid relying on
13734    // them unless you are aware of the risk.
13735    Vue.util = {
13736        warn: warn$2,
13737        extend: extend,
13738        mergeOptions: mergeOptions,
13739        defineReactive: defineReactive
13740    };
13741    Vue.set = set;
13742    Vue.delete = del;
13743    Vue.nextTick = nextTick;
13744    // 2.6 explicit observable API
13745    Vue.observable = function (obj) {
13746        observe(obj);
13747        return obj;
13748    };
13749    Vue.options = Object.create(null);
13750    ASSET_TYPES.forEach(function (type) {
13751        Vue.options[type + 's'] = Object.create(null);
13752    });
13753    // this is used to identify the "base" constructor to extend all plain-object
13754    // components with in Weex's multi-instance scenarios.
13755    Vue.options._base = Vue;
13756    extend(Vue.options.components, builtInComponents);
13757    initUse(Vue);
13758    initMixin(Vue);
13759    initExtend(Vue);
13760    initAssetRegisters(Vue);
13761}
13762
13763initGlobalAPI(Vue);
13764Object.defineProperty(Vue.prototype, '$isServer', {
13765    get: isServerRendering
13766});
13767Object.defineProperty(Vue.prototype, '$ssrContext', {
13768    get: function () {
13769        /* istanbul ignore next */
13770        return this.$vnode && this.$vnode.ssrContext;
13771    }
13772});
13773// expose FunctionalRenderContext for ssr runtime helper installation
13774Object.defineProperty(Vue, 'FunctionalRenderContext', {
13775    value: FunctionalRenderContext
13776});
13777Vue.version = version;
13778
13779// these are reserved for web because they are directly compiled away
13780// during template compilation
13781var isReservedAttr = makeMap('style,class');
13782// attributes that should be using props for binding
13783var acceptValue = makeMap('input,textarea,option,select,progress');
13784var mustUseProp = function (tag, type, attr) {
13785    return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||
13786        (attr === 'selected' && tag === 'option') ||
13787        (attr === 'checked' && tag === 'input') ||
13788        (attr === 'muted' && tag === 'video'));
13789};
13790var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
13791var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
13792var convertEnumeratedValue = function (key, value) {
13793    return isFalsyAttrValue(value) || value === 'false'
13794        ? 'false'
13795        : // allow arbitrary string value for contenteditable
13796            key === 'contenteditable' && isValidContentEditableValue(value)
13797                ? value
13798                : 'true';
13799};
13800var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
13801    'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
13802    'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
13803    'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
13804    'required,reversed,scoped,seamless,selected,sortable,' +
13805    'truespeed,typemustmatch,visible');
13806var xlinkNS = 'http://www.w3.org/1999/xlink';
13807var isXlink = function (name) {
13808    return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';
13809};
13810var getXlinkProp = function (name) {
13811    return isXlink(name) ? name.slice(6, name.length) : '';
13812};
13813var isFalsyAttrValue = function (val) {
13814    return val == null || val === false;
13815};
13816
13817function genClassForVnode(vnode) {
13818    var data = vnode.data;
13819    var parentNode = vnode;
13820    var childNode = vnode;
13821    while (isDef(childNode.componentInstance)) {
13822        childNode = childNode.componentInstance._vnode;
13823        if (childNode && childNode.data) {
13824            data = mergeClassData(childNode.data, data);
13825        }
13826    }
13827    // @ts-expect-error parentNode.parent not VNodeWithData
13828    while (isDef((parentNode = parentNode.parent))) {
13829        if (parentNode && parentNode.data) {
13830            data = mergeClassData(data, parentNode.data);
13831        }
13832    }
13833    return renderClass(data.staticClass, data.class);
13834}
13835function mergeClassData(child, parent) {
13836    return {
13837        staticClass: concat(child.staticClass, parent.staticClass),
13838        class: isDef(child.class) ? [child.class, parent.class] : parent.class
13839    };
13840}
13841function renderClass(staticClass, dynamicClass) {
13842    if (isDef(staticClass) || isDef(dynamicClass)) {
13843        return concat(staticClass, stringifyClass(dynamicClass));
13844    }
13845    /* istanbul ignore next */
13846    return '';
13847}
13848function concat(a, b) {
13849    return a ? (b ? a + ' ' + b : a) : b || '';
13850}
13851function stringifyClass(value) {
13852    if (Array.isArray(value)) {
13853        return stringifyArray(value);
13854    }
13855    if (isObject(value)) {
13856        return stringifyObject(value);
13857    }
13858    if (typeof value === 'string') {
13859        return value;
13860    }
13861    /* istanbul ignore next */
13862    return '';
13863}
13864function stringifyArray(value) {
13865    var res = '';
13866    var stringified;
13867    for (var i = 0, l = value.length; i < l; i++) {
13868        if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {
13869            if (res)
13870                res += ' ';
13871            res += stringified;
13872        }
13873    }
13874    return res;
13875}
13876function stringifyObject(value) {
13877    var res = '';
13878    for (var key in value) {
13879        if (value[key]) {
13880            if (res)
13881                res += ' ';
13882            res += key;
13883        }
13884    }
13885    return res;
13886}
13887
13888var namespaceMap = {
13889    svg: 'http://www.w3.org/2000/svg',
13890    math: 'http://www.w3.org/1998/Math/MathML'
13891};
13892var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +
13893    'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
13894    'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
13895    'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
13896    's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
13897    'embed,object,param,source,canvas,script,noscript,del,ins,' +
13898    'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
13899    'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
13900    'output,progress,select,textarea,' +
13901    'details,dialog,menu,menuitem,summary,' +
13902    'content,element,shadow,template,blockquote,iframe,tfoot');
13903// this map is intentionally selective, only covering SVG elements that may
13904// contain child elements.
13905var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
13906    'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
13907    'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
13908var isPreTag = function (tag) { return tag === 'pre'; };
13909var isReservedTag = function (tag) {
13910    return isHTMLTag(tag) || isSVG(tag);
13911};
13912function getTagNamespace(tag) {
13913    if (isSVG(tag)) {
13914        return 'svg';
13915    }
13916    // basic support for MathML
13917    // note it doesn't support other MathML elements being component roots
13918    if (tag === 'math') {
13919        return 'math';
13920    }
13921}
13922var unknownElementCache = Object.create(null);
13923function isUnknownElement(tag) {
13924    /* istanbul ignore if */
13925    if (!inBrowser) {
13926        return true;
13927    }
13928    if (isReservedTag(tag)) {
13929        return false;
13930    }
13931    tag = tag.toLowerCase();
13932    /* istanbul ignore if */
13933    if (unknownElementCache[tag] != null) {
13934        return unknownElementCache[tag];
13935    }
13936    var el = document.createElement(tag);
13937    if (tag.indexOf('-') > -1) {
13938        // http://stackoverflow.com/a/28210364/1070244
13939        return (unknownElementCache[tag] =
13940            el.constructor === window.HTMLUnknownElement ||
13941                el.constructor === window.HTMLElement);
13942    }
13943    else {
13944        return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()));
13945    }
13946}
13947var isTextInputType = makeMap('text,number,password,search,email,tel,url');
13948
13949/**
13950 * Query an element selector if it's not an element already.
13951 */
13952function query(el) {
13953    if (typeof el === 'string') {
13954        var selected = document.querySelector(el);
13955        if (!selected) {
13956             true && warn$2('Cannot find element: ' + el);
13957            return document.createElement('div');
13958        }
13959        return selected;
13960    }
13961    else {
13962        return el;
13963    }
13964}
13965
13966function createElement(tagName, vnode) {
13967    var elm = document.createElement(tagName);
13968    if (tagName !== 'select') {
13969        return elm;
13970    }
13971    // false or null will remove the attribute but undefined will not
13972    if (vnode.data &&
13973        vnode.data.attrs &&
13974        vnode.data.attrs.multiple !== undefined) {
13975        elm.setAttribute('multiple', 'multiple');
13976    }
13977    return elm;
13978}
13979function createElementNS(namespace, tagName) {
13980    return document.createElementNS(namespaceMap[namespace], tagName);
13981}
13982function createTextNode(text) {
13983    return document.createTextNode(text);
13984}
13985function createComment(text) {
13986    return document.createComment(text);
13987}
13988function insertBefore(parentNode, newNode, referenceNode) {
13989    parentNode.insertBefore(newNode, referenceNode);
13990}
13991function removeChild(node, child) {
13992    node.removeChild(child);
13993}
13994function appendChild(node, child) {
13995    node.appendChild(child);
13996}
13997function parentNode(node) {
13998    return node.parentNode;
13999}
14000function nextSibling(node) {
14001    return node.nextSibling;
14002}
14003function tagName(node) {
14004    return node.tagName;
14005}
14006function setTextContent(node, text) {
14007    node.textContent = text;
14008}
14009function setStyleScope(node, scopeId) {
14010    node.setAttribute(scopeId, '');
14011}
14012
14013var nodeOps = /*#__PURE__*/Object.freeze({
14014  __proto__: null,
14015  createElement: createElement,
14016  createElementNS: createElementNS,
14017  createTextNode: createTextNode,
14018  createComment: createComment,
14019  insertBefore: insertBefore,
14020  removeChild: removeChild,
14021  appendChild: appendChild,
14022  parentNode: parentNode,
14023  nextSibling: nextSibling,
14024  tagName: tagName,
14025  setTextContent: setTextContent,
14026  setStyleScope: setStyleScope
14027});
14028
14029var ref = {
14030    create: function (_, vnode) {
14031        registerRef(vnode);
14032    },
14033    update: function (oldVnode, vnode) {
14034        if (oldVnode.data.ref !== vnode.data.ref) {
14035            registerRef(oldVnode, true);
14036            registerRef(vnode);
14037        }
14038    },
14039    destroy: function (vnode) {
14040        registerRef(vnode, true);
14041    }
14042};
14043function registerRef(vnode, isRemoval) {
14044    var ref = vnode.data.ref;
14045    if (!isDef(ref))
14046        return;
14047    var vm = vnode.context;
14048    var refValue = vnode.componentInstance || vnode.elm;
14049    var value = isRemoval ? null : refValue;
14050    var $refsValue = isRemoval ? undefined : refValue;
14051    if (isFunction(ref)) {
14052        invokeWithErrorHandling(ref, vm, [value], vm, "template ref function");
14053        return;
14054    }
14055    var isFor = vnode.data.refInFor;
14056    var _isString = typeof ref === 'string' || typeof ref === 'number';
14057    var _isRef = isRef(ref);
14058    var refs = vm.$refs;
14059    if (_isString || _isRef) {
14060        if (isFor) {
14061            var existing = _isString ? refs[ref] : ref.value;
14062            if (isRemoval) {
14063                isArray(existing) && remove$2(existing, refValue);
14064            }
14065            else {
14066                if (!isArray(existing)) {
14067                    if (_isString) {
14068                        refs[ref] = [refValue];
14069                        setSetupRef(vm, ref, refs[ref]);
14070                    }
14071                    else {
14072                        ref.value = [refValue];
14073                    }
14074                }
14075                else if (!existing.includes(refValue)) {
14076                    existing.push(refValue);
14077                }
14078            }
14079        }
14080        else if (_isString) {
14081            if (isRemoval && refs[ref] !== refValue) {
14082                return;
14083            }
14084            refs[ref] = $refsValue;
14085            setSetupRef(vm, ref, value);
14086        }
14087        else if (_isRef) {
14088            if (isRemoval && ref.value !== refValue) {
14089                return;
14090            }
14091            ref.value = value;
14092        }
14093        else if (true) {
14094            warn$2("Invalid template ref type: ".concat(typeof ref));
14095        }
14096    }
14097}
14098function setSetupRef(_a, key, val) {
14099    var _setupState = _a._setupState;
14100    if (_setupState && hasOwn(_setupState, key)) {
14101        if (isRef(_setupState[key])) {
14102            _setupState[key].value = val;
14103        }
14104        else {
14105            _setupState[key] = val;
14106        }
14107    }
14108}
14109
14110/**
14111 * Virtual DOM patching algorithm based on Snabbdom by
14112 * Simon Friis Vindum (@paldepind)
14113 * Licensed under the MIT License
14114 * https://github.com/paldepind/snabbdom/blob/master/LICENSE
14115 *
14116 * modified by Evan You (@yyx990803)
14117 *
14118 * Not type-checking this because this file is perf-critical and the cost
14119 * of making flow understand it is not worth it.
14120 */
14121var emptyNode = new VNode('', {}, []);
14122var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
14123function sameVnode(a, b) {
14124    return (a.key === b.key &&
14125        a.asyncFactory === b.asyncFactory &&
14126        ((a.tag === b.tag &&
14127            a.isComment === b.isComment &&
14128            isDef(a.data) === isDef(b.data) &&
14129            sameInputType(a, b)) ||
14130            (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error))));
14131}
14132function sameInputType(a, b) {
14133    if (a.tag !== 'input')
14134        return true;
14135    var i;
14136    var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type;
14137    var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type;
14138    return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB));
14139}
14140function createKeyToOldIdx(children, beginIdx, endIdx) {
14141    var i, key;
14142    var map = {};
14143    for (i = beginIdx; i <= endIdx; ++i) {
14144        key = children[i].key;
14145        if (isDef(key))
14146            map[key] = i;
14147    }
14148    return map;
14149}
14150function createPatchFunction(backend) {
14151    var i, j;
14152    var cbs = {};
14153    var modules = backend.modules, nodeOps = backend.nodeOps;
14154    for (i = 0; i < hooks.length; ++i) {
14155        cbs[hooks[i]] = [];
14156        for (j = 0; j < modules.length; ++j) {
14157            if (isDef(modules[j][hooks[i]])) {
14158                cbs[hooks[i]].push(modules[j][hooks[i]]);
14159            }
14160        }
14161    }
14162    function emptyNodeAt(elm) {
14163        return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);
14164    }
14165    function createRmCb(childElm, listeners) {
14166        function remove() {
14167            if (--remove.listeners === 0) {
14168                removeNode(childElm);
14169            }
14170        }
14171        remove.listeners = listeners;
14172        return remove;
14173    }
14174    function removeNode(el) {
14175        var parent = nodeOps.parentNode(el);
14176        // element may have already been removed due to v-html / v-text
14177        if (isDef(parent)) {
14178            nodeOps.removeChild(parent, el);
14179        }
14180    }
14181    function isUnknownElement(vnode, inVPre) {
14182        return (!inVPre &&
14183            !vnode.ns &&
14184            !(config.ignoredElements.length &&
14185                config.ignoredElements.some(function (ignore) {
14186                    return isRegExp(ignore)
14187                        ? ignore.test(vnode.tag)
14188                        : ignore === vnode.tag;
14189                })) &&
14190            config.isUnknownElement(vnode.tag));
14191    }
14192    var creatingElmInVPre = 0;
14193    function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {
14194        if (isDef(vnode.elm) && isDef(ownerArray)) {
14195            // This vnode was used in a previous render!
14196            // now it's used as a new node, overwriting its elm would cause
14197            // potential patch errors down the road when it's used as an insertion
14198            // reference node. Instead, we clone the node on-demand before creating
14199            // associated DOM element for it.
14200            vnode = ownerArray[index] = cloneVNode(vnode);
14201        }
14202        vnode.isRootInsert = !nested; // for transition enter check
14203        if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
14204            return;
14205        }
14206        var data = vnode.data;
14207        var children = vnode.children;
14208        var tag = vnode.tag;
14209        if (isDef(tag)) {
14210            if (true) {
14211                if (data && data.pre) {
14212                    creatingElmInVPre++;
14213                }
14214                if (isUnknownElement(vnode, creatingElmInVPre)) {
14215                    warn$2('Unknown custom element: <' +
14216                        tag +
14217                        '> - did you ' +
14218                        'register the component correctly? For recursive components, ' +
14219                        'make sure to provide the "name" option.', vnode.context);
14220                }
14221            }
14222            vnode.elm = vnode.ns
14223                ? nodeOps.createElementNS(vnode.ns, tag)
14224                : nodeOps.createElement(tag, vnode);
14225            setScope(vnode);
14226            createChildren(vnode, children, insertedVnodeQueue);
14227            if (isDef(data)) {
14228                invokeCreateHooks(vnode, insertedVnodeQueue);
14229            }
14230            insert(parentElm, vnode.elm, refElm);
14231            if ( true && data && data.pre) {
14232                creatingElmInVPre--;
14233            }
14234        }
14235        else if (isTrue(vnode.isComment)) {
14236            vnode.elm = nodeOps.createComment(vnode.text);
14237            insert(parentElm, vnode.elm, refElm);
14238        }
14239        else {
14240            vnode.elm = nodeOps.createTextNode(vnode.text);
14241            insert(parentElm, vnode.elm, refElm);
14242        }
14243    }
14244    function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
14245        var i = vnode.data;
14246        if (isDef(i)) {
14247            var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
14248            if (isDef((i = i.hook)) && isDef((i = i.init))) {
14249                i(vnode, false /* hydrating */);
14250            }
14251            // after calling the init hook, if the vnode is a child component
14252            // it should've created a child instance and mounted it. the child
14253            // component also has set the placeholder vnode's elm.
14254            // in that case we can just return the element and be done.
14255            if (isDef(vnode.componentInstance)) {
14256                initComponent(vnode, insertedVnodeQueue);
14257                insert(parentElm, vnode.elm, refElm);
14258                if (isTrue(isReactivated)) {
14259                    reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
14260                }
14261                return true;
14262            }
14263        }
14264    }
14265    function initComponent(vnode, insertedVnodeQueue) {
14266        if (isDef(vnode.data.pendingInsert)) {
14267            insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
14268            vnode.data.pendingInsert = null;
14269        }
14270        vnode.elm = vnode.componentInstance.$el;
14271        if (isPatchable(vnode)) {
14272            invokeCreateHooks(vnode, insertedVnodeQueue);
14273            setScope(vnode);
14274        }
14275        else {
14276            // empty component root.
14277            // skip all element-related modules except for ref (#3455)
14278            registerRef(vnode);
14279            // make sure to invoke the insert hook
14280            insertedVnodeQueue.push(vnode);
14281        }
14282    }
14283    function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
14284        var i;
14285        // hack for #4339: a reactivated component with inner transition
14286        // does not trigger because the inner node's created hooks are not called
14287        // again. It's not ideal to involve module-specific logic in here but
14288        // there doesn't seem to be a better way to do it.
14289        var innerNode = vnode;
14290        while (innerNode.componentInstance) {
14291            innerNode = innerNode.componentInstance._vnode;
14292            if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {
14293                for (i = 0; i < cbs.activate.length; ++i) {
14294                    cbs.activate[i](emptyNode, innerNode);
14295                }
14296                insertedVnodeQueue.push(innerNode);
14297                break;
14298            }
14299        }
14300        // unlike a newly created component,
14301        // a reactivated keep-alive component doesn't insert itself
14302        insert(parentElm, vnode.elm, refElm);
14303    }
14304    function insert(parent, elm, ref) {
14305        if (isDef(parent)) {
14306            if (isDef(ref)) {
14307                if (nodeOps.parentNode(ref) === parent) {
14308                    nodeOps.insertBefore(parent, elm, ref);
14309                }
14310            }
14311            else {
14312                nodeOps.appendChild(parent, elm);
14313            }
14314        }
14315    }
14316    function createChildren(vnode, children, insertedVnodeQueue) {
14317        if (isArray(children)) {
14318            if (true) {
14319                checkDuplicateKeys(children);
14320            }
14321            for (var i_1 = 0; i_1 < children.length; ++i_1) {
14322                createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1);
14323            }
14324        }
14325        else if (isPrimitive(vnode.text)) {
14326            nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
14327        }
14328    }
14329    function isPatchable(vnode) {
14330        while (vnode.componentInstance) {
14331            vnode = vnode.componentInstance._vnode;
14332        }
14333        return isDef(vnode.tag);
14334    }
14335    function invokeCreateHooks(vnode, insertedVnodeQueue) {
14336        for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) {
14337            cbs.create[i_2](emptyNode, vnode);
14338        }
14339        i = vnode.data.hook; // Reuse variable
14340        if (isDef(i)) {
14341            if (isDef(i.create))
14342                i.create(emptyNode, vnode);
14343            if (isDef(i.insert))
14344                insertedVnodeQueue.push(vnode);
14345        }
14346    }
14347    // set scope id attribute for scoped CSS.
14348    // this is implemented as a special case to avoid the overhead
14349    // of going through the normal attribute patching process.
14350    function setScope(vnode) {
14351        var i;
14352        if (isDef((i = vnode.fnScopeId))) {
14353            nodeOps.setStyleScope(vnode.elm, i);
14354        }
14355        else {
14356            var ancestor = vnode;
14357            while (ancestor) {
14358                if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {
14359                    nodeOps.setStyleScope(vnode.elm, i);
14360                }
14361                ancestor = ancestor.parent;
14362            }
14363        }
14364        // for slot content they should also get the scopeId from the host instance.
14365        if (isDef((i = activeInstance)) &&
14366            i !== vnode.context &&
14367            i !== vnode.fnContext &&
14368            isDef((i = i.$options._scopeId))) {
14369            nodeOps.setStyleScope(vnode.elm, i);
14370        }
14371    }
14372    function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
14373        for (; startIdx <= endIdx; ++startIdx) {
14374            createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
14375        }
14376    }
14377    function invokeDestroyHook(vnode) {
14378        var i, j;
14379        var data = vnode.data;
14380        if (isDef(data)) {
14381            if (isDef((i = data.hook)) && isDef((i = i.destroy)))
14382                i(vnode);
14383            for (i = 0; i < cbs.destroy.length; ++i)
14384                cbs.destroy[i](vnode);
14385        }
14386        if (isDef((i = vnode.children))) {
14387            for (j = 0; j < vnode.children.length; ++j) {
14388                invokeDestroyHook(vnode.children[j]);
14389            }
14390        }
14391    }
14392    function removeVnodes(vnodes, startIdx, endIdx) {
14393        for (; startIdx <= endIdx; ++startIdx) {
14394            var ch = vnodes[startIdx];
14395            if (isDef(ch)) {
14396                if (isDef(ch.tag)) {
14397                    removeAndInvokeRemoveHook(ch);
14398                    invokeDestroyHook(ch);
14399                }
14400                else {
14401                    // Text node
14402                    removeNode(ch.elm);
14403                }
14404            }
14405        }
14406    }
14407    function removeAndInvokeRemoveHook(vnode, rm) {
14408        if (isDef(rm) || isDef(vnode.data)) {
14409            var i_3;
14410            var listeners = cbs.remove.length + 1;
14411            if (isDef(rm)) {
14412                // we have a recursively passed down rm callback
14413                // increase the listeners count
14414                rm.listeners += listeners;
14415            }
14416            else {
14417                // directly removing
14418                rm = createRmCb(vnode.elm, listeners);
14419            }
14420            // recursively invoke hooks on child component root node
14421            if (isDef((i_3 = vnode.componentInstance)) &&
14422                isDef((i_3 = i_3._vnode)) &&
14423                isDef(i_3.data)) {
14424                removeAndInvokeRemoveHook(i_3, rm);
14425            }
14426            for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) {
14427                cbs.remove[i_3](vnode, rm);
14428            }
14429            if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) {
14430                i_3(vnode, rm);
14431            }
14432            else {
14433                rm();
14434            }
14435        }
14436        else {
14437            removeNode(vnode.elm);
14438        }
14439    }
14440    function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
14441        var oldStartIdx = 0;
14442        var newStartIdx = 0;
14443        var oldEndIdx = oldCh.length - 1;
14444        var oldStartVnode = oldCh[0];
14445        var oldEndVnode = oldCh[oldEndIdx];
14446        var newEndIdx = newCh.length - 1;
14447        var newStartVnode = newCh[0];
14448        var newEndVnode = newCh[newEndIdx];
14449        var oldKeyToIdx, idxInOld, vnodeToMove, refElm;
14450        // removeOnly is a special flag used only by <transition-group>
14451        // to ensure removed elements stay in correct relative positions
14452        // during leaving transitions
14453        var canMove = !removeOnly;
14454        if (true) {
14455            checkDuplicateKeys(newCh);
14456        }
14457        while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
14458            if (isUndef(oldStartVnode)) {
14459                oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
14460            }
14461            else if (isUndef(oldEndVnode)) {
14462                oldEndVnode = oldCh[--oldEndIdx];
14463            }
14464            else if (sameVnode(oldStartVnode, newStartVnode)) {
14465                patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
14466                oldStartVnode = oldCh[++oldStartIdx];
14467                newStartVnode = newCh[++newStartIdx];
14468            }
14469            else if (sameVnode(oldEndVnode, newEndVnode)) {
14470                patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
14471                oldEndVnode = oldCh[--oldEndIdx];
14472                newEndVnode = newCh[--newEndIdx];
14473            }
14474            else if (sameVnode(oldStartVnode, newEndVnode)) {
14475                // Vnode moved right
14476                patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
14477                canMove &&
14478                    nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
14479                oldStartVnode = oldCh[++oldStartIdx];
14480                newEndVnode = newCh[--newEndIdx];
14481            }
14482            else if (sameVnode(oldEndVnode, newStartVnode)) {
14483                // Vnode moved left
14484                patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
14485                canMove &&
14486                    nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
14487                oldEndVnode = oldCh[--oldEndIdx];
14488                newStartVnode = newCh[++newStartIdx];
14489            }
14490            else {
14491                if (isUndef(oldKeyToIdx))
14492                    oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);
14493                idxInOld = isDef(newStartVnode.key)
14494                    ? oldKeyToIdx[newStartVnode.key]
14495                    : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
14496                if (isUndef(idxInOld)) {
14497                    // New element
14498                    createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
14499                }
14500                else {
14501                    vnodeToMove = oldCh[idxInOld];
14502                    if (sameVnode(vnodeToMove, newStartVnode)) {
14503                        patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
14504                        oldCh[idxInOld] = undefined;
14505                        canMove &&
14506                            nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
14507                    }
14508                    else {
14509                        // same key but different element. treat as new element
14510                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
14511                    }
14512                }
14513                newStartVnode = newCh[++newStartIdx];
14514            }
14515        }
14516        if (oldStartIdx > oldEndIdx) {
14517            refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
14518            addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
14519        }
14520        else if (newStartIdx > newEndIdx) {
14521            removeVnodes(oldCh, oldStartIdx, oldEndIdx);
14522        }
14523    }
14524    function checkDuplicateKeys(children) {
14525        var seenKeys = {};
14526        for (var i_4 = 0; i_4 < children.length; i_4++) {
14527            var vnode = children[i_4];
14528            var key = vnode.key;
14529            if (isDef(key)) {
14530                if (seenKeys[key]) {
14531                    warn$2("Duplicate keys detected: '".concat(key, "'. This may cause an update error."), vnode.context);
14532                }
14533                else {
14534                    seenKeys[key] = true;
14535                }
14536            }
14537        }
14538    }
14539    function findIdxInOld(node, oldCh, start, end) {
14540        for (var i_5 = start; i_5 < end; i_5++) {
14541            var c = oldCh[i_5];
14542            if (isDef(c) && sameVnode(node, c))
14543                return i_5;
14544        }
14545    }
14546    function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {
14547        if (oldVnode === vnode) {
14548            return;
14549        }
14550        if (isDef(vnode.elm) && isDef(ownerArray)) {
14551            // clone reused vnode
14552            vnode = ownerArray[index] = cloneVNode(vnode);
14553        }
14554        var elm = (vnode.elm = oldVnode.elm);
14555        if (isTrue(oldVnode.isAsyncPlaceholder)) {
14556            if (isDef(vnode.asyncFactory.resolved)) {
14557                hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
14558            }
14559            else {
14560                vnode.isAsyncPlaceholder = true;
14561            }
14562            return;
14563        }
14564        // reuse element for static trees.
14565        // note we only do this if the vnode is cloned -
14566        // if the new node is not cloned it means the render functions have been
14567        // reset by the hot-reload-api and we need to do a proper re-render.
14568        if (isTrue(vnode.isStatic) &&
14569            isTrue(oldVnode.isStatic) &&
14570            vnode.key === oldVnode.key &&
14571            (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {
14572            vnode.componentInstance = oldVnode.componentInstance;
14573            return;
14574        }
14575        var i;
14576        var data = vnode.data;
14577        if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {
14578            i(oldVnode, vnode);
14579        }
14580        var oldCh = oldVnode.children;
14581        var ch = vnode.children;
14582        if (isDef(data) && isPatchable(vnode)) {
14583            for (i = 0; i < cbs.update.length; ++i)
14584                cbs.update[i](oldVnode, vnode);
14585            if (isDef((i = data.hook)) && isDef((i = i.update)))
14586                i(oldVnode, vnode);
14587        }
14588        if (isUndef(vnode.text)) {
14589            if (isDef(oldCh) && isDef(ch)) {
14590                if (oldCh !== ch)
14591                    updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);
14592            }
14593            else if (isDef(ch)) {
14594                if (true) {
14595                    checkDuplicateKeys(ch);
14596                }
14597                if (isDef(oldVnode.text))
14598                    nodeOps.setTextContent(elm, '');
14599                addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
14600            }
14601            else if (isDef(oldCh)) {
14602                removeVnodes(oldCh, 0, oldCh.length - 1);
14603            }
14604            else if (isDef(oldVnode.text)) {
14605                nodeOps.setTextContent(elm, '');
14606            }
14607        }
14608        else if (oldVnode.text !== vnode.text) {
14609            nodeOps.setTextContent(elm, vnode.text);
14610        }
14611        if (isDef(data)) {
14612            if (isDef((i = data.hook)) && isDef((i = i.postpatch)))
14613                i(oldVnode, vnode);
14614        }
14615    }
14616    function invokeInsertHook(vnode, queue, initial) {
14617        // delay insert hooks for component root nodes, invoke them after the
14618        // element is really inserted
14619        if (isTrue(initial) && isDef(vnode.parent)) {
14620            vnode.parent.data.pendingInsert = queue;
14621        }
14622        else {
14623            for (var i_6 = 0; i_6 < queue.length; ++i_6) {
14624                queue[i_6].data.hook.insert(queue[i_6]);
14625            }
14626        }
14627    }
14628    var hydrationBailed = false;
14629    // list of modules that can skip create hook during hydration because they
14630    // are already rendered on the client or has no need for initialization
14631    // Note: style is excluded because it relies on initial clone for future
14632    // deep updates (#7063).
14633    var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
14634    // Note: this is a browser-only function so we can assume elms are DOM nodes.
14635    function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {
14636        var i;
14637        var tag = vnode.tag, data = vnode.data, children = vnode.children;
14638        inVPre = inVPre || (data && data.pre);
14639        vnode.elm = elm;
14640        if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
14641            vnode.isAsyncPlaceholder = true;
14642            return true;
14643        }
14644        // assert node match
14645        if (true) {
14646            if (!assertNodeMatch(elm, vnode, inVPre)) {
14647                return false;
14648            }
14649        }
14650        if (isDef(data)) {
14651            if (isDef((i = data.hook)) && isDef((i = i.init)))
14652                i(vnode, true /* hydrating */);
14653            if (isDef((i = vnode.componentInstance))) {
14654                // child component. it should have hydrated its own tree.
14655                initComponent(vnode, insertedVnodeQueue);
14656                return true;
14657            }
14658        }
14659        if (isDef(tag)) {
14660            if (isDef(children)) {
14661                // empty element, allow client to pick up and populate children
14662                if (!elm.hasChildNodes()) {
14663                    createChildren(vnode, children, insertedVnodeQueue);
14664                }
14665                else {
14666                    // v-html and domProps: innerHTML
14667                    if (isDef((i = data)) &&
14668                        isDef((i = i.domProps)) &&
14669                        isDef((i = i.innerHTML))) {
14670                        if (i !== elm.innerHTML) {
14671                            /* istanbul ignore if */
14672                            if ( true &&
14673                                typeof console !== 'undefined' &&
14674                                !hydrationBailed) {
14675                                hydrationBailed = true;
14676                                console.warn('Parent: ', elm);
14677                                console.warn('server innerHTML: ', i);
14678                                console.warn('client innerHTML: ', elm.innerHTML);
14679                            }
14680                            return false;
14681                        }
14682                    }
14683                    else {
14684                        // iterate and compare children lists
14685                        var childrenMatch = true;
14686                        var childNode = elm.firstChild;
14687                        for (var i_7 = 0; i_7 < children.length; i_7++) {
14688                            if (!childNode ||
14689                                !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) {
14690                                childrenMatch = false;
14691                                break;
14692                            }
14693                            childNode = childNode.nextSibling;
14694                        }
14695                        // if childNode is not null, it means the actual childNodes list is
14696                        // longer than the virtual children list.
14697                        if (!childrenMatch || childNode) {
14698                            /* istanbul ignore if */
14699                            if ( true &&
14700                                typeof console !== 'undefined' &&
14701                                !hydrationBailed) {
14702                                hydrationBailed = true;
14703                                console.warn('Parent: ', elm);
14704                                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
14705                            }
14706                            return false;
14707                        }
14708                    }
14709                }
14710            }
14711            if (isDef(data)) {
14712                var fullInvoke = false;
14713                for (var key in data) {
14714                    if (!isRenderedModule(key)) {
14715                        fullInvoke = true;
14716                        invokeCreateHooks(vnode, insertedVnodeQueue);
14717                        break;
14718                    }
14719                }
14720                if (!fullInvoke && data['class']) {
14721                    // ensure collecting deps for deep class bindings for future updates
14722                    traverse(data['class']);
14723                }
14724            }
14725        }
14726        else if (elm.data !== vnode.text) {
14727            elm.data = vnode.text;
14728        }
14729        return true;
14730    }
14731    function assertNodeMatch(node, vnode, inVPre) {
14732        if (isDef(vnode.tag)) {
14733            return (vnode.tag.indexOf('vue-component') === 0 ||
14734                (!isUnknownElement(vnode, inVPre) &&
14735                    vnode.tag.toLowerCase() ===
14736                        (node.tagName && node.tagName.toLowerCase())));
14737        }
14738        else {
14739            return node.nodeType === (vnode.isComment ? 8 : 3);
14740        }
14741    }
14742    return function patch(oldVnode, vnode, hydrating, removeOnly) {
14743        if (isUndef(vnode)) {
14744            if (isDef(oldVnode))
14745                invokeDestroyHook(oldVnode);
14746            return;
14747        }
14748        var isInitialPatch = false;
14749        var insertedVnodeQueue = [];
14750        if (isUndef(oldVnode)) {
14751            // empty mount (likely as component), create new root element
14752            isInitialPatch = true;
14753            createElm(vnode, insertedVnodeQueue);
14754        }
14755        else {
14756            var isRealElement = isDef(oldVnode.nodeType);
14757            if (!isRealElement && sameVnode(oldVnode, vnode)) {
14758                // patch existing root node
14759                patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);
14760            }
14761            else {
14762                if (isRealElement) {
14763                    // mounting to a real element
14764                    // check if this is server-rendered content and if we can perform
14765                    // a successful hydration.
14766                    if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
14767                        oldVnode.removeAttribute(SSR_ATTR);
14768                        hydrating = true;
14769                    }
14770                    if (isTrue(hydrating)) {
14771                        if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
14772                            invokeInsertHook(vnode, insertedVnodeQueue, true);
14773                            return oldVnode;
14774                        }
14775                        else if (true) {
14776                            warn$2('The client-side rendered virtual DOM tree is not matching ' +
14777                                'server-rendered content. This is likely caused by incorrect ' +
14778                                'HTML markup, for example nesting block-level elements inside ' +
14779                                '<p>, or missing <tbody>. Bailing hydration and performing ' +
14780                                'full client-side render.');
14781                        }
14782                    }
14783                    // either not server-rendered, or hydration failed.
14784                    // create an empty node and replace it
14785                    oldVnode = emptyNodeAt(oldVnode);
14786                }
14787                // replacing existing element
14788                var oldElm = oldVnode.elm;
14789                var parentElm = nodeOps.parentNode(oldElm);
14790                // create new node
14791                createElm(vnode, insertedVnodeQueue, 
14792                // extremely rare edge case: do not insert if old element is in a
14793                // leaving transition. Only happens when combining transition +
14794                // keep-alive + HOCs. (#4590)
14795                oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));
14796                // update parent placeholder node element, recursively
14797                if (isDef(vnode.parent)) {
14798                    var ancestor = vnode.parent;
14799                    var patchable = isPatchable(vnode);
14800                    while (ancestor) {
14801                        for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) {
14802                            cbs.destroy[i_8](ancestor);
14803                        }
14804                        ancestor.elm = vnode.elm;
14805                        if (patchable) {
14806                            for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) {
14807                                cbs.create[i_9](emptyNode, ancestor);
14808                            }
14809                            // #6513
14810                            // invoke insert hooks that may have been merged by create hooks.
14811                            // e.g. for directives that uses the "inserted" hook.
14812                            var insert_1 = ancestor.data.hook.insert;
14813                            if (insert_1.merged) {
14814                                // start at index 1 to avoid re-invoking component mounted hook
14815                                for (var i_10 = 1; i_10 < insert_1.fns.length; i_10++) {
14816                                    insert_1.fns[i_10]();
14817                                }
14818                            }
14819                        }
14820                        else {
14821                            registerRef(ancestor);
14822                        }
14823                        ancestor = ancestor.parent;
14824                    }
14825                }
14826                // destroy old node
14827                if (isDef(parentElm)) {
14828                    removeVnodes([oldVnode], 0, 0);
14829                }
14830                else if (isDef(oldVnode.tag)) {
14831                    invokeDestroyHook(oldVnode);
14832                }
14833            }
14834        }
14835        invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
14836        return vnode.elm;
14837    };
14838}
14839
14840var directives$1 = {
14841    create: updateDirectives,
14842    update: updateDirectives,
14843    destroy: function unbindDirectives(vnode) {
14844        // @ts-expect-error emptyNode is not VNodeWithData
14845        updateDirectives(vnode, emptyNode);
14846    }
14847};
14848function updateDirectives(oldVnode, vnode) {
14849    if (oldVnode.data.directives || vnode.data.directives) {
14850        _update(oldVnode, vnode);
14851    }
14852}
14853function _update(oldVnode, vnode) {
14854    var isCreate = oldVnode === emptyNode;
14855    var isDestroy = vnode === emptyNode;
14856    var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);
14857    var newDirs = normalizeDirectives(vnode.data.directives, vnode.context);
14858    var dirsWithInsert = [];
14859    var dirsWithPostpatch = [];
14860    var key, oldDir, dir;
14861    for (key in newDirs) {
14862        oldDir = oldDirs[key];
14863        dir = newDirs[key];
14864        if (!oldDir) {
14865            // new directive, bind
14866            callHook(dir, 'bind', vnode, oldVnode);
14867            if (dir.def && dir.def.inserted) {
14868                dirsWithInsert.push(dir);
14869            }
14870        }
14871        else {
14872            // existing directive, update
14873            dir.oldValue = oldDir.value;
14874            dir.oldArg = oldDir.arg;
14875            callHook(dir, 'update', vnode, oldVnode);
14876            if (dir.def && dir.def.componentUpdated) {
14877                dirsWithPostpatch.push(dir);
14878            }
14879        }
14880    }
14881    if (dirsWithInsert.length) {
14882        var callInsert = function () {
14883            for (var i = 0; i < dirsWithInsert.length; i++) {
14884                callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);
14885            }
14886        };
14887        if (isCreate) {
14888            mergeVNodeHook(vnode, 'insert', callInsert);
14889        }
14890        else {
14891            callInsert();
14892        }
14893    }
14894    if (dirsWithPostpatch.length) {
14895        mergeVNodeHook(vnode, 'postpatch', function () {
14896            for (var i = 0; i < dirsWithPostpatch.length; i++) {
14897                callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
14898            }
14899        });
14900    }
14901    if (!isCreate) {
14902        for (key in oldDirs) {
14903            if (!newDirs[key]) {
14904                // no longer present, unbind
14905                callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
14906            }
14907        }
14908    }
14909}
14910var emptyModifiers = Object.create(null);
14911function normalizeDirectives(dirs, vm) {
14912    var res = Object.create(null);
14913    if (!dirs) {
14914        // $flow-disable-line
14915        return res;
14916    }
14917    var i, dir;
14918    for (i = 0; i < dirs.length; i++) {
14919        dir = dirs[i];
14920        if (!dir.modifiers) {
14921            // $flow-disable-line
14922            dir.modifiers = emptyModifiers;
14923        }
14924        res[getRawDirName(dir)] = dir;
14925        if (vm._setupState && vm._setupState.__sfc) {
14926            var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);
14927            if (typeof setupDef === 'function') {
14928                dir.def = {
14929                    bind: setupDef,
14930                    update: setupDef,
14931                };
14932            }
14933            else {
14934                dir.def = setupDef;
14935            }
14936        }
14937        dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);
14938    }
14939    // $flow-disable-line
14940    return res;
14941}
14942function getRawDirName(dir) {
14943    return (dir.rawName || "".concat(dir.name, ".").concat(Object.keys(dir.modifiers || {}).join('.')));
14944}
14945function callHook(dir, hook, vnode, oldVnode, isDestroy) {
14946    var fn = dir.def && dir.def[hook];
14947    if (fn) {
14948        try {
14949            fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
14950        }
14951        catch (e) {
14952            handleError(e, vnode.context, "directive ".concat(dir.name, " ").concat(hook, " hook"));
14953        }
14954    }
14955}
14956
14957var baseModules = [ref, directives$1];
14958
14959function updateAttrs(oldVnode, vnode) {
14960    var opts = vnode.componentOptions;
14961    if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
14962        return;
14963    }
14964    if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
14965        return;
14966    }
14967    var key, cur, old;
14968    var elm = vnode.elm;
14969    var oldAttrs = oldVnode.data.attrs || {};
14970    var attrs = vnode.data.attrs || {};
14971    // clone observed objects, as the user probably wants to mutate it
14972    if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {
14973        attrs = vnode.data.attrs = extend({}, attrs);
14974    }
14975    for (key in attrs) {
14976        cur = attrs[key];
14977        old = oldAttrs[key];
14978        if (old !== cur) {
14979            setAttr(elm, key, cur, vnode.data.pre);
14980        }
14981    }
14982    // #4391: in IE9, setting type can reset value for input[type=radio]
14983    // #6666: IE/Edge forces progress value down to 1 before setting a max
14984    /* istanbul ignore if */
14985    if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
14986        setAttr(elm, 'value', attrs.value);
14987    }
14988    for (key in oldAttrs) {
14989        if (isUndef(attrs[key])) {
14990            if (isXlink(key)) {
14991                elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
14992            }
14993            else if (!isEnumeratedAttr(key)) {
14994                elm.removeAttribute(key);
14995            }
14996        }
14997    }
14998}
14999function setAttr(el, key, value, isInPre) {
15000    if (isInPre || el.tagName.indexOf('-') > -1) {
15001        baseSetAttr(el, key, value);
15002    }
15003    else if (isBooleanAttr(key)) {
15004        // set attribute for blank value
15005        // e.g. <option disabled>Select one</option>
15006        if (isFalsyAttrValue(value)) {
15007            el.removeAttribute(key);
15008        }
15009        else {
15010            // technically allowfullscreen is a boolean attribute for <iframe>,
15011            // but Flash expects a value of "true" when used on <embed> tag
15012            value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;
15013            el.setAttribute(key, value);
15014        }
15015    }
15016    else if (isEnumeratedAttr(key)) {
15017        el.setAttribute(key, convertEnumeratedValue(key, value));
15018    }
15019    else if (isXlink(key)) {
15020        if (isFalsyAttrValue(value)) {
15021            el.removeAttributeNS(xlinkNS, getXlinkProp(key));
15022        }
15023        else {
15024            el.setAttributeNS(xlinkNS, key, value);
15025        }
15026    }
15027    else {
15028        baseSetAttr(el, key, value);
15029    }
15030}
15031function baseSetAttr(el, key, value) {
15032    if (isFalsyAttrValue(value)) {
15033        el.removeAttribute(key);
15034    }
15035    else {
15036        // #7138: IE10 & 11 fires input event when setting placeholder on
15037        // <textarea>... block the first input event and remove the blocker
15038        // immediately.
15039        /* istanbul ignore if */
15040        if (isIE &&
15041            !isIE9 &&
15042            el.tagName === 'TEXTAREA' &&
15043            key === 'placeholder' &&
15044            value !== '' &&
15045            !el.__ieph) {
15046            var blocker_1 = function (e) {
15047                e.stopImmediatePropagation();
15048                el.removeEventListener('input', blocker_1);
15049            };
15050            el.addEventListener('input', blocker_1);
15051            // $flow-disable-line
15052            el.__ieph = true; /* IE placeholder patched */
15053        }
15054        el.setAttribute(key, value);
15055    }
15056}
15057var attrs = {
15058    create: updateAttrs,
15059    update: updateAttrs
15060};
15061
15062function updateClass(oldVnode, vnode) {
15063    var el = vnode.elm;
15064    var data = vnode.data;
15065    var oldData = oldVnode.data;
15066    if (isUndef(data.staticClass) &&
15067        isUndef(data.class) &&
15068        (isUndef(oldData) ||
15069            (isUndef(oldData.staticClass) && isUndef(oldData.class)))) {
15070        return;
15071    }
15072    var cls = genClassForVnode(vnode);
15073    // handle transition classes
15074    var transitionClass = el._transitionClasses;
15075    if (isDef(transitionClass)) {
15076        cls = concat(cls, stringifyClass(transitionClass));
15077    }
15078    // set the class
15079    if (cls !== el._prevClass) {
15080        el.setAttribute('class', cls);
15081        el._prevClass = cls;
15082    }
15083}
15084var klass$1 = {
15085    create: updateClass,
15086    update: updateClass
15087};
15088
15089var validDivisionCharRE = /[\w).+\-_$\]]/;
15090function parseFilters(exp) {
15091    var inSingle = false;
15092    var inDouble = false;
15093    var inTemplateString = false;
15094    var inRegex = false;
15095    var curly = 0;
15096    var square = 0;
15097    var paren = 0;
15098    var lastFilterIndex = 0;
15099    var c, prev, i, expression, filters;
15100    for (i = 0; i < exp.length; i++) {
15101        prev = c;
15102        c = exp.charCodeAt(i);
15103        if (inSingle) {
15104            if (c === 0x27 && prev !== 0x5c)
15105                inSingle = false;
15106        }
15107        else if (inDouble) {
15108            if (c === 0x22 && prev !== 0x5c)
15109                inDouble = false;
15110        }
15111        else if (inTemplateString) {
15112            if (c === 0x60 && prev !== 0x5c)
15113                inTemplateString = false;
15114        }
15115        else if (inRegex) {
15116            if (c === 0x2f && prev !== 0x5c)
15117                inRegex = false;
15118        }
15119        else if (c === 0x7c && // pipe
15120            exp.charCodeAt(i + 1) !== 0x7c &&
15121            exp.charCodeAt(i - 1) !== 0x7c &&
15122            !curly &&
15123            !square &&
15124            !paren) {
15125            if (expression === undefined) {
15126                // first filter, end of expression
15127                lastFilterIndex = i + 1;
15128                expression = exp.slice(0, i).trim();
15129            }
15130            else {
15131                pushFilter();
15132            }
15133        }
15134        else {
15135            switch (c) {
15136                case 0x22:
15137                    inDouble = true;
15138                    break; // "
15139                case 0x27:
15140                    inSingle = true;
15141                    break; // '
15142                case 0x60:
15143                    inTemplateString = true;
15144                    break; // `
15145                case 0x28:
15146                    paren++;
15147                    break; // (
15148                case 0x29:
15149                    paren--;
15150                    break; // )
15151                case 0x5b:
15152                    square++;
15153                    break; // [
15154                case 0x5d:
15155                    square--;
15156                    break; // ]
15157                case 0x7b:
15158                    curly++;
15159                    break; // {
15160                case 0x7d:
15161                    curly--;
15162                    break; // }
15163            }
15164            if (c === 0x2f) {
15165                // /
15166                var j = i - 1;
15167                var p 
15168                // find first non-whitespace prev char
15169                = void 0;
15170                // find first non-whitespace prev char
15171                for (; j >= 0; j--) {
15172                    p = exp.charAt(j);
15173                    if (p !== ' ')
15174                        break;
15175                }
15176                if (!p || !validDivisionCharRE.test(p)) {
15177                    inRegex = true;
15178                }
15179            }
15180        }
15181    }
15182    if (expression === undefined) {
15183        expression = exp.slice(0, i).trim();
15184    }
15185    else if (lastFilterIndex !== 0) {
15186        pushFilter();
15187    }
15188    function pushFilter() {
15189        (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
15190        lastFilterIndex = i + 1;
15191    }
15192    if (filters) {
15193        for (i = 0; i < filters.length; i++) {
15194            expression = wrapFilter(expression, filters[i]);
15195        }
15196    }
15197    return expression;
15198}
15199function wrapFilter(exp, filter) {
15200    var i = filter.indexOf('(');
15201    if (i < 0) {
15202        // _f: resolveFilter
15203        return "_f(\"".concat(filter, "\")(").concat(exp, ")");
15204    }
15205    else {
15206        var name_1 = filter.slice(0, i);
15207        var args = filter.slice(i + 1);
15208        return "_f(\"".concat(name_1, "\")(").concat(exp).concat(args !== ')' ? ',' + args : args);
15209    }
15210}
15211
15212/* eslint-disable no-unused-vars */
15213function baseWarn(msg, range) {
15214    console.error("[Vue compiler]: ".concat(msg));
15215}
15216/* eslint-enable no-unused-vars */
15217function pluckModuleFunction(modules, key) {
15218    return modules ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) : [];
15219}
15220function addProp(el, name, value, range, dynamic) {
15221    (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
15222    el.plain = false;
15223}
15224function addAttr(el, name, value, range, dynamic) {
15225    var attrs = dynamic
15226        ? el.dynamicAttrs || (el.dynamicAttrs = [])
15227        : el.attrs || (el.attrs = []);
15228    attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
15229    el.plain = false;
15230}
15231// add a raw attr (use this in preTransforms)
15232function addRawAttr(el, name, value, range) {
15233    el.attrsMap[name] = value;
15234    el.attrsList.push(rangeSetItem({ name: name, value: value }, range));
15235}
15236function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {
15237    (el.directives || (el.directives = [])).push(rangeSetItem({
15238        name: name,
15239        rawName: rawName,
15240        value: value,
15241        arg: arg,
15242        isDynamicArg: isDynamicArg,
15243        modifiers: modifiers
15244    }, range));
15245    el.plain = false;
15246}
15247function prependModifierMarker(symbol, name, dynamic) {
15248    return dynamic ? "_p(".concat(name, ",\"").concat(symbol, "\")") : symbol + name; // mark the event as captured
15249}
15250function addHandler(el, name, value, modifiers, important, warn, range, dynamic) {
15251    modifiers = modifiers || emptyObject;
15252    // warn prevent and passive modifier
15253    /* istanbul ignore if */
15254    if ( true && warn && modifiers.prevent && modifiers.passive) {
15255        warn("passive and prevent can't be used together. " +
15256            "Passive handler can't prevent default event.", range);
15257    }
15258    // normalize click.right and click.middle since they don't actually fire
15259    // this is technically browser-specific, but at least for now browsers are
15260    // the only target envs that have right/middle clicks.
15261    if (modifiers.right) {
15262        if (dynamic) {
15263            name = "(".concat(name, ")==='click'?'contextmenu':(").concat(name, ")");
15264        }
15265        else if (name === 'click') {
15266            name = 'contextmenu';
15267            delete modifiers.right;
15268        }
15269    }
15270    else if (modifiers.middle) {
15271        if (dynamic) {
15272            name = "(".concat(name, ")==='click'?'mouseup':(").concat(name, ")");
15273        }
15274        else if (name === 'click') {
15275            name = 'mouseup';
15276        }
15277    }
15278    // check capture modifier
15279    if (modifiers.capture) {
15280        delete modifiers.capture;
15281        name = prependModifierMarker('!', name, dynamic);
15282    }
15283    if (modifiers.once) {
15284        delete modifiers.once;
15285        name = prependModifierMarker('~', name, dynamic);
15286    }
15287    /* istanbul ignore if */
15288    if (modifiers.passive) {
15289        delete modifiers.passive;
15290        name = prependModifierMarker('&', name, dynamic);
15291    }
15292    var events;
15293    if (modifiers.native) {
15294        delete modifiers.native;
15295        events = el.nativeEvents || (el.nativeEvents = {});
15296    }
15297    else {
15298        events = el.events || (el.events = {});
15299    }
15300    var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);
15301    if (modifiers !== emptyObject) {
15302        newHandler.modifiers = modifiers;
15303    }
15304    var handlers = events[name];
15305    /* istanbul ignore if */
15306    if (Array.isArray(handlers)) {
15307        important ? handlers.unshift(newHandler) : handlers.push(newHandler);
15308    }
15309    else if (handlers) {
15310        events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
15311    }
15312    else {
15313        events[name] = newHandler;
15314    }
15315    el.plain = false;
15316}
15317function getRawBindingAttr(el, name) {
15318    return (el.rawAttrsMap[':' + name] ||
15319        el.rawAttrsMap['v-bind:' + name] ||
15320        el.rawAttrsMap[name]);
15321}
15322function getBindingAttr(el, name, getStatic) {
15323    var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);
15324    if (dynamicValue != null) {
15325        return parseFilters(dynamicValue);
15326    }
15327    else if (getStatic !== false) {
15328        var staticValue = getAndRemoveAttr(el, name);
15329        if (staticValue != null) {
15330            return JSON.stringify(staticValue);
15331        }
15332    }
15333}
15334// note: this only removes the attr from the Array (attrsList) so that it
15335// doesn't get processed by processAttrs.
15336// By default it does NOT remove it from the map (attrsMap) because the map is
15337// needed during codegen.
15338function getAndRemoveAttr(el, name, removeFromMap) {
15339    var val;
15340    if ((val = el.attrsMap[name]) != null) {
15341        var list = el.attrsList;
15342        for (var i = 0, l = list.length; i < l; i++) {
15343            if (list[i].name === name) {
15344                list.splice(i, 1);
15345                break;
15346            }
15347        }
15348    }
15349    if (removeFromMap) {
15350        delete el.attrsMap[name];
15351    }
15352    return val;
15353}
15354function getAndRemoveAttrByRegex(el, name) {
15355    var list = el.attrsList;
15356    for (var i = 0, l = list.length; i < l; i++) {
15357        var attr = list[i];
15358        if (name.test(attr.name)) {
15359            list.splice(i, 1);
15360            return attr;
15361        }
15362    }
15363}
15364function rangeSetItem(item, range) {
15365    if (range) {
15366        if (range.start != null) {
15367            item.start = range.start;
15368        }
15369        if (range.end != null) {
15370            item.end = range.end;
15371        }
15372    }
15373    return item;
15374}
15375
15376/**
15377 * Cross-platform code generation for component v-model
15378 */
15379function genComponentModel(el, value, modifiers) {
15380    var _a = modifiers || {}, number = _a.number, trim = _a.trim;
15381    var baseValueExpression = '$$v';
15382    var valueExpression = baseValueExpression;
15383    if (trim) {
15384        valueExpression =
15385            "(typeof ".concat(baseValueExpression, " === 'string'") +
15386                "? ".concat(baseValueExpression, ".trim()") +
15387                ": ".concat(baseValueExpression, ")");
15388    }
15389    if (number) {
15390        valueExpression = "_n(".concat(valueExpression, ")");
15391    }
15392    var assignment = genAssignmentCode(value, valueExpression);
15393    el.model = {
15394        value: "(".concat(value, ")"),
15395        expression: JSON.stringify(value),
15396        callback: "function (".concat(baseValueExpression, ") {").concat(assignment, "}")
15397    };
15398}
15399/**
15400 * Cross-platform codegen helper for generating v-model value assignment code.
15401 */
15402function genAssignmentCode(value, assignment) {
15403    var res = parseModel(value);
15404    if (res.key === null) {
15405        return "".concat(value, "=").concat(assignment);
15406    }
15407    else {
15408        return "$set(".concat(res.exp, ", ").concat(res.key, ", ").concat(assignment, ")");
15409    }
15410}
15411/**
15412 * Parse a v-model expression into a base path and a final key segment.
15413 * Handles both dot-path and possible square brackets.
15414 *
15415 * Possible cases:
15416 *
15417 * - test
15418 * - test[key]
15419 * - test[test1[key]]
15420 * - test["a"][key]
15421 * - xxx.test[a[a].test1[key]]
15422 * - test.xxx.a["asa"][test1[key]]
15423 *
15424 */
15425var len, str, chr, index, expressionPos, expressionEndPos;
15426function parseModel(val) {
15427    // Fix https://github.com/vuejs/vue/pull/7730
15428    // allow v-model="obj.val " (trailing whitespace)
15429    val = val.trim();
15430    len = val.length;
15431    if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
15432        index = val.lastIndexOf('.');
15433        if (index > -1) {
15434            return {
15435                exp: val.slice(0, index),
15436                key: '"' + val.slice(index + 1) + '"'
15437            };
15438        }
15439        else {
15440            return {
15441                exp: val,
15442                key: null
15443            };
15444        }
15445    }
15446    str = val;
15447    index = expressionPos = expressionEndPos = 0;
15448    while (!eof()) {
15449        chr = next();
15450        /* istanbul ignore if */
15451        if (isStringStart(chr)) {
15452            parseString(chr);
15453        }
15454        else if (chr === 0x5b) {
15455            parseBracket(chr);
15456        }
15457    }
15458    return {
15459        exp: val.slice(0, expressionPos),
15460        key: val.slice(expressionPos + 1, expressionEndPos)
15461    };
15462}
15463function next() {
15464    return str.charCodeAt(++index);
15465}
15466function eof() {
15467    return index >= len;
15468}
15469function isStringStart(chr) {
15470    return chr === 0x22 || chr === 0x27;
15471}
15472function parseBracket(chr) {
15473    var inBracket = 1;
15474    expressionPos = index;
15475    while (!eof()) {
15476        chr = next();
15477        if (isStringStart(chr)) {
15478            parseString(chr);
15479            continue;
15480        }
15481        if (chr === 0x5b)
15482            inBracket++;
15483        if (chr === 0x5d)
15484            inBracket--;
15485        if (inBracket === 0) {
15486            expressionEndPos = index;
15487            break;
15488        }
15489    }
15490}
15491function parseString(chr) {
15492    var stringQuote = chr;
15493    while (!eof()) {
15494        chr = next();
15495        if (chr === stringQuote) {
15496            break;
15497        }
15498    }
15499}
15500
15501var warn$1;
15502// in some cases, the event used has to be determined at runtime
15503// so we used some reserved tokens during compile.
15504var RANGE_TOKEN = '__r';
15505var CHECKBOX_RADIO_TOKEN = '__c';
15506function model$1(el, dir, _warn) {
15507    warn$1 = _warn;
15508    var value = dir.value;
15509    var modifiers = dir.modifiers;
15510    var tag = el.tag;
15511    var type = el.attrsMap.type;
15512    if (true) {
15513        // inputs with type="file" are read only and setting the input's
15514        // value will throw an error.
15515        if (tag === 'input' && type === 'file') {
15516            warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\" type=\"file\">:\n") +
15517                "File inputs are read only. Use a v-on:change listener instead.", el.rawAttrsMap['v-model']);
15518        }
15519    }
15520    if (el.component) {
15521        genComponentModel(el, value, modifiers);
15522        // component v-model doesn't need extra runtime
15523        return false;
15524    }
15525    else if (tag === 'select') {
15526        genSelect(el, value, modifiers);
15527    }
15528    else if (tag === 'input' && type === 'checkbox') {
15529        genCheckboxModel(el, value, modifiers);
15530    }
15531    else if (tag === 'input' && type === 'radio') {
15532        genRadioModel(el, value, modifiers);
15533    }
15534    else if (tag === 'input' || tag === 'textarea') {
15535        genDefaultModel(el, value, modifiers);
15536    }
15537    else if (!config.isReservedTag(tag)) {
15538        genComponentModel(el, value, modifiers);
15539        // component v-model doesn't need extra runtime
15540        return false;
15541    }
15542    else if (true) {
15543        warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") +
15544            "v-model is not supported on this element type. " +
15545            "If you are working with contenteditable, it's recommended to " +
15546            'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']);
15547    }
15548    // ensure runtime directive metadata
15549    return true;
15550}
15551function genCheckboxModel(el, value, modifiers) {
15552    var number = modifiers && modifiers.number;
15553    var valueBinding = getBindingAttr(el, 'value') || 'null';
15554    var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
15555    var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
15556    addProp(el, 'checked', "Array.isArray(".concat(value, ")") +
15557        "?_i(".concat(value, ",").concat(valueBinding, ")>-1") +
15558        (trueValueBinding === 'true'
15559            ? ":(".concat(value, ")")
15560            : ":_q(".concat(value, ",").concat(trueValueBinding, ")")));
15561    addHandler(el, 'change', "var $$a=".concat(value, ",") +
15562        '$$el=$event.target,' +
15563        "$$c=$$el.checked?(".concat(trueValueBinding, "):(").concat(falseValueBinding, ");") +
15564        'if(Array.isArray($$a)){' +
15565        "var $$v=".concat(number ? '_n(' + valueBinding + ')' : valueBinding, ",") +
15566        '$$i=_i($$a,$$v);' +
15567        "if($$el.checked){$$i<0&&(".concat(genAssignmentCode(value, '$$a.concat([$$v])'), ")}") +
15568        "else{$$i>-1&&(".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), ")}") +
15569        "}else{".concat(genAssignmentCode(value, '$$c'), "}"), null, true);
15570}
15571function genRadioModel(el, value, modifiers) {
15572    var number = modifiers && modifiers.number;
15573    var valueBinding = getBindingAttr(el, 'value') || 'null';
15574    valueBinding = number ? "_n(".concat(valueBinding, ")") : valueBinding;
15575    addProp(el, 'checked', "_q(".concat(value, ",").concat(valueBinding, ")"));
15576    addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
15577}
15578function genSelect(el, value, modifiers) {
15579    var number = modifiers && modifiers.number;
15580    var selectedVal = "Array.prototype.filter" +
15581        ".call($event.target.options,function(o){return o.selected})" +
15582        ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" +
15583        "return ".concat(number ? '_n(val)' : 'val', "})");
15584    var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
15585    var code = "var $$selectedVal = ".concat(selectedVal, ";");
15586    code = "".concat(code, " ").concat(genAssignmentCode(value, assignment));
15587    addHandler(el, 'change', code, null, true);
15588}
15589function genDefaultModel(el, value, modifiers) {
15590    var type = el.attrsMap.type;
15591    // warn if v-bind:value conflicts with v-model
15592    // except for inputs with v-bind:type
15593    if (true) {
15594        var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
15595        var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
15596        if (value_1 && !typeBinding) {
15597            var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
15598            warn$1("".concat(binding, "=\"").concat(value_1, "\" conflicts with v-model on the same element ") +
15599                'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);
15600        }
15601    }
15602    var _a = modifiers || {}, lazy = _a.lazy, number = _a.number, trim = _a.trim;
15603    var needCompositionGuard = !lazy && type !== 'range';
15604    var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';
15605    var valueExpression = '$event.target.value';
15606    if (trim) {
15607        valueExpression = "$event.target.value.trim()";
15608    }
15609    if (number) {
15610        valueExpression = "_n(".concat(valueExpression, ")");
15611    }
15612    var code = genAssignmentCode(value, valueExpression);
15613    if (needCompositionGuard) {
15614        code = "if($event.target.composing)return;".concat(code);
15615    }
15616    addProp(el, 'value', "(".concat(value, ")"));
15617    addHandler(el, event, code, null, true);
15618    if (trim || number) {
15619        addHandler(el, 'blur', '$forceUpdate()');
15620    }
15621}
15622
15623// normalize v-model event tokens that can only be determined at runtime.
15624// it's important to place the event as the first in the array because
15625// the whole point is ensuring the v-model callback gets called before
15626// user-attached handlers.
15627function normalizeEvents(on) {
15628    /* istanbul ignore if */
15629    if (isDef(on[RANGE_TOKEN])) {
15630        // IE input[type=range] only supports `change` event
15631        var event_1 = isIE ? 'change' : 'input';
15632        on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []);
15633        delete on[RANGE_TOKEN];
15634    }
15635    // This was originally intended to fix #4521 but no longer necessary
15636    // after 2.5. Keeping it for backwards compat with generated code from < 2.4
15637    /* istanbul ignore if */
15638    if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
15639        on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
15640        delete on[CHECKBOX_RADIO_TOKEN];
15641    }
15642}
15643var target;
15644function createOnceHandler(event, handler, capture) {
15645    var _target = target; // save current target element in closure
15646    return function onceHandler() {
15647        var res = handler.apply(null, arguments);
15648        if (res !== null) {
15649            remove(event, onceHandler, capture, _target);
15650        }
15651    };
15652}
15653// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
15654// implementation and does not fire microtasks in between event propagation, so
15655// safe to exclude.
15656var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);
15657function add(name, handler, capture, passive) {
15658    // async edge case #6566: inner click event triggers patch, event handler
15659    // attached to outer element during patch, and triggered again. This
15660    // happens because browsers fire microtask ticks between event propagation.
15661    // the solution is simple: we save the timestamp when a handler is attached,
15662    // and the handler would only fire if the event passed to it was fired
15663    // AFTER it was attached.
15664    if (useMicrotaskFix) {
15665        var attachedTimestamp_1 = currentFlushTimestamp;
15666        var original_1 = handler;
15667        //@ts-expect-error
15668        handler = original_1._wrapper = function (e) {
15669            if (
15670            // no bubbling, should always fire.
15671            // this is just a safety net in case event.timeStamp is unreliable in
15672            // certain weird environments...
15673            e.target === e.currentTarget ||
15674                // event is fired after handler attachment
15675                e.timeStamp >= attachedTimestamp_1 ||
15676                // bail for environments that have buggy event.timeStamp implementations
15677                // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState
15678                // #9681 QtWebEngine event.timeStamp is negative value
15679                e.timeStamp <= 0 ||
15680                // #9448 bail if event is fired in another document in a multi-page
15681                // electron/nw.js app, since event.timeStamp will be using a different
15682                // starting reference
15683                e.target.ownerDocument !== document) {
15684                return original_1.apply(this, arguments);
15685            }
15686        };
15687    }
15688    target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture);
15689}
15690function remove(name, handler, capture, _target) {
15691    (_target || target).removeEventListener(name, 
15692    //@ts-expect-error
15693    handler._wrapper || handler, capture);
15694}
15695function updateDOMListeners(oldVnode, vnode) {
15696    if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
15697        return;
15698    }
15699    var on = vnode.data.on || {};
15700    var oldOn = oldVnode.data.on || {};
15701    // vnode is empty when removing all listeners,
15702    // and use old vnode dom element
15703    target = vnode.elm || oldVnode.elm;
15704    normalizeEvents(on);
15705    updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);
15706    target = undefined;
15707}
15708var events = {
15709    create: updateDOMListeners,
15710    update: updateDOMListeners,
15711    // @ts-expect-error emptyNode has actually data
15712    destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); }
15713};
15714
15715var svgContainer;
15716function updateDOMProps(oldVnode, vnode) {
15717    if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
15718        return;
15719    }
15720    var key, cur;
15721    var elm = vnode.elm;
15722    var oldProps = oldVnode.data.domProps || {};
15723    var props = vnode.data.domProps || {};
15724    // clone observed objects, as the user probably wants to mutate it
15725    if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {
15726        props = vnode.data.domProps = extend({}, props);
15727    }
15728    for (key in oldProps) {
15729        if (!(key in props)) {
15730            elm[key] = '';
15731        }
15732    }
15733    for (key in props) {
15734        cur = props[key];
15735        // ignore children if the node has textContent or innerHTML,
15736        // as these will throw away existing DOM nodes and cause removal errors
15737        // on subsequent patches (#3360)
15738        if (key === 'textContent' || key === 'innerHTML') {
15739            if (vnode.children)
15740                vnode.children.length = 0;
15741            if (cur === oldProps[key])
15742                continue;
15743            // #6601 work around Chrome version <= 55 bug where single textNode
15744            // replaced by innerHTML/textContent retains its parentNode property
15745            if (elm.childNodes.length === 1) {
15746                elm.removeChild(elm.childNodes[0]);
15747            }
15748        }
15749        if (key === 'value' && elm.tagName !== 'PROGRESS') {
15750            // store value as _value as well since
15751            // non-string values will be stringified
15752            elm._value = cur;
15753            // avoid resetting cursor position when value is the same
15754            var strCur = isUndef(cur) ? '' : String(cur);
15755            if (shouldUpdateValue(elm, strCur)) {
15756                elm.value = strCur;
15757            }
15758        }
15759        else if (key === 'innerHTML' &&
15760            isSVG(elm.tagName) &&
15761            isUndef(elm.innerHTML)) {
15762            // IE doesn't support innerHTML for SVG elements
15763            svgContainer = svgContainer || document.createElement('div');
15764            svgContainer.innerHTML = "<svg>".concat(cur, "</svg>");
15765            var svg = svgContainer.firstChild;
15766            while (elm.firstChild) {
15767                elm.removeChild(elm.firstChild);
15768            }
15769            while (svg.firstChild) {
15770                elm.appendChild(svg.firstChild);
15771            }
15772        }
15773        else if (
15774        // skip the update if old and new VDOM state is the same.
15775        // `value` is handled separately because the DOM value may be temporarily
15776        // out of sync with VDOM state due to focus, composition and modifiers.
15777        // This  #4521 by skipping the unnecessary `checked` update.
15778        cur !== oldProps[key]) {
15779            // some property updates can throw
15780            // e.g. `value` on <progress> w/ non-finite value
15781            try {
15782                elm[key] = cur;
15783            }
15784            catch (e) { }
15785        }
15786    }
15787}
15788function shouldUpdateValue(elm, checkVal) {
15789    return (
15790    //@ts-expect-error
15791    !elm.composing &&
15792        (elm.tagName === 'OPTION' ||
15793            isNotInFocusAndDirty(elm, checkVal) ||
15794            isDirtyWithModifiers(elm, checkVal)));
15795}
15796function isNotInFocusAndDirty(elm, checkVal) {
15797    // return true when textbox (.number and .trim) loses focus and its value is
15798    // not equal to the updated value
15799    var notInFocus = true;
15800    // #6157
15801    // work around IE bug when accessing document.activeElement in an iframe
15802    try {
15803        notInFocus = document.activeElement !== elm;
15804    }
15805    catch (e) { }
15806    return notInFocus && elm.value !== checkVal;
15807}
15808function isDirtyWithModifiers(elm, newVal) {
15809    var value = elm.value;
15810    var modifiers = elm._vModifiers; // injected by v-model runtime
15811    if (isDef(modifiers)) {
15812        if (modifiers.number) {
15813            return toNumber(value) !== toNumber(newVal);
15814        }
15815        if (modifiers.trim) {
15816            return value.trim() !== newVal.trim();
15817        }
15818    }
15819    return value !== newVal;
15820}
15821var domProps = {
15822    create: updateDOMProps,
15823    update: updateDOMProps
15824};
15825
15826var parseStyleText = cached(function (cssText) {
15827    var res = {};
15828    var listDelimiter = /;(?![^(]*\))/g;
15829    var propertyDelimiter = /:(.+)/;
15830    cssText.split(listDelimiter).forEach(function (item) {
15831        if (item) {
15832            var tmp = item.split(propertyDelimiter);
15833            tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
15834        }
15835    });
15836    return res;
15837});
15838// merge static and dynamic style data on the same vnode
15839function normalizeStyleData(data) {
15840    var style = normalizeStyleBinding(data.style);
15841    // static style is pre-processed into an object during compilation
15842    // and is always a fresh object, so it's safe to merge into it
15843    return data.staticStyle ? extend(data.staticStyle, style) : style;
15844}
15845// normalize possible array / string values into Object
15846function normalizeStyleBinding(bindingStyle) {
15847    if (Array.isArray(bindingStyle)) {
15848        return toObject(bindingStyle);
15849    }
15850    if (typeof bindingStyle === 'string') {
15851        return parseStyleText(bindingStyle);
15852    }
15853    return bindingStyle;
15854}
15855/**
15856 * parent component style should be after child's
15857 * so that parent component's style could override it
15858 */
15859function getStyle(vnode, checkChild) {
15860    var res = {};
15861    var styleData;
15862    if (checkChild) {
15863        var childNode = vnode;
15864        while (childNode.componentInstance) {
15865            childNode = childNode.componentInstance._vnode;
15866            if (childNode &&
15867                childNode.data &&
15868                (styleData = normalizeStyleData(childNode.data))) {
15869                extend(res, styleData);
15870            }
15871        }
15872    }
15873    if ((styleData = normalizeStyleData(vnode.data))) {
15874        extend(res, styleData);
15875    }
15876    var parentNode = vnode;
15877    // @ts-expect-error parentNode.parent not VNodeWithData
15878    while ((parentNode = parentNode.parent)) {
15879        if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
15880            extend(res, styleData);
15881        }
15882    }
15883    return res;
15884}
15885
15886var cssVarRE = /^--/;
15887var importantRE = /\s*!important$/;
15888var setProp = function (el, name, val) {
15889    /* istanbul ignore if */
15890    if (cssVarRE.test(name)) {
15891        el.style.setProperty(name, val);
15892    }
15893    else if (importantRE.test(val)) {
15894        el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');
15895    }
15896    else {
15897        var normalizedName = normalize(name);
15898        if (Array.isArray(val)) {
15899            // Support values array created by autoprefixer, e.g.
15900            // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
15901            // Set them one by one, and the browser will only set those it can recognize
15902            for (var i = 0, len = val.length; i < len; i++) {
15903                el.style[normalizedName] = val[i];
15904            }
15905        }
15906        else {
15907            el.style[normalizedName] = val;
15908        }
15909    }
15910};
15911var vendorNames = ['Webkit', 'Moz', 'ms'];
15912var emptyStyle;
15913var normalize = cached(function (prop) {
15914    emptyStyle = emptyStyle || document.createElement('div').style;
15915    prop = camelize(prop);
15916    if (prop !== 'filter' && prop in emptyStyle) {
15917        return prop;
15918    }
15919    var capName = prop.charAt(0).toUpperCase() + prop.slice(1);
15920    for (var i = 0; i < vendorNames.length; i++) {
15921        var name_1 = vendorNames[i] + capName;
15922        if (name_1 in emptyStyle) {
15923            return name_1;
15924        }
15925    }
15926});
15927function updateStyle(oldVnode, vnode) {
15928    var data = vnode.data;
15929    var oldData = oldVnode.data;
15930    if (isUndef(data.staticStyle) &&
15931        isUndef(data.style) &&
15932        isUndef(oldData.staticStyle) &&
15933        isUndef(oldData.style)) {
15934        return;
15935    }
15936    var cur, name;
15937    var el = vnode.elm;
15938    var oldStaticStyle = oldData.staticStyle;
15939    var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
15940    // if static style exists, stylebinding already merged into it when doing normalizeStyleData
15941    var oldStyle = oldStaticStyle || oldStyleBinding;
15942    var style = normalizeStyleBinding(vnode.data.style) || {};
15943    // store normalized style under a different key for next diff
15944    // make sure to clone it if it's reactive, since the user likely wants
15945    // to mutate it.
15946    vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;
15947    var newStyle = getStyle(vnode, true);
15948    for (name in oldStyle) {
15949        if (isUndef(newStyle[name])) {
15950            setProp(el, name, '');
15951        }
15952    }
15953    for (name in newStyle) {
15954        cur = newStyle[name];
15955        if (cur !== oldStyle[name]) {
15956            // ie9 setting to null has no effect, must use empty string
15957            setProp(el, name, cur == null ? '' : cur);
15958        }
15959    }
15960}
15961var style$1 = {
15962    create: updateStyle,
15963    update: updateStyle
15964};
15965
15966var whitespaceRE$1 = /\s+/;
15967/**
15968 * Add class with compatibility for SVG since classList is not supported on
15969 * SVG elements in IE
15970 */
15971function addClass(el, cls) {
15972    /* istanbul ignore if */
15973    if (!cls || !(cls = cls.trim())) {
15974        return;
15975    }
15976    /* istanbul ignore else */
15977    if (el.classList) {
15978        if (cls.indexOf(' ') > -1) {
15979            cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.add(c); });
15980        }
15981        else {
15982            el.classList.add(cls);
15983        }
15984    }
15985    else {
15986        var cur = " ".concat(el.getAttribute('class') || '', " ");
15987        if (cur.indexOf(' ' + cls + ' ') < 0) {
15988            el.setAttribute('class', (cur + cls).trim());
15989        }
15990    }
15991}
15992/**
15993 * Remove class with compatibility for SVG since classList is not supported on
15994 * SVG elements in IE
15995 */
15996function removeClass(el, cls) {
15997    /* istanbul ignore if */
15998    if (!cls || !(cls = cls.trim())) {
15999        return;
16000    }
16001    /* istanbul ignore else */
16002    if (el.classList) {
16003        if (cls.indexOf(' ') > -1) {
16004            cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.remove(c); });
16005        }
16006        else {
16007            el.classList.remove(cls);
16008        }
16009        if (!el.classList.length) {
16010            el.removeAttribute('class');
16011        }
16012    }
16013    else {
16014        var cur = " ".concat(el.getAttribute('class') || '', " ");
16015        var tar = ' ' + cls + ' ';
16016        while (cur.indexOf(tar) >= 0) {
16017            cur = cur.replace(tar, ' ');
16018        }
16019        cur = cur.trim();
16020        if (cur) {
16021            el.setAttribute('class', cur);
16022        }
16023        else {
16024            el.removeAttribute('class');
16025        }
16026    }
16027}
16028
16029function resolveTransition(def) {
16030    if (!def) {
16031        return;
16032    }
16033    /* istanbul ignore else */
16034    if (typeof def === 'object') {
16035        var res = {};
16036        if (def.css !== false) {
16037            extend(res, autoCssTransition(def.name || 'v'));
16038        }
16039        extend(res, def);
16040        return res;
16041    }
16042    else if (typeof def === 'string') {
16043        return autoCssTransition(def);
16044    }
16045}
16046var autoCssTransition = cached(function (name) {
16047    return {
16048        enterClass: "".concat(name, "-enter"),
16049        enterToClass: "".concat(name, "-enter-to"),
16050        enterActiveClass: "".concat(name, "-enter-active"),
16051        leaveClass: "".concat(name, "-leave"),
16052        leaveToClass: "".concat(name, "-leave-to"),
16053        leaveActiveClass: "".concat(name, "-leave-active")
16054    };
16055});
16056var hasTransition = inBrowser && !isIE9;
16057var TRANSITION = 'transition';
16058var ANIMATION = 'animation';
16059// Transition property/event sniffing
16060var transitionProp = 'transition';
16061var transitionEndEvent = 'transitionend';
16062var animationProp = 'animation';
16063var animationEndEvent = 'animationend';
16064if (hasTransition) {
16065    /* istanbul ignore if */
16066    if (window.ontransitionend === undefined &&
16067        window.onwebkittransitionend !== undefined) {
16068        transitionProp = 'WebkitTransition';
16069        transitionEndEvent = 'webkitTransitionEnd';
16070    }
16071    if (window.onanimationend === undefined &&
16072        window.onwebkitanimationend !== undefined) {
16073        animationProp = 'WebkitAnimation';
16074        animationEndEvent = 'webkitAnimationEnd';
16075    }
16076}
16077// binding to window is necessary to make hot reload work in IE in strict mode
16078var raf = inBrowser
16079    ? window.requestAnimationFrame
16080        ? window.requestAnimationFrame.bind(window)
16081        : setTimeout
16082    : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); };
16083function nextFrame(fn) {
16084    raf(function () {
16085        // @ts-expect-error
16086        raf(fn);
16087    });
16088}
16089function addTransitionClass(el, cls) {
16090    var transitionClasses = el._transitionClasses || (el._transitionClasses = []);
16091    if (transitionClasses.indexOf(cls) < 0) {
16092        transitionClasses.push(cls);
16093        addClass(el, cls);
16094    }
16095}
16096function removeTransitionClass(el, cls) {
16097    if (el._transitionClasses) {
16098        remove$2(el._transitionClasses, cls);
16099    }
16100    removeClass(el, cls);
16101}
16102function whenTransitionEnds(el, expectedType, cb) {
16103    var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount;
16104    if (!type)
16105        return cb();
16106    var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
16107    var ended = 0;
16108    var end = function () {
16109        el.removeEventListener(event, onEnd);
16110        cb();
16111    };
16112    var onEnd = function (e) {
16113        if (e.target === el) {
16114            if (++ended >= propCount) {
16115                end();
16116            }
16117        }
16118    };
16119    setTimeout(function () {
16120        if (ended < propCount) {
16121            end();
16122        }
16123    }, timeout + 1);
16124    el.addEventListener(event, onEnd);
16125}
16126var transformRE = /\b(transform|all)(,|$)/;
16127function getTransitionInfo(el, expectedType) {
16128    var styles = window.getComputedStyle(el);
16129    // JSDOM may return undefined for transition properties
16130    var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');
16131    var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');
16132    var transitionTimeout = getTimeout(transitionDelays, transitionDurations);
16133    var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');
16134    var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');
16135    var animationTimeout = getTimeout(animationDelays, animationDurations);
16136    var type;
16137    var timeout = 0;
16138    var propCount = 0;
16139    /* istanbul ignore if */
16140    if (expectedType === TRANSITION) {
16141        if (transitionTimeout > 0) {
16142            type = TRANSITION;
16143            timeout = transitionTimeout;
16144            propCount = transitionDurations.length;
16145        }
16146    }
16147    else if (expectedType === ANIMATION) {
16148        if (animationTimeout > 0) {
16149            type = ANIMATION;
16150            timeout = animationTimeout;
16151            propCount = animationDurations.length;
16152        }
16153    }
16154    else {
16155        timeout = Math.max(transitionTimeout, animationTimeout);
16156        type =
16157            timeout > 0
16158                ? transitionTimeout > animationTimeout
16159                    ? TRANSITION
16160                    : ANIMATION
16161                : null;
16162        propCount = type
16163            ? type === TRANSITION
16164                ? transitionDurations.length
16165                : animationDurations.length
16166            : 0;
16167    }
16168    var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);
16169    return {
16170        type: type,
16171        timeout: timeout,
16172        propCount: propCount,
16173        hasTransform: hasTransform
16174    };
16175}
16176function getTimeout(delays, durations) {
16177    /* istanbul ignore next */
16178    while (delays.length < durations.length) {
16179        delays = delays.concat(delays);
16180    }
16181    return Math.max.apply(null, durations.map(function (d, i) {
16182        return toMs(d) + toMs(delays[i]);
16183    }));
16184}
16185// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
16186// in a locale-dependent way, using a comma instead of a dot.
16187// If comma is not replaced with a dot, the input will be rounded down (i.e. acting
16188// as a floor function) causing unexpected behaviors
16189function toMs(s) {
16190    return Number(s.slice(0, -1).replace(',', '.')) * 1000;
16191}
16192
16193function enter(vnode, toggleDisplay) {
16194    var el = vnode.elm;
16195    // call leave callback now
16196    if (isDef(el._leaveCb)) {
16197        el._leaveCb.cancelled = true;
16198        el._leaveCb();
16199    }
16200    var data = resolveTransition(vnode.data.transition);
16201    if (isUndef(data)) {
16202        return;
16203    }
16204    /* istanbul ignore if */
16205    if (isDef(el._enterCb) || el.nodeType !== 1) {
16206        return;
16207    }
16208    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;
16209    // activeInstance will always be the <transition> component managing this
16210    // transition. One edge case to check is when the <transition> is placed
16211    // as the root node of a child component. In that case we need to check
16212    // <transition>'s parent for appear check.
16213    var context = activeInstance;
16214    var transitionNode = activeInstance.$vnode;
16215    while (transitionNode && transitionNode.parent) {
16216        context = transitionNode.context;
16217        transitionNode = transitionNode.parent;
16218    }
16219    var isAppear = !context._isMounted || !vnode.isRootInsert;
16220    if (isAppear && !appear && appear !== '') {
16221        return;
16222    }
16223    var startClass = isAppear && appearClass ? appearClass : enterClass;
16224    var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;
16225    var toClass = isAppear && appearToClass ? appearToClass : enterToClass;
16226    var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;
16227    var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter;
16228    var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;
16229    var enterCancelledHook = isAppear
16230        ? appearCancelled || enterCancelled
16231        : enterCancelled;
16232    var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);
16233    if ( true && explicitEnterDuration != null) {
16234        checkDuration(explicitEnterDuration, 'enter', vnode);
16235    }
16236    var expectsCSS = css !== false && !isIE9;
16237    var userWantsControl = getHookArgumentsLength(enterHook);
16238    var cb = (el._enterCb = once(function () {
16239        if (expectsCSS) {
16240            removeTransitionClass(el, toClass);
16241            removeTransitionClass(el, activeClass);
16242        }
16243        // @ts-expect-error
16244        if (cb.cancelled) {
16245            if (expectsCSS) {
16246                removeTransitionClass(el, startClass);
16247            }
16248            enterCancelledHook && enterCancelledHook(el);
16249        }
16250        else {
16251            afterEnterHook && afterEnterHook(el);
16252        }
16253        el._enterCb = null;
16254    }));
16255    if (!vnode.data.show) {
16256        // remove pending leave element on enter by injecting an insert hook
16257        mergeVNodeHook(vnode, 'insert', function () {
16258            var parent = el.parentNode;
16259            var pendingNode = parent && parent._pending && parent._pending[vnode.key];
16260            if (pendingNode &&
16261                pendingNode.tag === vnode.tag &&
16262                pendingNode.elm._leaveCb) {
16263                pendingNode.elm._leaveCb();
16264            }
16265            enterHook && enterHook(el, cb);
16266        });
16267    }
16268    // start enter transition
16269    beforeEnterHook && beforeEnterHook(el);
16270    if (expectsCSS) {
16271        addTransitionClass(el, startClass);
16272        addTransitionClass(el, activeClass);
16273        nextFrame(function () {
16274            removeTransitionClass(el, startClass);
16275            // @ts-expect-error
16276            if (!cb.cancelled) {
16277                addTransitionClass(el, toClass);
16278                if (!userWantsControl) {
16279                    if (isValidDuration(explicitEnterDuration)) {
16280                        setTimeout(cb, explicitEnterDuration);
16281                    }
16282                    else {
16283                        whenTransitionEnds(el, type, cb);
16284                    }
16285                }
16286            }
16287        });
16288    }
16289    if (vnode.data.show) {
16290        toggleDisplay && toggleDisplay();
16291        enterHook && enterHook(el, cb);
16292    }
16293    if (!expectsCSS && !userWantsControl) {
16294        cb();
16295    }
16296}
16297function leave(vnode, rm) {
16298    var el = vnode.elm;
16299    // call enter callback now
16300    if (isDef(el._enterCb)) {
16301        el._enterCb.cancelled = true;
16302        el._enterCb();
16303    }
16304    var data = resolveTransition(vnode.data.transition);
16305    if (isUndef(data) || el.nodeType !== 1) {
16306        return rm();
16307    }
16308    /* istanbul ignore if */
16309    if (isDef(el._leaveCb)) {
16310        return;
16311    }
16312    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;
16313    var expectsCSS = css !== false && !isIE9;
16314    var userWantsControl = getHookArgumentsLength(leave);
16315    var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);
16316    if ( true && isDef(explicitLeaveDuration)) {
16317        checkDuration(explicitLeaveDuration, 'leave', vnode);
16318    }
16319    var cb = (el._leaveCb = once(function () {
16320        if (el.parentNode && el.parentNode._pending) {
16321            el.parentNode._pending[vnode.key] = null;
16322        }
16323        if (expectsCSS) {
16324            removeTransitionClass(el, leaveToClass);
16325            removeTransitionClass(el, leaveActiveClass);
16326        }
16327        // @ts-expect-error
16328        if (cb.cancelled) {
16329            if (expectsCSS) {
16330                removeTransitionClass(el, leaveClass);
16331            }
16332            leaveCancelled && leaveCancelled(el);
16333        }
16334        else {
16335            rm();
16336            afterLeave && afterLeave(el);
16337        }
16338        el._leaveCb = null;
16339    }));
16340    if (delayLeave) {
16341        delayLeave(performLeave);
16342    }
16343    else {
16344        performLeave();
16345    }
16346    function performLeave() {
16347        // the delayed leave may have already been cancelled
16348        // @ts-expect-error
16349        if (cb.cancelled) {
16350            return;
16351        }
16352        // record leaving element
16353        if (!vnode.data.show && el.parentNode) {
16354            (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] =
16355                vnode;
16356        }
16357        beforeLeave && beforeLeave(el);
16358        if (expectsCSS) {
16359            addTransitionClass(el, leaveClass);
16360            addTransitionClass(el, leaveActiveClass);
16361            nextFrame(function () {
16362                removeTransitionClass(el, leaveClass);
16363                // @ts-expect-error
16364                if (!cb.cancelled) {
16365                    addTransitionClass(el, leaveToClass);
16366                    if (!userWantsControl) {
16367                        if (isValidDuration(explicitLeaveDuration)) {
16368                            setTimeout(cb, explicitLeaveDuration);
16369                        }
16370                        else {
16371                            whenTransitionEnds(el, type, cb);
16372                        }
16373                    }
16374                }
16375            });
16376        }
16377        leave && leave(el, cb);
16378        if (!expectsCSS && !userWantsControl) {
16379            cb();
16380        }
16381    }
16382}
16383// only used in dev mode
16384function checkDuration(val, name, vnode) {
16385    if (typeof val !== 'number') {
16386        warn$2("<transition> explicit ".concat(name, " duration is not a valid number - ") +
16387            "got ".concat(JSON.stringify(val), "."), vnode.context);
16388    }
16389    else if (isNaN(val)) {
16390        warn$2("<transition> explicit ".concat(name, " duration is NaN - ") +
16391            'the duration expression might be incorrect.', vnode.context);
16392    }
16393}
16394function isValidDuration(val) {
16395    return typeof val === 'number' && !isNaN(val);
16396}
16397/**
16398 * Normalize a transition hook's argument length. The hook may be:
16399 * - a merged hook (invoker) with the original in .fns
16400 * - a wrapped component method (check ._length)
16401 * - a plain function (.length)
16402 */
16403function getHookArgumentsLength(fn) {
16404    if (isUndef(fn)) {
16405        return false;
16406    }
16407    // @ts-expect-error
16408    var invokerFns = fn.fns;
16409    if (isDef(invokerFns)) {
16410        // invoker
16411        return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);
16412    }
16413    else {
16414        // @ts-expect-error
16415        return (fn._length || fn.length) > 1;
16416    }
16417}
16418function _enter(_, vnode) {
16419    if (vnode.data.show !== true) {
16420        enter(vnode);
16421    }
16422}
16423var transition = inBrowser
16424    ? {
16425        create: _enter,
16426        activate: _enter,
16427        remove: function (vnode, rm) {
16428            /* istanbul ignore else */
16429            if (vnode.data.show !== true) {
16430                // @ts-expect-error
16431                leave(vnode, rm);
16432            }
16433            else {
16434                rm();
16435            }
16436        }
16437    }
16438    : {};
16439
16440var platformModules = [attrs, klass$1, events, domProps, style$1, transition];
16441
16442// the directive module should be applied last, after all
16443// built-in modules have been applied.
16444var modules$1 = platformModules.concat(baseModules);
16445var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules$1 });
16446
16447/**
16448 * Not type checking this file because flow doesn't like attaching
16449 * properties to Elements.
16450 */
16451/* istanbul ignore if */
16452if (isIE9) {
16453    // http://www.matts411.com/post/internet-explorer-9-oninput/
16454    document.addEventListener('selectionchange', function () {
16455        var el = document.activeElement;
16456        // @ts-expect-error
16457        if (el && el.vmodel) {
16458            trigger(el, 'input');
16459        }
16460    });
16461}
16462var directive = {
16463    inserted: function (el, binding, vnode, oldVnode) {
16464        if (vnode.tag === 'select') {
16465            // #6903
16466            if (oldVnode.elm && !oldVnode.elm._vOptions) {
16467                mergeVNodeHook(vnode, 'postpatch', function () {
16468                    directive.componentUpdated(el, binding, vnode);
16469                });
16470            }
16471            else {
16472                setSelected(el, binding, vnode.context);
16473            }
16474            el._vOptions = [].map.call(el.options, getValue);
16475        }
16476        else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
16477            el._vModifiers = binding.modifiers;
16478            if (!binding.modifiers.lazy) {
16479                el.addEventListener('compositionstart', onCompositionStart);
16480                el.addEventListener('compositionend', onCompositionEnd);
16481                // Safari < 10.2 & UIWebView doesn't fire compositionend when
16482                // switching focus before confirming composition choice
16483                // this also fixes the issue where some browsers e.g. iOS Chrome
16484                // fires "change" instead of "input" on autocomplete.
16485                el.addEventListener('change', onCompositionEnd);
16486                /* istanbul ignore if */
16487                if (isIE9) {
16488                    el.vmodel = true;
16489                }
16490            }
16491        }
16492    },
16493    componentUpdated: function (el, binding, vnode) {
16494        if (vnode.tag === 'select') {
16495            setSelected(el, binding, vnode.context);
16496            // in case the options rendered by v-for have changed,
16497            // it's possible that the value is out-of-sync with the rendered options.
16498            // detect such cases and filter out values that no longer has a matching
16499            // option in the DOM.
16500            var prevOptions_1 = el._vOptions;
16501            var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue));
16502            if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) {
16503                // trigger change event if
16504                // no matching option found for at least one value
16505                var needReset = el.multiple
16506                    ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); })
16507                    : binding.value !== binding.oldValue &&
16508                        hasNoMatchingOption(binding.value, curOptions_1);
16509                if (needReset) {
16510                    trigger(el, 'change');
16511                }
16512            }
16513        }
16514    }
16515};
16516function setSelected(el, binding, vm) {
16517    actuallySetSelected(el, binding, vm);
16518    /* istanbul ignore if */
16519    if (isIE || isEdge) {
16520        setTimeout(function () {
16521            actuallySetSelected(el, binding, vm);
16522        }, 0);
16523    }
16524}
16525function actuallySetSelected(el, binding, vm) {
16526    var value = binding.value;
16527    var isMultiple = el.multiple;
16528    if (isMultiple && !Array.isArray(value)) {
16529         true &&
16530            warn$2("<select multiple v-model=\"".concat(binding.expression, "\"> ") +
16531                "expects an Array value for its binding, but got ".concat(Object.prototype.toString
16532                    .call(value)
16533                    .slice(8, -1)), vm);
16534        return;
16535    }
16536    var selected, option;
16537    for (var i = 0, l = el.options.length; i < l; i++) {
16538        option = el.options[i];
16539        if (isMultiple) {
16540            selected = looseIndexOf(value, getValue(option)) > -1;
16541            if (option.selected !== selected) {
16542                option.selected = selected;
16543            }
16544        }
16545        else {
16546            if (looseEqual(getValue(option), value)) {
16547                if (el.selectedIndex !== i) {
16548                    el.selectedIndex = i;
16549                }
16550                return;
16551            }
16552        }
16553    }
16554    if (!isMultiple) {
16555        el.selectedIndex = -1;
16556    }
16557}
16558function hasNoMatchingOption(value, options) {
16559    return options.every(function (o) { return !looseEqual(o, value); });
16560}
16561function getValue(option) {
16562    return '_value' in option ? option._value : option.value;
16563}
16564function onCompositionStart(e) {
16565    e.target.composing = true;
16566}
16567function onCompositionEnd(e) {
16568    // prevent triggering an input event for no reason
16569    if (!e.target.composing)
16570        return;
16571    e.target.composing = false;
16572    trigger(e.target, 'input');
16573}
16574function trigger(el, type) {
16575    var e = document.createEvent('HTMLEvents');
16576    e.initEvent(type, true, true);
16577    el.dispatchEvent(e);
16578}
16579
16580// recursively search for possible transition defined inside the component root
16581function locateNode(vnode) {
16582    // @ts-expect-error
16583    return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
16584        ? locateNode(vnode.componentInstance._vnode)
16585        : vnode;
16586}
16587var show = {
16588    bind: function (el, _a, vnode) {
16589        var value = _a.value;
16590        vnode = locateNode(vnode);
16591        var transition = vnode.data && vnode.data.transition;
16592        var originalDisplay = (el.__vOriginalDisplay =
16593            el.style.display === 'none' ? '' : el.style.display);
16594        if (value && transition) {
16595            vnode.data.show = true;
16596            enter(vnode, function () {
16597                el.style.display = originalDisplay;
16598            });
16599        }
16600        else {
16601            el.style.display = value ? originalDisplay : 'none';
16602        }
16603    },
16604    update: function (el, _a, vnode) {
16605        var value = _a.value, oldValue = _a.oldValue;
16606        /* istanbul ignore if */
16607        if (!value === !oldValue)
16608            return;
16609        vnode = locateNode(vnode);
16610        var transition = vnode.data && vnode.data.transition;
16611        if (transition) {
16612            vnode.data.show = true;
16613            if (value) {
16614                enter(vnode, function () {
16615                    el.style.display = el.__vOriginalDisplay;
16616                });
16617            }
16618            else {
16619                leave(vnode, function () {
16620                    el.style.display = 'none';
16621                });
16622            }
16623        }
16624        else {
16625            el.style.display = value ? el.__vOriginalDisplay : 'none';
16626        }
16627    },
16628    unbind: function (el, binding, vnode, oldVnode, isDestroy) {
16629        if (!isDestroy) {
16630            el.style.display = el.__vOriginalDisplay;
16631        }
16632    }
16633};
16634
16635var platformDirectives = {
16636    model: directive,
16637    show: show
16638};
16639
16640// Provides transition support for a single element/component.
16641var transitionProps = {
16642    name: String,
16643    appear: Boolean,
16644    css: Boolean,
16645    mode: String,
16646    type: String,
16647    enterClass: String,
16648    leaveClass: String,
16649    enterToClass: String,
16650    leaveToClass: String,
16651    enterActiveClass: String,
16652    leaveActiveClass: String,
16653    appearClass: String,
16654    appearActiveClass: String,
16655    appearToClass: String,
16656    duration: [Number, String, Object]
16657};
16658// in case the child is also an abstract component, e.g. <keep-alive>
16659// we want to recursively retrieve the real component to be rendered
16660function getRealChild(vnode) {
16661    var compOptions = vnode && vnode.componentOptions;
16662    if (compOptions && compOptions.Ctor.options.abstract) {
16663        return getRealChild(getFirstComponentChild(compOptions.children));
16664    }
16665    else {
16666        return vnode;
16667    }
16668}
16669function extractTransitionData(comp) {
16670    var data = {};
16671    var options = comp.$options;
16672    // props
16673    for (var key in options.propsData) {
16674        data[key] = comp[key];
16675    }
16676    // events.
16677    // extract listeners and pass them directly to the transition methods
16678    var listeners = options._parentListeners;
16679    for (var key in listeners) {
16680        data[camelize(key)] = listeners[key];
16681    }
16682    return data;
16683}
16684function placeholder(h, rawChild) {
16685    // @ts-expect-error
16686    if (/\d-keep-alive$/.test(rawChild.tag)) {
16687        return h('keep-alive', {
16688            props: rawChild.componentOptions.propsData
16689        });
16690    }
16691}
16692function hasParentTransition(vnode) {
16693    while ((vnode = vnode.parent)) {
16694        if (vnode.data.transition) {
16695            return true;
16696        }
16697    }
16698}
16699function isSameChild(child, oldChild) {
16700    return oldChild.key === child.key && oldChild.tag === child.tag;
16701}
16702var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };
16703var isVShowDirective = function (d) { return d.name === 'show'; };
16704var Transition = {
16705    name: 'transition',
16706    props: transitionProps,
16707    abstract: true,
16708    render: function (h) {
16709        var _this = this;
16710        var children = this.$slots.default;
16711        if (!children) {
16712            return;
16713        }
16714        // filter out text nodes (possible whitespaces)
16715        children = children.filter(isNotTextNode);
16716        /* istanbul ignore if */
16717        if (!children.length) {
16718            return;
16719        }
16720        // warn multiple elements
16721        if ( true && children.length > 1) {
16722            warn$2('<transition> can only be used on a single element. Use ' +
16723                '<transition-group> for lists.', this.$parent);
16724        }
16725        var mode = this.mode;
16726        // warn invalid mode
16727        if ( true && mode && mode !== 'in-out' && mode !== 'out-in') {
16728            warn$2('invalid <transition> mode: ' + mode, this.$parent);
16729        }
16730        var rawChild = children[0];
16731        // if this is a component root node and the component's
16732        // parent container node also has transition, skip.
16733        if (hasParentTransition(this.$vnode)) {
16734            return rawChild;
16735        }
16736        // apply transition data to child
16737        // use getRealChild() to ignore abstract components e.g. keep-alive
16738        var child = getRealChild(rawChild);
16739        /* istanbul ignore if */
16740        if (!child) {
16741            return rawChild;
16742        }
16743        if (this._leaving) {
16744            return placeholder(h, rawChild);
16745        }
16746        // ensure a key that is unique to the vnode type and to this transition
16747        // component instance. This key will be used to remove pending leaving nodes
16748        // during entering.
16749        var id = "__transition-".concat(this._uid, "-");
16750        child.key =
16751            child.key == null
16752                ? child.isComment
16753                    ? id + 'comment'
16754                    : id + child.tag
16755                : isPrimitive(child.key)
16756                    ? String(child.key).indexOf(id) === 0
16757                        ? child.key
16758                        : id + child.key
16759                    : child.key;
16760        var data = ((child.data || (child.data = {})).transition =
16761            extractTransitionData(this));
16762        var oldRawChild = this._vnode;
16763        var oldChild = getRealChild(oldRawChild);
16764        // mark v-show
16765        // so that the transition module can hand over the control to the directive
16766        if (child.data.directives && child.data.directives.some(isVShowDirective)) {
16767            child.data.show = true;
16768        }
16769        if (oldChild &&
16770            oldChild.data &&
16771            !isSameChild(child, oldChild) &&
16772            !isAsyncPlaceholder(oldChild) &&
16773            // #6687 component root is a comment node
16774            !(oldChild.componentInstance &&
16775                oldChild.componentInstance._vnode.isComment)) {
16776            // replace old child transition data with fresh one
16777            // important for dynamic transitions!
16778            var oldData = (oldChild.data.transition = extend({}, data));
16779            // handle transition mode
16780            if (mode === 'out-in') {
16781                // return placeholder node and queue update when leave finishes
16782                this._leaving = true;
16783                mergeVNodeHook(oldData, 'afterLeave', function () {
16784                    _this._leaving = false;
16785                    _this.$forceUpdate();
16786                });
16787                return placeholder(h, rawChild);
16788            }
16789            else if (mode === 'in-out') {
16790                if (isAsyncPlaceholder(child)) {
16791                    return oldRawChild;
16792                }
16793                var delayedLeave_1;
16794                var performLeave = function () {
16795                    delayedLeave_1();
16796                };
16797                mergeVNodeHook(data, 'afterEnter', performLeave);
16798                mergeVNodeHook(data, 'enterCancelled', performLeave);
16799                mergeVNodeHook(oldData, 'delayLeave', function (leave) {
16800                    delayedLeave_1 = leave;
16801                });
16802            }
16803        }
16804        return rawChild;
16805    }
16806};
16807
16808// Provides transition support for list items.
16809var props = extend({
16810    tag: String,
16811    moveClass: String
16812}, transitionProps);
16813delete props.mode;
16814var TransitionGroup = {
16815    props: props,
16816    beforeMount: function () {
16817        var _this = this;
16818        var update = this._update;
16819        this._update = function (vnode, hydrating) {
16820            var restoreActiveInstance = setActiveInstance(_this);
16821            // force removing pass
16822            _this.__patch__(_this._vnode, _this.kept, false, // hydrating
16823            true // removeOnly (!important, avoids unnecessary moves)
16824            );
16825            _this._vnode = _this.kept;
16826            restoreActiveInstance();
16827            update.call(_this, vnode, hydrating);
16828        };
16829    },
16830    render: function (h) {
16831        var tag = this.tag || this.$vnode.data.tag || 'span';
16832        var map = Object.create(null);
16833        var prevChildren = (this.prevChildren = this.children);
16834        var rawChildren = this.$slots.default || [];
16835        var children = (this.children = []);
16836        var transitionData = extractTransitionData(this);
16837        for (var i = 0; i < rawChildren.length; i++) {
16838            var c = rawChildren[i];
16839            if (c.tag) {
16840                if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
16841                    children.push(c);
16842                    map[c.key] = c;
16843                    (c.data || (c.data = {})).transition = transitionData;
16844                }
16845                else if (true) {
16846                    var opts = c.componentOptions;
16847                    var name_1 = opts
16848                        ? getComponentName(opts.Ctor.options) || opts.tag || ''
16849                        : c.tag;
16850                    warn$2("<transition-group> children must be keyed: <".concat(name_1, ">"));
16851                }
16852            }
16853        }
16854        if (prevChildren) {
16855            var kept = [];
16856            var removed = [];
16857            for (var i = 0; i < prevChildren.length; i++) {
16858                var c = prevChildren[i];
16859                c.data.transition = transitionData;
16860                // @ts-expect-error .getBoundingClientRect is not typed in Node
16861                c.data.pos = c.elm.getBoundingClientRect();
16862                if (map[c.key]) {
16863                    kept.push(c);
16864                }
16865                else {
16866                    removed.push(c);
16867                }
16868            }
16869            this.kept = h(tag, null, kept);
16870            this.removed = removed;
16871        }
16872        return h(tag, null, children);
16873    },
16874    updated: function () {
16875        var children = this.prevChildren;
16876        var moveClass = this.moveClass || (this.name || 'v') + '-move';
16877        if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
16878            return;
16879        }
16880        // we divide the work into three loops to avoid mixing DOM reads and writes
16881        // in each iteration - which helps prevent layout thrashing.
16882        children.forEach(callPendingCbs);
16883        children.forEach(recordPosition);
16884        children.forEach(applyTranslation);
16885        // force reflow to put everything in position
16886        // assign to this to avoid being removed in tree-shaking
16887        // $flow-disable-line
16888        this._reflow = document.body.offsetHeight;
16889        children.forEach(function (c) {
16890            if (c.data.moved) {
16891                var el_1 = c.elm;
16892                var s = el_1.style;
16893                addTransitionClass(el_1, moveClass);
16894                s.transform = s.WebkitTransform = s.transitionDuration = '';
16895                el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) {
16896                    if (e && e.target !== el_1) {
16897                        return;
16898                    }
16899                    if (!e || /transform$/.test(e.propertyName)) {
16900                        el_1.removeEventListener(transitionEndEvent, cb);
16901                        el_1._moveCb = null;
16902                        removeTransitionClass(el_1, moveClass);
16903                    }
16904                }));
16905            }
16906        });
16907    },
16908    methods: {
16909        hasMove: function (el, moveClass) {
16910            /* istanbul ignore if */
16911            if (!hasTransition) {
16912                return false;
16913            }
16914            /* istanbul ignore if */
16915            if (this._hasMove) {
16916                return this._hasMove;
16917            }
16918            // Detect whether an element with the move class applied has
16919            // CSS transitions. Since the element may be inside an entering
16920            // transition at this very moment, we make a clone of it and remove
16921            // all other transition classes applied to ensure only the move class
16922            // is applied.
16923            var clone = el.cloneNode();
16924            if (el._transitionClasses) {
16925                el._transitionClasses.forEach(function (cls) {
16926                    removeClass(clone, cls);
16927                });
16928            }
16929            addClass(clone, moveClass);
16930            clone.style.display = 'none';
16931            this.$el.appendChild(clone);
16932            var info = getTransitionInfo(clone);
16933            this.$el.removeChild(clone);
16934            return (this._hasMove = info.hasTransform);
16935        }
16936    }
16937};
16938function callPendingCbs(c) {
16939    /* istanbul ignore if */
16940    if (c.elm._moveCb) {
16941        c.elm._moveCb();
16942    }
16943    /* istanbul ignore if */
16944    if (c.elm._enterCb) {
16945        c.elm._enterCb();
16946    }
16947}
16948function recordPosition(c) {
16949    c.data.newPos = c.elm.getBoundingClientRect();
16950}
16951function applyTranslation(c) {
16952    var oldPos = c.data.pos;
16953    var newPos = c.data.newPos;
16954    var dx = oldPos.left - newPos.left;
16955    var dy = oldPos.top - newPos.top;
16956    if (dx || dy) {
16957        c.data.moved = true;
16958        var s = c.elm.style;
16959        s.transform = s.WebkitTransform = "translate(".concat(dx, "px,").concat(dy, "px)");
16960        s.transitionDuration = '0s';
16961    }
16962}
16963
16964var platformComponents = {
16965    Transition: Transition,
16966    TransitionGroup: TransitionGroup
16967};
16968
16969// install platform specific utils
16970Vue.config.mustUseProp = mustUseProp;
16971Vue.config.isReservedTag = isReservedTag;
16972Vue.config.isReservedAttr = isReservedAttr;
16973Vue.config.getTagNamespace = getTagNamespace;
16974Vue.config.isUnknownElement = isUnknownElement;
16975// install platform runtime directives & components
16976extend(Vue.options.directives, platformDirectives);
16977extend(Vue.options.components, platformComponents);
16978// install platform patch function
16979Vue.prototype.__patch__ = inBrowser ? patch : noop;
16980// public mount method
16981Vue.prototype.$mount = function (el, hydrating) {
16982    el = el && inBrowser ? query(el) : undefined;
16983    return mountComponent(this, el, hydrating);
16984};
16985// devtools global hook
16986/* istanbul ignore next */
16987if (inBrowser) {
16988    setTimeout(function () {
16989        if (config.devtools) {
16990            if (devtools) {
16991                devtools.emit('init', Vue);
16992            }
16993            else if (true) {
16994                // @ts-expect-error
16995                console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' +
16996                    'https://github.com/vuejs/vue-devtools');
16997            }
16998        }
16999        if ( true &&
17000            config.productionTip !== false &&
17001            typeof console !== 'undefined') {
17002            // @ts-expect-error
17003            console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" +
17004                "Make sure to turn on production mode when deploying for production.\n" +
17005                "See more tips at https://vuejs.org/guide/deployment.html");
17006        }
17007    }, 0);
17008}
17009
17010var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;
17011var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
17012var buildRegex = cached(function (delimiters) {
17013    var open = delimiters[0].replace(regexEscapeRE, '\\$&');
17014    var close = delimiters[1].replace(regexEscapeRE, '\\$&');
17015    return new RegExp(open + '((?:.|\\n)+?)' + close, 'g');
17016});
17017function parseText(text, delimiters) {
17018    //@ts-expect-error
17019    var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
17020    if (!tagRE.test(text)) {
17021        return;
17022    }
17023    var tokens = [];
17024    var rawTokens = [];
17025    var lastIndex = (tagRE.lastIndex = 0);
17026    var match, index, tokenValue;
17027    while ((match = tagRE.exec(text))) {
17028        index = match.index;
17029        // push text token
17030        if (index > lastIndex) {
17031            rawTokens.push((tokenValue = text.slice(lastIndex, index)));
17032            tokens.push(JSON.stringify(tokenValue));
17033        }
17034        // tag token
17035        var exp = parseFilters(match[1].trim());
17036        tokens.push("_s(".concat(exp, ")"));
17037        rawTokens.push({ '@binding': exp });
17038        lastIndex = index + match[0].length;
17039    }
17040    if (lastIndex < text.length) {
17041        rawTokens.push((tokenValue = text.slice(lastIndex)));
17042        tokens.push(JSON.stringify(tokenValue));
17043    }
17044    return {
17045        expression: tokens.join('+'),
17046        tokens: rawTokens
17047    };
17048}
17049
17050function transformNode$1(el, options) {
17051    var warn = options.warn || baseWarn;
17052    var staticClass = getAndRemoveAttr(el, 'class');
17053    if ( true && staticClass) {
17054        var res = parseText(staticClass, options.delimiters);
17055        if (res) {
17056            warn("class=\"".concat(staticClass, "\": ") +
17057                'Interpolation inside attributes has been removed. ' +
17058                'Use v-bind or the colon shorthand instead. For example, ' +
17059                'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']);
17060        }
17061    }
17062    if (staticClass) {
17063        el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim());
17064    }
17065    var classBinding = getBindingAttr(el, 'class', false /* getStatic */);
17066    if (classBinding) {
17067        el.classBinding = classBinding;
17068    }
17069}
17070function genData$2(el) {
17071    var data = '';
17072    if (el.staticClass) {
17073        data += "staticClass:".concat(el.staticClass, ",");
17074    }
17075    if (el.classBinding) {
17076        data += "class:".concat(el.classBinding, ",");
17077    }
17078    return data;
17079}
17080var klass = {
17081    staticKeys: ['staticClass'],
17082    transformNode: transformNode$1,
17083    genData: genData$2
17084};
17085
17086function transformNode(el, options) {
17087    var warn = options.warn || baseWarn;
17088    var staticStyle = getAndRemoveAttr(el, 'style');
17089    if (staticStyle) {
17090        /* istanbul ignore if */
17091        if (true) {
17092            var res = parseText(staticStyle, options.delimiters);
17093            if (res) {
17094                warn("style=\"".concat(staticStyle, "\": ") +
17095                    'Interpolation inside attributes has been removed. ' +
17096                    'Use v-bind or the colon shorthand instead. For example, ' +
17097                    'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']);
17098            }
17099        }
17100        el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
17101    }
17102    var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
17103    if (styleBinding) {
17104        el.styleBinding = styleBinding;
17105    }
17106}
17107function genData$1(el) {
17108    var data = '';
17109    if (el.staticStyle) {
17110        data += "staticStyle:".concat(el.staticStyle, ",");
17111    }
17112    if (el.styleBinding) {
17113        data += "style:(".concat(el.styleBinding, "),");
17114    }
17115    return data;
17116}
17117var style = {
17118    staticKeys: ['staticStyle'],
17119    transformNode: transformNode,
17120    genData: genData$1
17121};
17122
17123var decoder;
17124var he = {
17125    decode: function (html) {
17126        decoder = decoder || document.createElement('div');
17127        decoder.innerHTML = html;
17128        return decoder.textContent;
17129    }
17130};
17131
17132var isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
17133    'link,meta,param,source,track,wbr');
17134// Elements that you can, intentionally, leave open
17135// (and which close themselves)
17136var canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');
17137// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
17138// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
17139var isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
17140    'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
17141    'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
17142    'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
17143    'title,tr,track');
17144
17145/**
17146 * Not type-checking this file because it's mostly vendor code.
17147 */
17148// Regular Expressions for parsing tags and attributes
17149var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
17150var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
17151var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(unicodeRegExp.source, "]*");
17152var qnameCapture = "((?:".concat(ncname, "\\:)?").concat(ncname, ")");
17153var startTagOpen = new RegExp("^<".concat(qnameCapture));
17154var startTagClose = /^\s*(\/?)>/;
17155var endTag = new RegExp("^<\\/".concat(qnameCapture, "[^>]*>"));
17156var doctype = /^<!DOCTYPE [^>]+>/i;
17157// #7298: escape - to avoid being passed as HTML comment when inlined in page
17158var comment = /^<!\--/;
17159var conditionalComment = /^<!\[/;
17160// Special Elements (can contain anything)
17161var isPlainTextElement = makeMap('script,style,textarea', true);
17162var reCache = {};
17163var decodingMap = {
17164    '&lt;': '<',
17165    '&gt;': '>',
17166    '&quot;': '"',
17167    '&amp;': '&',
17168    '&#10;': '\n',
17169    '&#9;': '\t',
17170    '&#39;': "'"
17171};
17172var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;
17173var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;
17174// #5992
17175var isIgnoreNewlineTag = makeMap('pre,textarea', true);
17176var shouldIgnoreFirstNewline = function (tag, html) {
17177    return tag && isIgnoreNewlineTag(tag) && html[0] === '\n';
17178};
17179function decodeAttr(value, shouldDecodeNewlines) {
17180    var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
17181    return value.replace(re, function (match) { return decodingMap[match]; });
17182}
17183function parseHTML(html, options) {
17184    var stack = [];
17185    var expectHTML = options.expectHTML;
17186    var isUnaryTag = options.isUnaryTag || no;
17187    var canBeLeftOpenTag = options.canBeLeftOpenTag || no;
17188    var index = 0;
17189    var last, lastTag;
17190    var _loop_1 = function () {
17191        last = html;
17192        // Make sure we're not in a plaintext content element like script/style
17193        if (!lastTag || !isPlainTextElement(lastTag)) {
17194            var textEnd = html.indexOf('<');
17195            if (textEnd === 0) {
17196                // Comment:
17197                if (comment.test(html)) {
17198                    var commentEnd = html.indexOf('-->');
17199                    if (commentEnd >= 0) {
17200                        if (options.shouldKeepComment && options.comment) {
17201                            options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);
17202                        }
17203                        advance(commentEnd + 3);
17204                        return "continue";
17205                    }
17206                }
17207                // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
17208                if (conditionalComment.test(html)) {
17209                    var conditionalEnd = html.indexOf(']>');
17210                    if (conditionalEnd >= 0) {
17211                        advance(conditionalEnd + 2);
17212                        return "continue";
17213                    }
17214                }
17215                // Doctype:
17216                var doctypeMatch = html.match(doctype);
17217                if (doctypeMatch) {
17218                    advance(doctypeMatch[0].length);
17219                    return "continue";
17220                }
17221                // End tag:
17222                var endTagMatch = html.match(endTag);
17223                if (endTagMatch) {
17224                    var curIndex = index;
17225                    advance(endTagMatch[0].length);
17226                    parseEndTag(endTagMatch[1], curIndex, index);
17227                    return "continue";
17228                }
17229                // Start tag:
17230                var startTagMatch = parseStartTag();
17231                if (startTagMatch) {
17232                    handleStartTag(startTagMatch);
17233                    if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
17234                        advance(1);
17235                    }
17236                    return "continue";
17237                }
17238            }
17239            var text = void 0, rest = void 0, next = void 0;
17240            if (textEnd >= 0) {
17241                rest = html.slice(textEnd);
17242                while (!endTag.test(rest) &&
17243                    !startTagOpen.test(rest) &&
17244                    !comment.test(rest) &&
17245                    !conditionalComment.test(rest)) {
17246                    // < in plain text, be forgiving and treat it as text
17247                    next = rest.indexOf('<', 1);
17248                    if (next < 0)
17249                        break;
17250                    textEnd += next;
17251                    rest = html.slice(textEnd);
17252                }
17253                text = html.substring(0, textEnd);
17254            }
17255            if (textEnd < 0) {
17256                text = html;
17257            }
17258            if (text) {
17259                advance(text.length);
17260            }
17261            if (options.chars && text) {
17262                options.chars(text, index - text.length, index);
17263            }
17264        }
17265        else {
17266            var endTagLength_1 = 0;
17267            var stackedTag_1 = lastTag.toLowerCase();
17268            var reStackedTag = reCache[stackedTag_1] ||
17269                (reCache[stackedTag_1] = new RegExp('([\\s\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i'));
17270            var rest = html.replace(reStackedTag, function (all, text, endTag) {
17271                endTagLength_1 = endTag.length;
17272                if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') {
17273                    text = text
17274                        .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
17275                        .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
17276                }
17277                if (shouldIgnoreFirstNewline(stackedTag_1, text)) {
17278                    text = text.slice(1);
17279                }
17280                if (options.chars) {
17281                    options.chars(text);
17282                }
17283                return '';
17284            });
17285            index += html.length - rest.length;
17286            html = rest;
17287            parseEndTag(stackedTag_1, index - endTagLength_1, index);
17288        }
17289        if (html === last) {
17290            options.chars && options.chars(html);
17291            if ( true && !stack.length && options.warn) {
17292                options.warn("Mal-formatted tag at end of template: \"".concat(html, "\""), {
17293                    start: index + html.length
17294                });
17295            }
17296            return "break";
17297        }
17298    };
17299    while (html) {
17300        var state_1 = _loop_1();
17301        if (state_1 === "break")
17302            break;
17303    }
17304    // Clean up any remaining tags
17305    parseEndTag();
17306    function advance(n) {
17307        index += n;
17308        html = html.substring(n);
17309    }
17310    function parseStartTag() {
17311        var start = html.match(startTagOpen);
17312        if (start) {
17313            var match = {
17314                tagName: start[1],
17315                attrs: [],
17316                start: index
17317            };
17318            advance(start[0].length);
17319            var end = void 0, attr = void 0;
17320            while (!(end = html.match(startTagClose)) &&
17321                (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {
17322                attr.start = index;
17323                advance(attr[0].length);
17324                attr.end = index;
17325                match.attrs.push(attr);
17326            }
17327            if (end) {
17328                match.unarySlash = end[1];
17329                advance(end[0].length);
17330                match.end = index;
17331                return match;
17332            }
17333        }
17334    }
17335    function handleStartTag(match) {
17336        var tagName = match.tagName;
17337        var unarySlash = match.unarySlash;
17338        if (expectHTML) {
17339            if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
17340                parseEndTag(lastTag);
17341            }
17342            if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
17343                parseEndTag(tagName);
17344            }
17345        }
17346        var unary = isUnaryTag(tagName) || !!unarySlash;
17347        var l = match.attrs.length;
17348        var attrs = new Array(l);
17349        for (var i = 0; i < l; i++) {
17350            var args = match.attrs[i];
17351            var value = args[3] || args[4] || args[5] || '';
17352            var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'
17353                ? options.shouldDecodeNewlinesForHref
17354                : options.shouldDecodeNewlines;
17355            attrs[i] = {
17356                name: args[1],
17357                value: decodeAttr(value, shouldDecodeNewlines)
17358            };
17359            if ( true && options.outputSourceRange) {
17360                attrs[i].start = args.start + args[0].match(/^\s*/).length;
17361                attrs[i].end = args.end;
17362            }
17363        }
17364        if (!unary) {
17365            stack.push({
17366                tag: tagName,
17367                lowerCasedTag: tagName.toLowerCase(),
17368                attrs: attrs,
17369                start: match.start,
17370                end: match.end
17371            });
17372            lastTag = tagName;
17373        }
17374        if (options.start) {
17375            options.start(tagName, attrs, unary, match.start, match.end);
17376        }
17377    }
17378    function parseEndTag(tagName, start, end) {
17379        var pos, lowerCasedTagName;
17380        if (start == null)
17381            start = index;
17382        if (end == null)
17383            end = index;
17384        // Find the closest opened tag of the same type
17385        if (tagName) {
17386            lowerCasedTagName = tagName.toLowerCase();
17387            for (pos = stack.length - 1; pos >= 0; pos--) {
17388                if (stack[pos].lowerCasedTag === lowerCasedTagName) {
17389                    break;
17390                }
17391            }
17392        }
17393        else {
17394            // If no tag name is provided, clean shop
17395            pos = 0;
17396        }
17397        if (pos >= 0) {
17398            // Close all the open elements, up the stack
17399            for (var i = stack.length - 1; i >= pos; i--) {
17400                if ( true && (i > pos || !tagName) && options.warn) {
17401                    options.warn("tag <".concat(stack[i].tag, "> has no matching end tag."), {
17402                        start: stack[i].start,
17403                        end: stack[i].end
17404                    });
17405                }
17406                if (options.end) {
17407                    options.end(stack[i].tag, start, end);
17408                }
17409            }
17410            // Remove the open elements from the stack
17411            stack.length = pos;
17412            lastTag = pos && stack[pos - 1].tag;
17413        }
17414        else if (lowerCasedTagName === 'br') {
17415            if (options.start) {
17416                options.start(tagName, [], true, start, end);
17417            }
17418        }
17419        else if (lowerCasedTagName === 'p') {
17420            if (options.start) {
17421                options.start(tagName, [], false, start, end);
17422            }
17423            if (options.end) {
17424                options.end(tagName, start, end);
17425            }
17426        }
17427    }
17428}
17429
17430var onRE = /^@|^v-on:/;
17431var dirRE = /^v-|^@|^:|^#/;
17432var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
17433var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
17434var stripParensRE = /^\(|\)$/g;
17435var dynamicArgRE = /^\[.*\]$/;
17436var argRE = /:(.*)$/;
17437var bindRE = /^:|^\.|^v-bind:/;
17438var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g;
17439var slotRE = /^v-slot(:|$)|^#/;
17440var lineBreakRE = /[\r\n]/;
17441var whitespaceRE = /[ \f\t\r\n]+/g;
17442var invalidAttributeRE = /[\s"'<>\/=]/;
17443var decodeHTMLCached = cached(he.decode);
17444var emptySlotScopeToken = "_empty_";
17445// configurable state
17446var warn;
17447var delimiters;
17448var transforms;
17449var preTransforms;
17450var postTransforms;
17451var platformIsPreTag;
17452var platformMustUseProp;
17453var platformGetTagNamespace;
17454var maybeComponent;
17455function createASTElement(tag, attrs, parent) {
17456    return {
17457        type: 1,
17458        tag: tag,
17459        attrsList: attrs,
17460        attrsMap: makeAttrsMap(attrs),
17461        rawAttrsMap: {},
17462        parent: parent,
17463        children: []
17464    };
17465}
17466/**
17467 * Convert HTML string to AST.
17468 */
17469function parse(template, options) {
17470    warn = options.warn || baseWarn;
17471    platformIsPreTag = options.isPreTag || no;
17472    platformMustUseProp = options.mustUseProp || no;
17473    platformGetTagNamespace = options.getTagNamespace || no;
17474    var isReservedTag = options.isReservedTag || no;
17475    maybeComponent = function (el) {
17476        return !!(el.component ||
17477            el.attrsMap[':is'] ||
17478            el.attrsMap['v-bind:is'] ||
17479            !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)));
17480    };
17481    transforms = pluckModuleFunction(options.modules, 'transformNode');
17482    preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
17483    postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
17484    delimiters = options.delimiters;
17485    var stack = [];
17486    var preserveWhitespace = options.preserveWhitespace !== false;
17487    var whitespaceOption = options.whitespace;
17488    var root;
17489    var currentParent;
17490    var inVPre = false;
17491    var inPre = false;
17492    var warned = false;
17493    function warnOnce(msg, range) {
17494        if (!warned) {
17495            warned = true;
17496            warn(msg, range);
17497        }
17498    }
17499    function closeElement(element) {
17500        trimEndingWhitespace(element);
17501        if (!inVPre && !element.processed) {
17502            element = processElement(element, options);
17503        }
17504        // tree management
17505        if (!stack.length && element !== root) {
17506            // allow root elements with v-if, v-else-if and v-else
17507            if (root.if && (element.elseif || element.else)) {
17508                if (true) {
17509                    checkRootConstraints(element);
17510                }
17511                addIfCondition(root, {
17512                    exp: element.elseif,
17513                    block: element
17514                });
17515            }
17516            else if (true) {
17517                warnOnce("Component template should contain exactly one root element. " +
17518                    "If you are using v-if on multiple elements, " +
17519                    "use v-else-if to chain them instead.", { start: element.start });
17520            }
17521        }
17522        if (currentParent && !element.forbidden) {
17523            if (element.elseif || element.else) {
17524                processIfConditions(element, currentParent);
17525            }
17526            else {
17527                if (element.slotScope) {
17528                    // scoped slot
17529                    // keep it in the children list so that v-else(-if) conditions can
17530                    // find it as the prev node.
17531                    var name_1 = element.slotTarget || '"default"';
17532                    (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element;
17533                }
17534                currentParent.children.push(element);
17535                element.parent = currentParent;
17536            }
17537        }
17538        // final children cleanup
17539        // filter out scoped slots
17540        element.children = element.children.filter(function (c) { return !c.slotScope; });
17541        // remove trailing whitespace node again
17542        trimEndingWhitespace(element);
17543        // check pre state
17544        if (element.pre) {
17545            inVPre = false;
17546        }
17547        if (platformIsPreTag(element.tag)) {
17548            inPre = false;
17549        }
17550        // apply post-transforms
17551        for (var i = 0; i < postTransforms.length; i++) {
17552            postTransforms[i](element, options);
17553        }
17554    }
17555    function trimEndingWhitespace(el) {
17556        // remove trailing whitespace node
17557        if (!inPre) {
17558            var lastNode = void 0;
17559            while ((lastNode = el.children[el.children.length - 1]) &&
17560                lastNode.type === 3 &&
17561                lastNode.text === ' ') {
17562                el.children.pop();
17563            }
17564        }
17565    }
17566    function checkRootConstraints(el) {
17567        if (el.tag === 'slot' || el.tag === 'template') {
17568            warnOnce("Cannot use <".concat(el.tag, "> as component root element because it may ") +
17569                'contain multiple nodes.', { start: el.start });
17570        }
17571        if (el.attrsMap.hasOwnProperty('v-for')) {
17572            warnOnce('Cannot use v-for on stateful component root element because ' +
17573                'it renders multiple elements.', el.rawAttrsMap['v-for']);
17574        }
17575    }
17576    parseHTML(template, {
17577        warn: warn,
17578        expectHTML: options.expectHTML,
17579        isUnaryTag: options.isUnaryTag,
17580        canBeLeftOpenTag: options.canBeLeftOpenTag,
17581        shouldDecodeNewlines: options.shouldDecodeNewlines,
17582        shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
17583        shouldKeepComment: options.comments,
17584        outputSourceRange: options.outputSourceRange,
17585        start: function (tag, attrs, unary, start, end) {
17586            // check namespace.
17587            // inherit parent ns if there is one
17588            var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);
17589            // handle IE svg bug
17590            /* istanbul ignore if */
17591            if (isIE && ns === 'svg') {
17592                attrs = guardIESVGBug(attrs);
17593            }
17594            var element = createASTElement(tag, attrs, currentParent);
17595            if (ns) {
17596                element.ns = ns;
17597            }
17598            if (true) {
17599                if (options.outputSourceRange) {
17600                    element.start = start;
17601                    element.end = end;
17602                    element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {
17603                        cumulated[attr.name] = attr;
17604                        return cumulated;
17605                    }, {});
17606                }
17607                attrs.forEach(function (attr) {
17608                    if (invalidAttributeRE.test(attr.name)) {
17609                        warn("Invalid dynamic argument expression: attribute names cannot contain " +
17610                            "spaces, quotes, <, >, / or =.", options.outputSourceRange
17611                            ? {
17612                                start: attr.start + attr.name.indexOf("["),
17613                                end: attr.start + attr.name.length
17614                            }
17615                            : undefined);
17616                    }
17617                });
17618            }
17619            if (isForbiddenTag(element) && !isServerRendering()) {
17620                element.forbidden = true;
17621                 true &&
17622                    warn('Templates should only be responsible for mapping the state to the ' +
17623                        'UI. Avoid placing tags with side-effects in your templates, such as ' +
17624                        "<".concat(tag, ">") +
17625                        ', as they will not be parsed.', { start: element.start });
17626            }
17627            // apply pre-transforms
17628            for (var i = 0; i < preTransforms.length; i++) {
17629                element = preTransforms[i](element, options) || element;
17630            }
17631            if (!inVPre) {
17632                processPre(element);
17633                if (element.pre) {
17634                    inVPre = true;
17635                }
17636            }
17637            if (platformIsPreTag(element.tag)) {
17638                inPre = true;
17639            }
17640            if (inVPre) {
17641                processRawAttrs(element);
17642            }
17643            else if (!element.processed) {
17644                // structural directives
17645                processFor(element);
17646                processIf(element);
17647                processOnce(element);
17648            }
17649            if (!root) {
17650                root = element;
17651                if (true) {
17652                    checkRootConstraints(root);
17653                }
17654            }
17655            if (!unary) {
17656                currentParent = element;
17657                stack.push(element);
17658            }
17659            else {
17660                closeElement(element);
17661            }
17662        },
17663        end: function (tag, start, end) {
17664            var element = stack[stack.length - 1];
17665            // pop stack
17666            stack.length -= 1;
17667            currentParent = stack[stack.length - 1];
17668            if ( true && options.outputSourceRange) {
17669                element.end = end;
17670            }
17671            closeElement(element);
17672        },
17673        chars: function (text, start, end) {
17674            if (!currentParent) {
17675                if (true) {
17676                    if (text === template) {
17677                        warnOnce('Component template requires a root element, rather than just text.', { start: start });
17678                    }
17679                    else if ((text = text.trim())) {
17680                        warnOnce("text \"".concat(text, "\" outside root element will be ignored."), {
17681                            start: start
17682                        });
17683                    }
17684                }
17685                return;
17686            }
17687            // IE textarea placeholder bug
17688            /* istanbul ignore if */
17689            if (isIE &&
17690                currentParent.tag === 'textarea' &&
17691                currentParent.attrsMap.placeholder === text) {
17692                return;
17693            }
17694            var children = currentParent.children;
17695            if (inPre || text.trim()) {
17696                text = isTextTag(currentParent)
17697                    ? text
17698                    : decodeHTMLCached(text);
17699            }
17700            else if (!children.length) {
17701                // remove the whitespace-only node right after an opening tag
17702                text = '';
17703            }
17704            else if (whitespaceOption) {
17705                if (whitespaceOption === 'condense') {
17706                    // in condense mode, remove the whitespace node if it contains
17707                    // line break, otherwise condense to a single space
17708                    text = lineBreakRE.test(text) ? '' : ' ';
17709                }
17710                else {
17711                    text = ' ';
17712                }
17713            }
17714            else {
17715                text = preserveWhitespace ? ' ' : '';
17716            }
17717            if (text) {
17718                if (!inPre && whitespaceOption === 'condense') {
17719                    // condense consecutive whitespaces into single space
17720                    text = text.replace(whitespaceRE, ' ');
17721                }
17722                var res = void 0;
17723                var child = void 0;
17724                if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
17725                    child = {
17726                        type: 2,
17727                        expression: res.expression,
17728                        tokens: res.tokens,
17729                        text: text
17730                    };
17731                }
17732                else if (text !== ' ' ||
17733                    !children.length ||
17734                    children[children.length - 1].text !== ' ') {
17735                    child = {
17736                        type: 3,
17737                        text: text
17738                    };
17739                }
17740                if (child) {
17741                    if ( true && options.outputSourceRange) {
17742                        child.start = start;
17743                        child.end = end;
17744                    }
17745                    children.push(child);
17746                }
17747            }
17748        },
17749        comment: function (text, start, end) {
17750            // adding anything as a sibling to the root node is forbidden
17751            // comments should still be allowed, but ignored
17752            if (currentParent) {
17753                var child = {
17754                    type: 3,
17755                    text: text,
17756                    isComment: true
17757                };
17758                if ( true && options.outputSourceRange) {
17759                    child.start = start;
17760                    child.end = end;
17761                }
17762                currentParent.children.push(child);
17763            }
17764        }
17765    });
17766    return root;
17767}
17768function processPre(el) {
17769    if (getAndRemoveAttr(el, 'v-pre') != null) {
17770        el.pre = true;
17771    }
17772}
17773function processRawAttrs(el) {
17774    var list = el.attrsList;
17775    var len = list.length;
17776    if (len) {
17777        var attrs = (el.attrs = new Array(len));
17778        for (var i = 0; i < len; i++) {
17779            attrs[i] = {
17780                name: list[i].name,
17781                value: JSON.stringify(list[i].value)
17782            };
17783            if (list[i].start != null) {
17784                attrs[i].start = list[i].start;
17785                attrs[i].end = list[i].end;
17786            }
17787        }
17788    }
17789    else if (!el.pre) {
17790        // non root node in pre blocks with no attributes
17791        el.plain = true;
17792    }
17793}
17794function processElement(element, options) {
17795    processKey(element);
17796    // determine whether this is a plain element after
17797    // removing structural attributes
17798    element.plain =
17799        !element.key && !element.scopedSlots && !element.attrsList.length;
17800    processRef(element);
17801    processSlotContent(element);
17802    processSlotOutlet(element);
17803    processComponent(element);
17804    for (var i = 0; i < transforms.length; i++) {
17805        element = transforms[i](element, options) || element;
17806    }
17807    processAttrs(element);
17808    return element;
17809}
17810function processKey(el) {
17811    var exp = getBindingAttr(el, 'key');
17812    if (exp) {
17813        if (true) {
17814            if (el.tag === 'template') {
17815                warn("<template> cannot be keyed. Place the key on real elements instead.", getRawBindingAttr(el, 'key'));
17816            }
17817            if (el.for) {
17818                var iterator = el.iterator2 || el.iterator1;
17819                var parent_1 = el.parent;
17820                if (iterator &&
17821                    iterator === exp &&
17822                    parent_1 &&
17823                    parent_1.tag === 'transition-group') {
17824                    warn("Do not use v-for index as key on <transition-group> children, " +
17825                        "this is the same as not using keys.", getRawBindingAttr(el, 'key'), true /* tip */);
17826                }
17827            }
17828        }
17829        el.key = exp;
17830    }
17831}
17832function processRef(el) {
17833    var ref = getBindingAttr(el, 'ref');
17834    if (ref) {
17835        el.ref = ref;
17836        el.refInFor = checkInFor(el);
17837    }
17838}
17839function processFor(el) {
17840    var exp;
17841    if ((exp = getAndRemoveAttr(el, 'v-for'))) {
17842        var res = parseFor(exp);
17843        if (res) {
17844            extend(el, res);
17845        }
17846        else if (true) {
17847            warn("Invalid v-for expression: ".concat(exp), el.rawAttrsMap['v-for']);
17848        }
17849    }
17850}
17851function parseFor(exp) {
17852    var inMatch = exp.match(forAliasRE);
17853    if (!inMatch)
17854        return;
17855    var res = {};
17856    res.for = inMatch[2].trim();
17857    var alias = inMatch[1].trim().replace(stripParensRE, '');
17858    var iteratorMatch = alias.match(forIteratorRE);
17859    if (iteratorMatch) {
17860        res.alias = alias.replace(forIteratorRE, '').trim();
17861        res.iterator1 = iteratorMatch[1].trim();
17862        if (iteratorMatch[2]) {
17863            res.iterator2 = iteratorMatch[2].trim();
17864        }
17865    }
17866    else {
17867        res.alias = alias;
17868    }
17869    return res;
17870}
17871function processIf(el) {
17872    var exp = getAndRemoveAttr(el, 'v-if');
17873    if (exp) {
17874        el.if = exp;
17875        addIfCondition(el, {
17876            exp: exp,
17877            block: el
17878        });
17879    }
17880    else {
17881        if (getAndRemoveAttr(el, 'v-else') != null) {
17882            el.else = true;
17883        }
17884        var elseif = getAndRemoveAttr(el, 'v-else-if');
17885        if (elseif) {
17886            el.elseif = elseif;
17887        }
17888    }
17889}
17890function processIfConditions(el, parent) {
17891    var prev = findPrevElement(parent.children);
17892    if (prev && prev.if) {
17893        addIfCondition(prev, {
17894            exp: el.elseif,
17895            block: el
17896        });
17897    }
17898    else if (true) {
17899        warn("v-".concat(el.elseif ? 'else-if="' + el.elseif + '"' : 'else', " ") +
17900            "used on element <".concat(el.tag, "> without corresponding v-if."), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);
17901    }
17902}
17903function findPrevElement(children) {
17904    var i = children.length;
17905    while (i--) {
17906        if (children[i].type === 1) {
17907            return children[i];
17908        }
17909        else {
17910            if ( true && children[i].text !== ' ') {
17911                warn("text \"".concat(children[i].text.trim(), "\" between v-if and v-else(-if) ") +
17912                    "will be ignored.", children[i]);
17913            }
17914            children.pop();
17915        }
17916    }
17917}
17918function addIfCondition(el, condition) {
17919    if (!el.ifConditions) {
17920        el.ifConditions = [];
17921    }
17922    el.ifConditions.push(condition);
17923}
17924function processOnce(el) {
17925    var once = getAndRemoveAttr(el, 'v-once');
17926    if (once != null) {
17927        el.once = true;
17928    }
17929}
17930// handle content being passed to a component as slot,
17931// e.g. <template slot="xxx">, <div slot-scope="xxx">
17932function processSlotContent(el) {
17933    var slotScope;
17934    if (el.tag === 'template') {
17935        slotScope = getAndRemoveAttr(el, 'scope');
17936        /* istanbul ignore if */
17937        if ( true && slotScope) {
17938            warn("the \"scope\" attribute for scoped slots have been deprecated and " +
17939                "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " +
17940                "can also be used on plain elements in addition to <template> to " +
17941                "denote scoped slots.", el.rawAttrsMap['scope'], true);
17942        }
17943        el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
17944    }
17945    else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
17946        /* istanbul ignore if */
17947        if ( true && el.attrsMap['v-for']) {
17948            warn("Ambiguous combined usage of slot-scope and v-for on <".concat(el.tag, "> ") +
17949                "(v-for takes higher priority). Use a wrapper <template> for the " +
17950                "scoped slot to make it clearer.", el.rawAttrsMap['slot-scope'], true);
17951        }
17952        el.slotScope = slotScope;
17953    }
17954    // slot="xxx"
17955    var slotTarget = getBindingAttr(el, 'slot');
17956    if (slotTarget) {
17957        el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
17958        el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);
17959        // preserve slot as an attribute for native shadow DOM compat
17960        // only for non-scoped slots.
17961        if (el.tag !== 'template' && !el.slotScope) {
17962            addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));
17963        }
17964    }
17965    // 2.6 v-slot syntax
17966    {
17967        if (el.tag === 'template') {
17968            // v-slot on <template>
17969            var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
17970            if (slotBinding) {
17971                if (true) {
17972                    if (el.slotTarget || el.slotScope) {
17973                        warn("Unexpected mixed usage of different slot syntaxes.", el);
17974                    }
17975                    if (el.parent && !maybeComponent(el.parent)) {
17976                        warn("<template v-slot> can only appear at the root level inside " +
17977                            "the receiving component", el);
17978                    }
17979                }
17980                var _a = getSlotName(slotBinding), name_2 = _a.name, dynamic = _a.dynamic;
17981                el.slotTarget = name_2;
17982                el.slotTargetDynamic = dynamic;
17983                el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf
17984            }
17985        }
17986        else {
17987            // v-slot on component, denotes default slot
17988            var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
17989            if (slotBinding) {
17990                if (true) {
17991                    if (!maybeComponent(el)) {
17992                        warn("v-slot can only be used on components or <template>.", slotBinding);
17993                    }
17994                    if (el.slotScope || el.slotTarget) {
17995                        warn("Unexpected mixed usage of different slot syntaxes.", el);
17996                    }
17997                    if (el.scopedSlots) {
17998                        warn("To avoid scope ambiguity, the default slot should also use " +
17999                            "<template> syntax when there are other named slots.", slotBinding);
18000                    }
18001                }
18002                // add the component's children to its default slot
18003                var slots = el.scopedSlots || (el.scopedSlots = {});
18004                var _b = getSlotName(slotBinding), name_3 = _b.name, dynamic = _b.dynamic;
18005                var slotContainer_1 = (slots[name_3] = createASTElement('template', [], el));
18006                slotContainer_1.slotTarget = name_3;
18007                slotContainer_1.slotTargetDynamic = dynamic;
18008                slotContainer_1.children = el.children.filter(function (c) {
18009                    if (!c.slotScope) {
18010                        c.parent = slotContainer_1;
18011                        return true;
18012                    }
18013                });
18014                slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken;
18015                // remove children as they are returned from scopedSlots now
18016                el.children = [];
18017                // mark el non-plain so data gets generated
18018                el.plain = false;
18019            }
18020        }
18021    }
18022}
18023function getSlotName(binding) {
18024    var name = binding.name.replace(slotRE, '');
18025    if (!name) {
18026        if (binding.name[0] !== '#') {
18027            name = 'default';
18028        }
18029        else if (true) {
18030            warn("v-slot shorthand syntax requires a slot name.", binding);
18031        }
18032    }
18033    return dynamicArgRE.test(name)
18034        ? // dynamic [name]
18035            { name: name.slice(1, -1), dynamic: true }
18036        : // static name
18037            { name: "\"".concat(name, "\""), dynamic: false };
18038}
18039// handle <slot/> outlets
18040function processSlotOutlet(el) {
18041    if (el.tag === 'slot') {
18042        el.slotName = getBindingAttr(el, 'name');
18043        if ( true && el.key) {
18044            warn("`key` does not work on <slot> because slots are abstract outlets " +
18045                "and can possibly expand into multiple elements. " +
18046                "Use the key on a wrapping element instead.", getRawBindingAttr(el, 'key'));
18047        }
18048    }
18049}
18050function processComponent(el) {
18051    var binding;
18052    if ((binding = getBindingAttr(el, 'is'))) {
18053        el.component = binding;
18054    }
18055    if (getAndRemoveAttr(el, 'inline-template') != null) {
18056        el.inlineTemplate = true;
18057    }
18058}
18059function processAttrs(el) {
18060    var list = el.attrsList;
18061    var i, l, name, rawName, value, modifiers, syncGen, isDynamic;
18062    for (i = 0, l = list.length; i < l; i++) {
18063        name = rawName = list[i].name;
18064        value = list[i].value;
18065        if (dirRE.test(name)) {
18066            // mark element as dynamic
18067            el.hasBindings = true;
18068            // modifiers
18069            modifiers = parseModifiers(name.replace(dirRE, ''));
18070            // support .foo shorthand syntax for the .prop modifier
18071            if (modifiers) {
18072                name = name.replace(modifierRE, '');
18073            }
18074            if (bindRE.test(name)) {
18075                // v-bind
18076                name = name.replace(bindRE, '');
18077                value = parseFilters(value);
18078                isDynamic = dynamicArgRE.test(name);
18079                if (isDynamic) {
18080                    name = name.slice(1, -1);
18081                }
18082                if ( true && value.trim().length === 0) {
18083                    warn("The value for a v-bind expression cannot be empty. Found in \"v-bind:".concat(name, "\""));
18084                }
18085                if (modifiers) {
18086                    if (modifiers.prop && !isDynamic) {
18087                        name = camelize(name);
18088                        if (name === 'innerHtml')
18089                            name = 'innerHTML';
18090                    }
18091                    if (modifiers.camel && !isDynamic) {
18092                        name = camelize(name);
18093                    }
18094                    if (modifiers.sync) {
18095                        syncGen = genAssignmentCode(value, "$event");
18096                        if (!isDynamic) {
18097                            addHandler(el, "update:".concat(camelize(name)), syncGen, null, false, warn, list[i]);
18098                            if (hyphenate(name) !== camelize(name)) {
18099                                addHandler(el, "update:".concat(hyphenate(name)), syncGen, null, false, warn, list[i]);
18100                            }
18101                        }
18102                        else {
18103                            // handler w/ dynamic event name
18104                            addHandler(el, "\"update:\"+(".concat(name, ")"), syncGen, null, false, warn, list[i], true // dynamic
18105                            );
18106                        }
18107                    }
18108                }
18109                if ((modifiers && modifiers.prop) ||
18110                    (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) {
18111                    addProp(el, name, value, list[i], isDynamic);
18112                }
18113                else {
18114                    addAttr(el, name, value, list[i], isDynamic);
18115                }
18116            }
18117            else if (onRE.test(name)) {
18118                // v-on
18119                name = name.replace(onRE, '');
18120                isDynamic = dynamicArgRE.test(name);
18121                if (isDynamic) {
18122                    name = name.slice(1, -1);
18123                }
18124                addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic);
18125            }
18126            else {
18127                // normal directives
18128                name = name.replace(dirRE, '');
18129                // parse arg
18130                var argMatch = name.match(argRE);
18131                var arg = argMatch && argMatch[1];
18132                isDynamic = false;
18133                if (arg) {
18134                    name = name.slice(0, -(arg.length + 1));
18135                    if (dynamicArgRE.test(arg)) {
18136                        arg = arg.slice(1, -1);
18137                        isDynamic = true;
18138                    }
18139                }
18140                addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);
18141                if ( true && name === 'model') {
18142                    checkForAliasModel(el, value);
18143                }
18144            }
18145        }
18146        else {
18147            // literal attribute
18148            if (true) {
18149                var res = parseText(value, delimiters);
18150                if (res) {
18151                    warn("".concat(name, "=\"").concat(value, "\": ") +
18152                        'Interpolation inside attributes has been removed. ' +
18153                        'Use v-bind or the colon shorthand instead. For example, ' +
18154                        'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]);
18155                }
18156            }
18157            addAttr(el, name, JSON.stringify(value), list[i]);
18158            // #6887 firefox doesn't update muted state if set via attribute
18159            // even immediately after element creation
18160            if (!el.component &&
18161                name === 'muted' &&
18162                platformMustUseProp(el.tag, el.attrsMap.type, name)) {
18163                addProp(el, name, 'true', list[i]);
18164            }
18165        }
18166    }
18167}
18168function checkInFor(el) {
18169    var parent = el;
18170    while (parent) {
18171        if (parent.for !== undefined) {
18172            return true;
18173        }
18174        parent = parent.parent;
18175    }
18176    return false;
18177}
18178function parseModifiers(name) {
18179    var match = name.match(modifierRE);
18180    if (match) {
18181        var ret_1 = {};
18182        match.forEach(function (m) {
18183            ret_1[m.slice(1)] = true;
18184        });
18185        return ret_1;
18186    }
18187}
18188function makeAttrsMap(attrs) {
18189    var map = {};
18190    for (var i = 0, l = attrs.length; i < l; i++) {
18191        if ( true && map[attrs[i].name] && !isIE && !isEdge) {
18192            warn('duplicate attribute: ' + attrs[i].name, attrs[i]);
18193        }
18194        map[attrs[i].name] = attrs[i].value;
18195    }
18196    return map;
18197}
18198// for script (e.g. type="x/template") or style, do not decode content
18199function isTextTag(el) {
18200    return el.tag === 'script' || el.tag === 'style';
18201}
18202function isForbiddenTag(el) {
18203    return (el.tag === 'style' ||
18204        (el.tag === 'script' &&
18205            (!el.attrsMap.type || el.attrsMap.type === 'text/javascript')));
18206}
18207var ieNSBug = /^xmlns:NS\d+/;
18208var ieNSPrefix = /^NS\d+:/;
18209/* istanbul ignore next */
18210function guardIESVGBug(attrs) {
18211    var res = [];
18212    for (var i = 0; i < attrs.length; i++) {
18213        var attr = attrs[i];
18214        if (!ieNSBug.test(attr.name)) {
18215            attr.name = attr.name.replace(ieNSPrefix, '');
18216            res.push(attr);
18217        }
18218    }
18219    return res;
18220}
18221function checkForAliasModel(el, value) {
18222    var _el = el;
18223    while (_el) {
18224        if (_el.for && _el.alias === value) {
18225            warn("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") +
18226                "You are binding v-model directly to a v-for iteration alias. " +
18227                "This will not be able to modify the v-for source array because " +
18228                "writing to the alias is like modifying a function local variable. " +
18229                "Consider using an array of objects and use v-model on an object property instead.", el.rawAttrsMap['v-model']);
18230        }
18231        _el = _el.parent;
18232    }
18233}
18234
18235/**
18236 * Expand input[v-model] with dynamic type bindings into v-if-else chains
18237 * Turn this:
18238 *   <input v-model="data[type]" :type="type">
18239 * into this:
18240 *   <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
18241 *   <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
18242 *   <input v-else :type="type" v-model="data[type]">
18243 */
18244function preTransformNode(el, options) {
18245    if (el.tag === 'input') {
18246        var map = el.attrsMap;
18247        if (!map['v-model']) {
18248            return;
18249        }
18250        var typeBinding = void 0;
18251        if (map[':type'] || map['v-bind:type']) {
18252            typeBinding = getBindingAttr(el, 'type');
18253        }
18254        if (!map.type && !typeBinding && map['v-bind']) {
18255            typeBinding = "(".concat(map['v-bind'], ").type");
18256        }
18257        if (typeBinding) {
18258            var ifCondition = getAndRemoveAttr(el, 'v-if', true);
18259            var ifConditionExtra = ifCondition ? "&&(".concat(ifCondition, ")") : "";
18260            var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
18261            var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
18262            // 1. checkbox
18263            var branch0 = cloneASTElement(el);
18264            // process for on the main node
18265            processFor(branch0);
18266            addRawAttr(branch0, 'type', 'checkbox');
18267            processElement(branch0, options);
18268            branch0.processed = true; // prevent it from double-processed
18269            branch0.if = "(".concat(typeBinding, ")==='checkbox'") + ifConditionExtra;
18270            addIfCondition(branch0, {
18271                exp: branch0.if,
18272                block: branch0
18273            });
18274            // 2. add radio else-if condition
18275            var branch1 = cloneASTElement(el);
18276            getAndRemoveAttr(branch1, 'v-for', true);
18277            addRawAttr(branch1, 'type', 'radio');
18278            processElement(branch1, options);
18279            addIfCondition(branch0, {
18280                exp: "(".concat(typeBinding, ")==='radio'") + ifConditionExtra,
18281                block: branch1
18282            });
18283            // 3. other
18284            var branch2 = cloneASTElement(el);
18285            getAndRemoveAttr(branch2, 'v-for', true);
18286            addRawAttr(branch2, ':type', typeBinding);
18287            processElement(branch2, options);
18288            addIfCondition(branch0, {
18289                exp: ifCondition,
18290                block: branch2
18291            });
18292            if (hasElse) {
18293                branch0.else = true;
18294            }
18295            else if (elseIfCondition) {
18296                branch0.elseif = elseIfCondition;
18297            }
18298            return branch0;
18299        }
18300    }
18301}
18302function cloneASTElement(el) {
18303    return createASTElement(el.tag, el.attrsList.slice(), el.parent);
18304}
18305var model = {
18306    preTransformNode: preTransformNode
18307};
18308
18309var modules = [klass, style, model];
18310
18311function text(el, dir) {
18312    if (dir.value) {
18313        addProp(el, 'textContent', "_s(".concat(dir.value, ")"), dir);
18314    }
18315}
18316
18317function html(el, dir) {
18318    if (dir.value) {
18319        addProp(el, 'innerHTML', "_s(".concat(dir.value, ")"), dir);
18320    }
18321}
18322
18323var directives = {
18324    model: model$1,
18325    text: text,
18326    html: html
18327};
18328
18329var baseOptions = {
18330    expectHTML: true,
18331    modules: modules,
18332    directives: directives,
18333    isPreTag: isPreTag,
18334    isUnaryTag: isUnaryTag,
18335    mustUseProp: mustUseProp,
18336    canBeLeftOpenTag: canBeLeftOpenTag,
18337    isReservedTag: isReservedTag,
18338    getTagNamespace: getTagNamespace,
18339    staticKeys: genStaticKeys$1(modules)
18340};
18341
18342var isStaticKey;
18343var isPlatformReservedTag;
18344var genStaticKeysCached = cached(genStaticKeys);
18345/**
18346 * Goal of the optimizer: walk the generated template AST tree
18347 * and detect sub-trees that are purely static, i.e. parts of
18348 * the DOM that never needs to change.
18349 *
18350 * Once we detect these sub-trees, we can:
18351 *
18352 * 1. Hoist them into constants, so that we no longer need to
18353 *    create fresh nodes for them on each re-render;
18354 * 2. Completely skip them in the patching process.
18355 */
18356function optimize(root, options) {
18357    if (!root)
18358        return;
18359    isStaticKey = genStaticKeysCached(options.staticKeys || '');
18360    isPlatformReservedTag = options.isReservedTag || no;
18361    // first pass: mark all non-static nodes.
18362    markStatic(root);
18363    // second pass: mark static roots.
18364    markStaticRoots(root, false);
18365}
18366function genStaticKeys(keys) {
18367    return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +
18368        (keys ? ',' + keys : ''));
18369}
18370function markStatic(node) {
18371    node.static = isStatic(node);
18372    if (node.type === 1) {
18373        // do not make component slot content static. this avoids
18374        // 1. components not able to mutate slot nodes
18375        // 2. static slot content fails for hot-reloading
18376        if (!isPlatformReservedTag(node.tag) &&
18377            node.tag !== 'slot' &&
18378            node.attrsMap['inline-template'] == null) {
18379            return;
18380        }
18381        for (var i = 0, l = node.children.length; i < l; i++) {
18382            var child = node.children[i];
18383            markStatic(child);
18384            if (!child.static) {
18385                node.static = false;
18386            }
18387        }
18388        if (node.ifConditions) {
18389            for (var i = 1, l = node.ifConditions.length; i < l; i++) {
18390                var block = node.ifConditions[i].block;
18391                markStatic(block);
18392                if (!block.static) {
18393                    node.static = false;
18394                }
18395            }
18396        }
18397    }
18398}
18399function markStaticRoots(node, isInFor) {
18400    if (node.type === 1) {
18401        if (node.static || node.once) {
18402            node.staticInFor = isInFor;
18403        }
18404        // For a node to qualify as a static root, it should have children that
18405        // are not just static text. Otherwise the cost of hoisting out will
18406        // outweigh the benefits and it's better off to just always render it fresh.
18407        if (node.static &&
18408            node.children.length &&
18409            !(node.children.length === 1 && node.children[0].type === 3)) {
18410            node.staticRoot = true;
18411            return;
18412        }
18413        else {
18414            node.staticRoot = false;
18415        }
18416        if (node.children) {
18417            for (var i = 0, l = node.children.length; i < l; i++) {
18418                markStaticRoots(node.children[i], isInFor || !!node.for);
18419            }
18420        }
18421        if (node.ifConditions) {
18422            for (var i = 1, l = node.ifConditions.length; i < l; i++) {
18423                markStaticRoots(node.ifConditions[i].block, isInFor);
18424            }
18425        }
18426    }
18427}
18428function isStatic(node) {
18429    if (node.type === 2) {
18430        // expression
18431        return false;
18432    }
18433    if (node.type === 3) {
18434        // text
18435        return true;
18436    }
18437    return !!(node.pre ||
18438        (!node.hasBindings && // no dynamic bindings
18439            !node.if &&
18440            !node.for && // not v-if or v-for or v-else
18441            !isBuiltInTag(node.tag) && // not a built-in
18442            isPlatformReservedTag(node.tag) && // not a component
18443            !isDirectChildOfTemplateFor(node) &&
18444            Object.keys(node).every(isStaticKey)));
18445}
18446function isDirectChildOfTemplateFor(node) {
18447    while (node.parent) {
18448        node = node.parent;
18449        if (node.tag !== 'template') {
18450            return false;
18451        }
18452        if (node.for) {
18453            return true;
18454        }
18455    }
18456    return false;
18457}
18458
18459var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/;
18460var fnInvokeRE = /\([^)]*?\);*$/;
18461var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
18462// KeyboardEvent.keyCode aliases
18463var keyCodes = {
18464    esc: 27,
18465    tab: 9,
18466    enter: 13,
18467    space: 32,
18468    up: 38,
18469    left: 37,
18470    right: 39,
18471    down: 40,
18472    delete: [8, 46]
18473};
18474// KeyboardEvent.key aliases
18475var keyNames = {
18476    // #7880: IE11 and Edge use `Esc` for Escape key name.
18477    esc: ['Esc', 'Escape'],
18478    tab: 'Tab',
18479    enter: 'Enter',
18480    // #9112: IE11 uses `Spacebar` for Space key name.
18481    space: [' ', 'Spacebar'],
18482    // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
18483    up: ['Up', 'ArrowUp'],
18484    left: ['Left', 'ArrowLeft'],
18485    right: ['Right', 'ArrowRight'],
18486    down: ['Down', 'ArrowDown'],
18487    // #9112: IE11 uses `Del` for Delete key name.
18488    delete: ['Backspace', 'Delete', 'Del']
18489};
18490// #4868: modifiers that prevent the execution of the listener
18491// need to explicitly return null so that we can determine whether to remove
18492// the listener for .once
18493var genGuard = function (condition) { return "if(".concat(condition, ")return null;"); };
18494var modifierCode = {
18495    stop: '$event.stopPropagation();',
18496    prevent: '$event.preventDefault();',
18497    self: genGuard("$event.target !== $event.currentTarget"),
18498    ctrl: genGuard("!$event.ctrlKey"),
18499    shift: genGuard("!$event.shiftKey"),
18500    alt: genGuard("!$event.altKey"),
18501    meta: genGuard("!$event.metaKey"),
18502    left: genGuard("'button' in $event && $event.button !== 0"),
18503    middle: genGuard("'button' in $event && $event.button !== 1"),
18504    right: genGuard("'button' in $event && $event.button !== 2")
18505};
18506function genHandlers(events, isNative) {
18507    var prefix = isNative ? 'nativeOn:' : 'on:';
18508    var staticHandlers = "";
18509    var dynamicHandlers = "";
18510    for (var name_1 in events) {
18511        var handlerCode = genHandler(events[name_1]);
18512        //@ts-expect-error
18513        if (events[name_1] && events[name_1].dynamic) {
18514            dynamicHandlers += "".concat(name_1, ",").concat(handlerCode, ",");
18515        }
18516        else {
18517            staticHandlers += "\"".concat(name_1, "\":").concat(handlerCode, ",");
18518        }
18519    }
18520    staticHandlers = "{".concat(staticHandlers.slice(0, -1), "}");
18521    if (dynamicHandlers) {
18522        return prefix + "_d(".concat(staticHandlers, ",[").concat(dynamicHandlers.slice(0, -1), "])");
18523    }
18524    else {
18525        return prefix + staticHandlers;
18526    }
18527}
18528function genHandler(handler) {
18529    if (!handler) {
18530        return 'function(){}';
18531    }
18532    if (Array.isArray(handler)) {
18533        return "[".concat(handler.map(function (handler) { return genHandler(handler); }).join(','), "]");
18534    }
18535    var isMethodPath = simplePathRE.test(handler.value);
18536    var isFunctionExpression = fnExpRE.test(handler.value);
18537    var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));
18538    if (!handler.modifiers) {
18539        if (isMethodPath || isFunctionExpression) {
18540            return handler.value;
18541        }
18542        return "function($event){".concat(isFunctionInvocation ? "return ".concat(handler.value) : handler.value, "}"); // inline statement
18543    }
18544    else {
18545        var code = '';
18546        var genModifierCode = '';
18547        var keys = [];
18548        var _loop_1 = function (key) {
18549            if (modifierCode[key]) {
18550                genModifierCode += modifierCode[key];
18551                // left/right
18552                if (keyCodes[key]) {
18553                    keys.push(key);
18554                }
18555            }
18556            else if (key === 'exact') {
18557                var modifiers_1 = handler.modifiers;
18558                genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta']
18559                    .filter(function (keyModifier) { return !modifiers_1[keyModifier]; })
18560                    .map(function (keyModifier) { return "$event.".concat(keyModifier, "Key"); })
18561                    .join('||'));
18562            }
18563            else {
18564                keys.push(key);
18565            }
18566        };
18567        for (var key in handler.modifiers) {
18568            _loop_1(key);
18569        }
18570        if (keys.length) {
18571            code += genKeyFilter(keys);
18572        }
18573        // Make sure modifiers like prevent and stop get executed after key filtering
18574        if (genModifierCode) {
18575            code += genModifierCode;
18576        }
18577        var handlerCode = isMethodPath
18578            ? "return ".concat(handler.value, ".apply(null, arguments)")
18579            : isFunctionExpression
18580                ? "return (".concat(handler.value, ").apply(null, arguments)")
18581                : isFunctionInvocation
18582                    ? "return ".concat(handler.value)
18583                    : handler.value;
18584        return "function($event){".concat(code).concat(handlerCode, "}");
18585    }
18586}
18587function genKeyFilter(keys) {
18588    return (
18589    // make sure the key filters only apply to KeyboardEvents
18590    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
18591    // key events that do not have keyCode property...
18592    "if(!$event.type.indexOf('key')&&" +
18593        "".concat(keys.map(genFilterCode).join('&&'), ")return null;"));
18594}
18595function genFilterCode(key) {
18596    var keyVal = parseInt(key, 10);
18597    if (keyVal) {
18598        return "$event.keyCode!==".concat(keyVal);
18599    }
18600    var keyCode = keyCodes[key];
18601    var keyName = keyNames[key];
18602    return ("_k($event.keyCode," +
18603        "".concat(JSON.stringify(key), ",") +
18604        "".concat(JSON.stringify(keyCode), ",") +
18605        "$event.key," +
18606        "".concat(JSON.stringify(keyName)) +
18607        ")");
18608}
18609
18610function on(el, dir) {
18611    if ( true && dir.modifiers) {
18612        warn$2("v-on without argument does not support modifiers.");
18613    }
18614    el.wrapListeners = function (code) { return "_g(".concat(code, ",").concat(dir.value, ")"); };
18615}
18616
18617function bind(el, dir) {
18618    el.wrapData = function (code) {
18619        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' : '', ")");
18620    };
18621}
18622
18623var baseDirectives = {
18624    on: on,
18625    bind: bind,
18626    cloak: noop
18627};
18628
18629var CodegenState = /** @class */ (function () {
18630    function CodegenState(options) {
18631        this.options = options;
18632        this.warn = options.warn || baseWarn;
18633        this.transforms = pluckModuleFunction(options.modules, 'transformCode');
18634        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
18635        this.directives = extend(extend({}, baseDirectives), options.directives);
18636        var isReservedTag = options.isReservedTag || no;
18637        this.maybeComponent = function (el) {
18638            return !!el.component || !isReservedTag(el.tag);
18639        };
18640        this.onceId = 0;
18641        this.staticRenderFns = [];
18642        this.pre = false;
18643    }
18644    return CodegenState;
18645}());
18646function generate(ast, options) {
18647    var state = new CodegenState(options);
18648    // fix #11483, Root level <script> tags should not be rendered.
18649    var code = ast
18650        ? ast.tag === 'script'
18651            ? 'null'
18652            : genElement(ast, state)
18653        : '_c("div")';
18654    return {
18655        render: "with(this){return ".concat(code, "}"),
18656        staticRenderFns: state.staticRenderFns
18657    };
18658}
18659function genElement(el, state) {
18660    if (el.parent) {
18661        el.pre = el.pre || el.parent.pre;
18662    }
18663    if (el.staticRoot && !el.staticProcessed) {
18664        return genStatic(el, state);
18665    }
18666    else if (el.once && !el.onceProcessed) {
18667        return genOnce(el, state);
18668    }
18669    else if (el.for && !el.forProcessed) {
18670        return genFor(el, state);
18671    }
18672    else if (el.if && !el.ifProcessed) {
18673        return genIf(el, state);
18674    }
18675    else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
18676        return genChildren(el, state) || 'void 0';
18677    }
18678    else if (el.tag === 'slot') {
18679        return genSlot(el, state);
18680    }
18681    else {
18682        // component or element
18683        var code = void 0;
18684        if (el.component) {
18685            code = genComponent(el.component, el, state);
18686        }
18687        else {
18688            var data = void 0;
18689            var maybeComponent = state.maybeComponent(el);
18690            if (!el.plain || (el.pre && maybeComponent)) {
18691                data = genData(el, state);
18692            }
18693            var tag 
18694            // check if this is a component in <script setup>
18695            = void 0;
18696            // check if this is a component in <script setup>
18697            var bindings = state.options.bindings;
18698            if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {
18699                tag = checkBindingType(bindings, el.tag);
18700            }
18701            if (!tag)
18702                tag = "'".concat(el.tag, "'");
18703            var children = el.inlineTemplate ? null : genChildren(el, state, true);
18704            code = "_c(".concat(tag).concat(data ? ",".concat(data) : '' // data
18705            ).concat(children ? ",".concat(children) : '' // children
18706            , ")");
18707        }
18708        // module transforms
18709        for (var i = 0; i < state.transforms.length; i++) {
18710            code = state.transforms[i](el, code);
18711        }
18712        return code;
18713    }
18714}
18715function checkBindingType(bindings, key) {
18716    var camelName = camelize(key);
18717    var PascalName = capitalize(camelName);
18718    var checkType = function (type) {
18719        if (bindings[key] === type) {
18720            return key;
18721        }
18722        if (bindings[camelName] === type) {
18723            return camelName;
18724        }
18725        if (bindings[PascalName] === type) {
18726            return PascalName;
18727        }
18728    };
18729    var fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) ||
18730        checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */);
18731    if (fromConst) {
18732        return fromConst;
18733    }
18734    var fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) ||
18735        checkType("setup-ref" /* BindingTypes.SETUP_REF */) ||
18736        checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */);
18737    if (fromMaybeRef) {
18738        return fromMaybeRef;
18739    }
18740}
18741// hoist static sub-trees out
18742function genStatic(el, state) {
18743    el.staticProcessed = true;
18744    // Some elements (templates) need to behave differently inside of a v-pre
18745    // node.  All pre nodes are static roots, so we can use this as a location to
18746    // wrap a state change and reset it upon exiting the pre node.
18747    var originalPreState = state.pre;
18748    if (el.pre) {
18749        state.pre = el.pre;
18750    }
18751    state.staticRenderFns.push("with(this){return ".concat(genElement(el, state), "}"));
18752    state.pre = originalPreState;
18753    return "_m(".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', ")");
18754}
18755// v-once
18756function genOnce(el, state) {
18757    el.onceProcessed = true;
18758    if (el.if && !el.ifProcessed) {
18759        return genIf(el, state);
18760    }
18761    else if (el.staticInFor) {
18762        var key = '';
18763        var parent_1 = el.parent;
18764        while (parent_1) {
18765            if (parent_1.for) {
18766                key = parent_1.key;
18767                break;
18768            }
18769            parent_1 = parent_1.parent;
18770        }
18771        if (!key) {
18772             true &&
18773                state.warn("v-once can only be used inside v-for that is keyed. ", el.rawAttrsMap['v-once']);
18774            return genElement(el, state);
18775        }
18776        return "_o(".concat(genElement(el, state), ",").concat(state.onceId++, ",").concat(key, ")");
18777    }
18778    else {
18779        return genStatic(el, state);
18780    }
18781}
18782function genIf(el, state, altGen, altEmpty) {
18783    el.ifProcessed = true; // avoid recursion
18784    return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);
18785}
18786function genIfConditions(conditions, state, altGen, altEmpty) {
18787    if (!conditions.length) {
18788        return altEmpty || '_e()';
18789    }
18790    var condition = conditions.shift();
18791    if (condition.exp) {
18792        return "(".concat(condition.exp, ")?").concat(genTernaryExp(condition.block), ":").concat(genIfConditions(conditions, state, altGen, altEmpty));
18793    }
18794    else {
18795        return "".concat(genTernaryExp(condition.block));
18796    }
18797    // v-if with v-once should generate code like (a)?_m(0):_m(1)
18798    function genTernaryExp(el) {
18799        return altGen
18800            ? altGen(el, state)
18801            : el.once
18802                ? genOnce(el, state)
18803                : genElement(el, state);
18804    }
18805}
18806function genFor(el, state, altGen, altHelper) {
18807    var exp = el.for;
18808    var alias = el.alias;
18809    var iterator1 = el.iterator1 ? ",".concat(el.iterator1) : '';
18810    var iterator2 = el.iterator2 ? ",".concat(el.iterator2) : '';
18811    if ( true &&
18812        state.maybeComponent(el) &&
18813        el.tag !== 'slot' &&
18814        el.tag !== 'template' &&
18815        !el.key) {
18816        state.warn("<".concat(el.tag, " v-for=\"").concat(alias, " in ").concat(exp, "\">: component lists rendered with ") +
18817            "v-for should have explicit keys. " +
18818            "See https://v2.vuejs.org/v2/guide/list.html#key for more info.", el.rawAttrsMap['v-for'], true /* tip */);
18819    }
18820    el.forProcessed = true; // avoid recursion
18821    return ("".concat(altHelper || '_l', "((").concat(exp, "),") +
18822        "function(".concat(alias).concat(iterator1).concat(iterator2, "){") +
18823        "return ".concat((altGen || genElement)(el, state)) +
18824        '})');
18825}
18826function genData(el, state) {
18827    var data = '{';
18828    // directives first.
18829    // directives may mutate the el's other properties before they are generated.
18830    var dirs = genDirectives(el, state);
18831    if (dirs)
18832        data += dirs + ',';
18833    // key
18834    if (el.key) {
18835        data += "key:".concat(el.key, ",");
18836    }
18837    // ref
18838    if (el.ref) {
18839        data += "ref:".concat(el.ref, ",");
18840    }
18841    if (el.refInFor) {
18842        data += "refInFor:true,";
18843    }
18844    // pre
18845    if (el.pre) {
18846        data += "pre:true,";
18847    }
18848    // record original tag name for components using "is" attribute
18849    if (el.component) {
18850        data += "tag:\"".concat(el.tag, "\",");
18851    }
18852    // module data generation functions
18853    for (var i = 0; i < state.dataGenFns.length; i++) {
18854        data += state.dataGenFns[i](el);
18855    }
18856    // attributes
18857    if (el.attrs) {
18858        data += "attrs:".concat(genProps(el.attrs), ",");
18859    }
18860    // DOM props
18861    if (el.props) {
18862        data += "domProps:".concat(genProps(el.props), ",");
18863    }
18864    // event handlers
18865    if (el.events) {
18866        data += "".concat(genHandlers(el.events, false), ",");
18867    }
18868    if (el.nativeEvents) {
18869        data += "".concat(genHandlers(el.nativeEvents, true), ",");
18870    }
18871    // slot target
18872    // only for non-scoped slots
18873    if (el.slotTarget && !el.slotScope) {
18874        data += "slot:".concat(el.slotTarget, ",");
18875    }
18876    // scoped slots
18877    if (el.scopedSlots) {
18878        data += "".concat(genScopedSlots(el, el.scopedSlots, state), ",");
18879    }
18880    // component v-model
18881    if (el.model) {
18882        data += "model:{value:".concat(el.model.value, ",callback:").concat(el.model.callback, ",expression:").concat(el.model.expression, "},");
18883    }
18884    // inline-template
18885    if (el.inlineTemplate) {
18886        var inlineTemplate = genInlineTemplate(el, state);
18887        if (inlineTemplate) {
18888            data += "".concat(inlineTemplate, ",");
18889        }
18890    }
18891    data = data.replace(/,$/, '') + '}';
18892    // v-bind dynamic argument wrap
18893    // v-bind with dynamic arguments must be applied using the same v-bind object
18894    // merge helper so that class/style/mustUseProp attrs are handled correctly.
18895    if (el.dynamicAttrs) {
18896        data = "_b(".concat(data, ",\"").concat(el.tag, "\",").concat(genProps(el.dynamicAttrs), ")");
18897    }
18898    // v-bind data wrap
18899    if (el.wrapData) {
18900        data = el.wrapData(data);
18901    }
18902    // v-on data wrap
18903    if (el.wrapListeners) {
18904        data = el.wrapListeners(data);
18905    }
18906    return data;
18907}
18908function genDirectives(el, state) {
18909    var dirs = el.directives;
18910    if (!dirs)
18911        return;
18912    var res = 'directives:[';
18913    var hasRuntime = false;
18914    var i, l, dir, needRuntime;
18915    for (i = 0, l = dirs.length; i < l; i++) {
18916        dir = dirs[i];
18917        needRuntime = true;
18918        var gen = state.directives[dir.name];
18919        if (gen) {
18920            // compile-time directive that manipulates AST.
18921            // returns true if it also needs a runtime counterpart.
18922            needRuntime = !!gen(el, dir, state.warn);
18923        }
18924        if (needRuntime) {
18925            hasRuntime = true;
18926            res += "{name:\"".concat(dir.name, "\",rawName:\"").concat(dir.rawName, "\"").concat(dir.value
18927                ? ",value:(".concat(dir.value, "),expression:").concat(JSON.stringify(dir.value))
18928                : '').concat(dir.arg ? ",arg:".concat(dir.isDynamicArg ? dir.arg : "\"".concat(dir.arg, "\"")) : '').concat(dir.modifiers ? ",modifiers:".concat(JSON.stringify(dir.modifiers)) : '', "},");
18929        }
18930    }
18931    if (hasRuntime) {
18932        return res.slice(0, -1) + ']';
18933    }
18934}
18935function genInlineTemplate(el, state) {
18936    var ast = el.children[0];
18937    if ( true && (el.children.length !== 1 || ast.type !== 1)) {
18938        state.warn('Inline-template components must have exactly one child element.', { start: el.start });
18939    }
18940    if (ast && ast.type === 1) {
18941        var inlineRenderFns = generate(ast, state.options);
18942        return "inlineTemplate:{render:function(){".concat(inlineRenderFns.render, "},staticRenderFns:[").concat(inlineRenderFns.staticRenderFns
18943            .map(function (code) { return "function(){".concat(code, "}"); })
18944            .join(','), "]}");
18945    }
18946}
18947function genScopedSlots(el, slots, state) {
18948    // by default scoped slots are considered "stable", this allows child
18949    // components with only scoped slots to skip forced updates from parent.
18950    // but in some cases we have to bail-out of this optimization
18951    // for example if the slot contains dynamic names, has v-if or v-for on them...
18952    var needsForceUpdate = el.for ||
18953        Object.keys(slots).some(function (key) {
18954            var slot = slots[key];
18955            return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic
18956            );
18957        });
18958    // #9534: if a component with scoped slots is inside a conditional branch,
18959    // it's possible for the same component to be reused but with different
18960    // compiled slot content. To avoid that, we generate a unique key based on
18961    // the generated code of all the slot contents.
18962    var needsKey = !!el.if;
18963    // OR when it is inside another scoped slot or v-for (the reactivity may be
18964    // disconnected due to the intermediate scope variable)
18965    // #9438, #9506
18966    // TODO: this can be further optimized by properly analyzing in-scope bindings
18967    // and skip force updating ones that do not actually use scope variables.
18968    if (!needsForceUpdate) {
18969        var parent_2 = el.parent;
18970        while (parent_2) {
18971            if ((parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) ||
18972                parent_2.for) {
18973                needsForceUpdate = true;
18974                break;
18975            }
18976            if (parent_2.if) {
18977                needsKey = true;
18978            }
18979            parent_2 = parent_2.parent;
18980        }
18981    }
18982    var generatedSlots = Object.keys(slots)
18983        .map(function (key) { return genScopedSlot(slots[key], state); })
18984        .join(',');
18985    return "scopedSlots:_u([".concat(generatedSlots, "]").concat(needsForceUpdate ? ",null,true" : "").concat(!needsForceUpdate && needsKey ? ",null,false,".concat(hash(generatedSlots)) : "", ")");
18986}
18987function hash(str) {
18988    var hash = 5381;
18989    var i = str.length;
18990    while (i) {
18991        hash = (hash * 33) ^ str.charCodeAt(--i);
18992    }
18993    return hash >>> 0;
18994}
18995function containsSlotChild(el) {
18996    if (el.type === 1) {
18997        if (el.tag === 'slot') {
18998            return true;
18999        }
19000        return el.children.some(containsSlotChild);
19001    }
19002    return false;
19003}
19004function genScopedSlot(el, state) {
19005    var isLegacySyntax = el.attrsMap['slot-scope'];
19006    if (el.if && !el.ifProcessed && !isLegacySyntax) {
19007        return genIf(el, state, genScopedSlot, "null");
19008    }
19009    if (el.for && !el.forProcessed) {
19010        return genFor(el, state, genScopedSlot);
19011    }
19012    var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope);
19013    var fn = "function(".concat(slotScope, "){") +
19014        "return ".concat(el.tag === 'template'
19015            ? el.if && isLegacySyntax
19016                ? "(".concat(el.if, ")?").concat(genChildren(el, state) || 'undefined', ":undefined")
19017                : genChildren(el, state) || 'undefined'
19018            : genElement(el, state), "}");
19019    // reverse proxy v-slot without scope on this.$slots
19020    var reverseProxy = slotScope ? "" : ",proxy:true";
19021    return "{key:".concat(el.slotTarget || "\"default\"", ",fn:").concat(fn).concat(reverseProxy, "}");
19022}
19023function genChildren(el, state, checkSkip, altGenElement, altGenNode) {
19024    var children = el.children;
19025    if (children.length) {
19026        var el_1 = children[0];
19027        // optimize single v-for
19028        if (children.length === 1 &&
19029            el_1.for &&
19030            el_1.tag !== 'template' &&
19031            el_1.tag !== 'slot') {
19032            var normalizationType_1 = checkSkip
19033                ? state.maybeComponent(el_1)
19034                    ? ",1"
19035                    : ",0"
19036                : "";
19037            return "".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1);
19038        }
19039        var normalizationType = checkSkip
19040            ? getNormalizationType(children, state.maybeComponent)
19041            : 0;
19042        var gen_1 = altGenNode || genNode;
19043        return "[".concat(children.map(function (c) { return gen_1(c, state); }).join(','), "]").concat(normalizationType ? ",".concat(normalizationType) : '');
19044    }
19045}
19046// determine the normalization needed for the children array.
19047// 0: no normalization needed
19048// 1: simple normalization needed (possible 1-level deep nested array)
19049// 2: full normalization needed
19050function getNormalizationType(children, maybeComponent) {
19051    var res = 0;
19052    for (var i = 0; i < children.length; i++) {
19053        var el = children[i];
19054        if (el.type !== 1) {
19055            continue;
19056        }
19057        if (needsNormalization(el) ||
19058            (el.ifConditions &&
19059                el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {
19060            res = 2;
19061            break;
19062        }
19063        if (maybeComponent(el) ||
19064            (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {
19065            res = 1;
19066        }
19067    }
19068    return res;
19069}
19070function needsNormalization(el) {
19071    return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';
19072}
19073function genNode(node, state) {
19074    if (node.type === 1) {
19075        return genElement(node, state);
19076    }
19077    else if (node.type === 3 && node.isComment) {
19078        return genComment(node);
19079    }
19080    else {
19081        return genText(node);
19082    }
19083}
19084function genText(text) {
19085    return "_v(".concat(text.type === 2
19086        ? text.expression // no need for () because already wrapped in _s()
19087        : transformSpecialNewlines(JSON.stringify(text.text)), ")");
19088}
19089function genComment(comment) {
19090    return "_e(".concat(JSON.stringify(comment.text), ")");
19091}
19092function genSlot(el, state) {
19093    var slotName = el.slotName || '"default"';
19094    var children = genChildren(el, state);
19095    var res = "_t(".concat(slotName).concat(children ? ",function(){return ".concat(children, "}") : '');
19096    var attrs = el.attrs || el.dynamicAttrs
19097        ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({
19098            // slot props are camelized
19099            name: camelize(attr.name),
19100            value: attr.value,
19101            dynamic: attr.dynamic
19102        }); }))
19103        : null;
19104    var bind = el.attrsMap['v-bind'];
19105    if ((attrs || bind) && !children) {
19106        res += ",null";
19107    }
19108    if (attrs) {
19109        res += ",".concat(attrs);
19110    }
19111    if (bind) {
19112        res += "".concat(attrs ? '' : ',null', ",").concat(bind);
19113    }
19114    return res + ')';
19115}
19116// componentName is el.component, take it as argument to shun flow's pessimistic refinement
19117function genComponent(componentName, el, state) {
19118    var children = el.inlineTemplate ? null : genChildren(el, state, true);
19119    return "_c(".concat(componentName, ",").concat(genData(el, state)).concat(children ? ",".concat(children) : '', ")");
19120}
19121function genProps(props) {
19122    var staticProps = "";
19123    var dynamicProps = "";
19124    for (var i = 0; i < props.length; i++) {
19125        var prop = props[i];
19126        var value = transformSpecialNewlines(prop.value);
19127        if (prop.dynamic) {
19128            dynamicProps += "".concat(prop.name, ",").concat(value, ",");
19129        }
19130        else {
19131            staticProps += "\"".concat(prop.name, "\":").concat(value, ",");
19132        }
19133    }
19134    staticProps = "{".concat(staticProps.slice(0, -1), "}");
19135    if (dynamicProps) {
19136        return "_d(".concat(staticProps, ",[").concat(dynamicProps.slice(0, -1), "])");
19137    }
19138    else {
19139        return staticProps;
19140    }
19141}
19142// #3895, #4268
19143function transformSpecialNewlines(text) {
19144    return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');
19145}
19146
19147// these keywords should not appear inside expressions, but operators like
19148// typeof, instanceof and in are allowed
19149var prohibitedKeywordRE = new RegExp('\\b' +
19150    ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
19151        'super,throw,while,yield,delete,export,import,return,switch,default,' +
19152        'extends,finally,continue,debugger,function,arguments')
19153        .split(',')
19154        .join('\\b|\\b') +
19155    '\\b');
19156// these unary operators should not be used as property/method names
19157var unaryOperatorsRE = new RegExp('\\b' +
19158    'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') +
19159    '\\s*\\([^\\)]*\\)');
19160// strip strings in expressions
19161var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
19162// detect problematic expressions in a template
19163function detectErrors(ast, warn) {
19164    if (ast) {
19165        checkNode(ast, warn);
19166    }
19167}
19168function checkNode(node, warn) {
19169    if (node.type === 1) {
19170        for (var name_1 in node.attrsMap) {
19171            if (dirRE.test(name_1)) {
19172                var value = node.attrsMap[name_1];
19173                if (value) {
19174                    var range = node.rawAttrsMap[name_1];
19175                    if (name_1 === 'v-for') {
19176                        checkFor(node, "v-for=\"".concat(value, "\""), warn, range);
19177                    }
19178                    else if (name_1 === 'v-slot' || name_1[0] === '#') {
19179                        checkFunctionParameterExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
19180                    }
19181                    else if (onRE.test(name_1)) {
19182                        checkEvent(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
19183                    }
19184                    else {
19185                        checkExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
19186                    }
19187                }
19188            }
19189        }
19190        if (node.children) {
19191            for (var i = 0; i < node.children.length; i++) {
19192                checkNode(node.children[i], warn);
19193            }
19194        }
19195    }
19196    else if (node.type === 2) {
19197        checkExpression(node.expression, node.text, warn, node);
19198    }
19199}
19200function checkEvent(exp, text, warn, range) {
19201    var stripped = exp.replace(stripStringRE, '');
19202    var keywordMatch = stripped.match(unaryOperatorsRE);
19203    if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
19204        warn("avoid using JavaScript unary operator as property name: " +
19205            "\"".concat(keywordMatch[0], "\" in expression ").concat(text.trim()), range);
19206    }
19207    checkExpression(exp, text, warn, range);
19208}
19209function checkFor(node, text, warn, range) {
19210    checkExpression(node.for || '', text, warn, range);
19211    checkIdentifier(node.alias, 'v-for alias', text, warn, range);
19212    checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);
19213    checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);
19214}
19215function checkIdentifier(ident, type, text, warn, range) {
19216    if (typeof ident === 'string') {
19217        try {
19218            new Function("var ".concat(ident, "=_"));
19219        }
19220        catch (e) {
19221            warn("invalid ".concat(type, " \"").concat(ident, "\" in expression: ").concat(text.trim()), range);
19222        }
19223    }
19224}
19225function checkExpression(exp, text, warn, range) {
19226    try {
19227        new Function("return ".concat(exp));
19228    }
19229    catch (e) {
19230        var keywordMatch = exp
19231            .replace(stripStringRE, '')
19232            .match(prohibitedKeywordRE);
19233        if (keywordMatch) {
19234            warn("avoid using JavaScript keyword as property name: " +
19235                "\"".concat(keywordMatch[0], "\"\n  Raw expression: ").concat(text.trim()), range);
19236        }
19237        else {
19238            warn("invalid expression: ".concat(e.message, " in\n\n") +
19239                "    ".concat(exp, "\n\n") +
19240                "  Raw expression: ".concat(text.trim(), "\n"), range);
19241        }
19242    }
19243}
19244function checkFunctionParameterExpression(exp, text, warn, range) {
19245    try {
19246        new Function(exp, '');
19247    }
19248    catch (e) {
19249        warn("invalid function parameter expression: ".concat(e.message, " in\n\n") +
19250            "    ".concat(exp, "\n\n") +
19251            "  Raw expression: ".concat(text.trim(), "\n"), range);
19252    }
19253}
19254
19255var range = 2;
19256function generateCodeFrame(source, start, end) {
19257    if (start === void 0) { start = 0; }
19258    if (end === void 0) { end = source.length; }
19259    var lines = source.split(/\r?\n/);
19260    var count = 0;
19261    var res = [];
19262    for (var i = 0; i < lines.length; i++) {
19263        count += lines[i].length + 1;
19264        if (count >= start) {
19265            for (var j = i - range; j <= i + range || end > count; j++) {
19266                if (j < 0 || j >= lines.length)
19267                    continue;
19268                res.push("".concat(j + 1).concat(repeat(" ", 3 - String(j + 1).length), "|  ").concat(lines[j]));
19269                var lineLength = lines[j].length;
19270                if (j === i) {
19271                    // push underline
19272                    var pad = start - (count - lineLength) + 1;
19273                    var length_1 = end > count ? lineLength - pad : end - start;
19274                    res.push("   |  " + repeat(" ", pad) + repeat("^", length_1));
19275                }
19276                else if (j > i) {
19277                    if (end > count) {
19278                        var length_2 = Math.min(end - count, lineLength);
19279                        res.push("   |  " + repeat("^", length_2));
19280                    }
19281                    count += lineLength + 1;
19282                }
19283            }
19284            break;
19285        }
19286    }
19287    return res.join('\n');
19288}
19289function repeat(str, n) {
19290    var result = '';
19291    if (n > 0) {
19292        // eslint-disable-next-line no-constant-condition
19293        while (true) {
19294            // eslint-disable-line
19295            if (n & 1)
19296                result += str;
19297            n >>>= 1;
19298            if (n <= 0)
19299                break;
19300            str += str;
19301        }
19302    }
19303    return result;
19304}
19305
19306function createFunction(code, errors) {
19307    try {
19308        return new Function(code);
19309    }
19310    catch (err) {
19311        errors.push({ err: err, code: code });
19312        return noop;
19313    }
19314}
19315function createCompileToFunctionFn(compile) {
19316    var cache = Object.create(null);
19317    return function compileToFunctions(template, options, vm) {
19318        options = extend({}, options);
19319        var warn = options.warn || warn$2;
19320        delete options.warn;
19321        /* istanbul ignore if */
19322        if (true) {
19323            // detect possible CSP restriction
19324            try {
19325                new Function('return 1');
19326            }
19327            catch (e) {
19328                if (e.toString().match(/unsafe-eval|CSP/)) {
19329                    warn('It seems you are using the standalone build of Vue.js in an ' +
19330                        'environment with Content Security Policy that prohibits unsafe-eval. ' +
19331                        'The template compiler cannot work in this environment. Consider ' +
19332                        'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
19333                        'templates into render functions.');
19334                }
19335            }
19336        }
19337        // check cache
19338        var key = options.delimiters
19339            ? String(options.delimiters) + template
19340            : template;
19341        if (cache[key]) {
19342            return cache[key];
19343        }
19344        // compile
19345        var compiled = compile(template, options);
19346        // check compilation errors/tips
19347        if (true) {
19348            if (compiled.errors && compiled.errors.length) {
19349                if (options.outputSourceRange) {
19350                    compiled.errors.forEach(function (e) {
19351                        warn("Error compiling template:\n\n".concat(e.msg, "\n\n") +
19352                            generateCodeFrame(template, e.start, e.end), vm);
19353                    });
19354                }
19355                else {
19356                    warn("Error compiling template:\n\n".concat(template, "\n\n") +
19357                        compiled.errors.map(function (e) { return "- ".concat(e); }).join('\n') +
19358                        '\n', vm);
19359                }
19360            }
19361            if (compiled.tips && compiled.tips.length) {
19362                if (options.outputSourceRange) {
19363                    compiled.tips.forEach(function (e) { return tip(e.msg, vm); });
19364                }
19365                else {
19366                    compiled.tips.forEach(function (msg) { return tip(msg, vm); });
19367                }
19368            }
19369        }
19370        // turn code into functions
19371        var res = {};
19372        var fnGenErrors = [];
19373        res.render = createFunction(compiled.render, fnGenErrors);
19374        res.staticRenderFns = compiled.staticRenderFns.map(function (code) {
19375            return createFunction(code, fnGenErrors);
19376        });
19377        // check function generation errors.
19378        // this should only happen if there is a bug in the compiler itself.
19379        // mostly for codegen development use
19380        /* istanbul ignore if */
19381        if (true) {
19382            if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
19383                warn("Failed to generate render function:\n\n" +
19384                    fnGenErrors
19385                        .map(function (_a) {
19386                        var err = _a.err, code = _a.code;
19387                        return "".concat(err.toString(), " in\n\n").concat(code, "\n");
19388                    })
19389                        .join('\n'), vm);
19390            }
19391        }
19392        return (cache[key] = res);
19393    };
19394}
19395
19396function createCompilerCreator(baseCompile) {
19397    return function createCompiler(baseOptions) {
19398        function compile(template, options) {
19399            var finalOptions = Object.create(baseOptions);
19400            var errors = [];
19401            var tips = [];
19402            var warn = function (msg, range, tip) {
19403                (tip ? tips : errors).push(msg);
19404            };
19405            if (options) {
19406                if ( true && options.outputSourceRange) {
19407                    // $flow-disable-line
19408                    var leadingSpaceLength_1 = template.match(/^\s*/)[0].length;
19409                    warn = function (msg, range, tip) {
19410                        var data = typeof msg === 'string' ? { msg: msg } : msg;
19411                        if (range) {
19412                            if (range.start != null) {
19413                                data.start = range.start + leadingSpaceLength_1;
19414                            }
19415                            if (range.end != null) {
19416                                data.end = range.end + leadingSpaceLength_1;
19417                            }
19418                        }
19419                        (tip ? tips : errors).push(data);
19420                    };
19421                }
19422                // merge custom modules
19423                if (options.modules) {
19424                    finalOptions.modules = (baseOptions.modules || []).concat(options.modules);
19425                }
19426                // merge custom directives
19427                if (options.directives) {
19428                    finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);
19429                }
19430                // copy other options
19431                for (var key in options) {
19432                    if (key !== 'modules' && key !== 'directives') {
19433                        finalOptions[key] = options[key];
19434                    }
19435                }
19436            }
19437            finalOptions.warn = warn;
19438            var compiled = baseCompile(template.trim(), finalOptions);
19439            if (true) {
19440                detectErrors(compiled.ast, warn);
19441            }
19442            compiled.errors = errors;
19443            compiled.tips = tips;
19444            return compiled;
19445        }
19446        return {
19447            compile: compile,
19448            compileToFunctions: createCompileToFunctionFn(compile)
19449        };
19450    };
19451}
19452
19453// `createCompilerCreator` allows creating compilers that use alternative
19454// parser/optimizer/codegen, e.g the SSR optimizing compiler.
19455// Here we just export a default compiler using the default parts.
19456var createCompiler = createCompilerCreator(function baseCompile(template, options) {
19457    var ast = parse(template.trim(), options);
19458    if (options.optimize !== false) {
19459        optimize(ast, options);
19460    }
19461    var code = generate(ast, options);
19462    return {
19463        ast: ast,
19464        render: code.render,
19465        staticRenderFns: code.staticRenderFns
19466    };
19467});
19468
19469var _a = createCompiler(baseOptions), compileToFunctions = _a.compileToFunctions;
19470
19471// check whether current browser encodes a char inside attribute values
19472var div;
19473function getShouldDecode(href) {
19474    div = div || document.createElement('div');
19475    div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>";
19476    return div.innerHTML.indexOf('&#10;') > 0;
19477}
19478// #3663: IE encodes newlines inside attribute values while other browsers don't
19479var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;
19480// #6828: chrome encodes content in a[href]
19481var shouldDecodeNewlinesForHref = inBrowser
19482    ? getShouldDecode(true)
19483    : false;
19484
19485var idToTemplate = cached(function (id) {
19486    var el = query(id);
19487    return el && el.innerHTML;
19488});
19489var mount = Vue.prototype.$mount;
19490Vue.prototype.$mount = function (el, hydrating) {
19491    el = el && query(el);
19492    /* istanbul ignore if */
19493    if (el === document.body || el === document.documentElement) {
19494         true &&
19495            warn$2("Do not mount Vue to <html> or <body> - mount to normal elements instead.");
19496        return this;
19497    }
19498    var options = this.$options;
19499    // resolve template/el and convert to render function
19500    if (!options.render) {
19501        var template = options.template;
19502        if (template) {
19503            if (typeof template === 'string') {
19504                if (template.charAt(0) === '#') {
19505                    template = idToTemplate(template);
19506                    /* istanbul ignore if */
19507                    if ( true && !template) {
19508                        warn$2("Template element not found or is empty: ".concat(options.template), this);
19509                    }
19510                }
19511            }
19512            else if (template.nodeType) {
19513                template = template.innerHTML;
19514            }
19515            else {
19516                if (true) {
19517                    warn$2('invalid template option:' + template, this);
19518                }
19519                return this;
19520            }
19521        }
19522        else if (el) {
19523            // @ts-expect-error
19524            template = getOuterHTML(el);
19525        }
19526        if (template) {
19527            /* istanbul ignore if */
19528            if ( true && config.performance && mark) {
19529                mark('compile');
19530            }
19531            var _a = compileToFunctions(template, {
19532                outputSourceRange: "development" !== 'production',
19533                shouldDecodeNewlines: shouldDecodeNewlines,
19534                shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,
19535                delimiters: options.delimiters,
19536                comments: options.comments
19537            }, this), render = _a.render, staticRenderFns = _a.staticRenderFns;
19538            options.render = render;
19539            options.staticRenderFns = staticRenderFns;
19540            /* istanbul ignore if */
19541            if ( true && config.performance && mark) {
19542                mark('compile end');
19543                measure("vue ".concat(this._name, " compile"), 'compile', 'compile end');
19544            }
19545        }
19546    }
19547    return mount.call(this, el, hydrating);
19548};
19549/**
19550 * Get outerHTML of elements, taking care
19551 * of SVG elements in IE as well.
19552 */
19553function getOuterHTML(el) {
19554    if (el.outerHTML) {
19555        return el.outerHTML;
19556    }
19557    else {
19558        var container = document.createElement('div');
19559        container.appendChild(el.cloneNode(true));
19560        return container.innerHTML;
19561    }
19562}
19563Vue.compile = compileToFunctions;
19564
19565
19566
19567
19568/***/ })
vendor: 8,893 bytes, lines 19568-19798
19568,
19569
19570/***/ "./resources/assets/scripts/components sync recursive \\.vue$/":
19571/*!***********************************************************!*\
19572  !*** ./resources/assets/scripts/components/ sync \.vue$/ ***!
19573  \***********************************************************/
19574/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
19575
19576var map = {
19577	"./backgroundSlider.vue": "./resources/assets/scripts/components/backgroundSlider.vue"
19578};
19579
19580
19581function webpackContext(req) {
19582	var id = webpackContextResolve(req);
19583	return __webpack_require__(id);
19584}
19585function webpackContextResolve(req) {
19586	if(!__webpack_require__.o(map, req)) {
19587		var e = new Error("Cannot find module '" + req + "'");
19588		e.code = 'MODULE_NOT_FOUND';
19589		throw e;
19590	}
19591	return map[req];
19592}
19593webpackContext.keys = function webpackContextKeys() {
19594	return Object.keys(map);
19595};
19596webpackContext.resolve = webpackContextResolve;
19597module.exports = webpackContext;
19598webpackContext.id = "./resources/assets/scripts/components sync recursive \\.vue$/";
19599
19600/***/ }),
19601
19602/***/ "jquery":
19603/*!*************************!*\
19604  !*** external "jQuery" ***!
19605  \*************************/
19606/***/ ((module) => {
19607
19608"use strict";
19609module.exports = jQuery;
19610
19611/***/ })
19612
19613/******/ 	});
19614/************************************************************************/
19615/******/ 	// The module cache
19616/******/ 	var __webpack_module_cache__ = {};
19617/******/ 	
19618/******/ 	// The require function
19619/******/ 	function __webpack_require__(moduleId) {
19620/******/ 		// Check if module is in cache
19621/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
19622/******/ 		if (cachedModule !== undefined) {
19623/******/ 			return cachedModule.exports;
19624/******/ 		}
19625/******/ 		// Create a new module (and put it into the cache)
19626/******/ 		var module = __webpack_module_cache__[moduleId] = {
19627/******/ 			id: moduleId,
19628/******/ 			// no module.loaded needed
19629/******/ 			exports: {}
19630/******/ 		};
19631/******/ 	
19632/******/ 		// Execute the module function
19633/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
19634/******/ 	
19635/******/ 		// Return the exports of the module
19636/******/ 		return module.exports;
19637/******/ 	}
19638/******/ 	
19639/******/ 	// expose the modules object (__webpack_modules__)
19640/******/ 	__webpack_require__.m = __webpack_modules__;
19641/******/ 	
19642/************************************************************************/
19643/******/ 	/* webpack/runtime/chunk loaded */
19644/******/ 	(() => {
19645/******/ 		var deferred = [];
19646/******/ 		__webpack_require__.O = (result, chunkIds, fn, priority) => {
19647/******/ 			if(chunkIds) {
19648/******/ 				priority = priority || 0;
19649/******/ 				for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
19650/******/ 				deferred[i] = [chunkIds, fn, priority];
19651/******/ 				return;
19652/******/ 			}
19653/******/ 			var notFulfilled = Infinity;
19654/******/ 			for (var i = 0; i < deferred.length; i++) {
19655/******/ 				var [chunkIds, fn, priority] = deferred[i];
19656/******/ 				var fulfilled = true;
19657/******/ 				for (var j = 0; j < chunkIds.length; j++) {
19658/******/ 					if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
19659/******/ 						chunkIds.splice(j--, 1);
19660/******/ 					} else {
19661/******/ 						fulfilled = false;
19662/******/ 						if(priority < notFulfilled) notFulfilled = priority;
19663/******/ 					}
19664/******/ 				}
19665/******/ 				if(fulfilled) {
19666/******/ 					deferred.splice(i--, 1)
19667/******/ 					var r = fn();
19668/******/ 					if (r !== undefined) result = r;
19669/******/ 				}
19670/******/ 			}
19671/******/ 			return result;
19672/******/ 		};
19673/******/ 	})();
19674/******/ 	
19675/******/ 	/* webpack/runtime/compat get default export */
19676/******/ 	(() => {
19677/******/ 		// getDefaultExport function for compatibility with non-harmony modules
19678/******/ 		__webpack_require__.n = (module) => {
19679/******/ 			var getter = module && module.__esModule ?
19680/******/ 				() => (module['default']) :
19681/******/ 				() => (module);
19682/******/ 			__webpack_require__.d(getter, { a: getter });
19683/******/ 			return getter;
19684/******/ 		};
19685/******/ 	})();
19686/******/ 	
19687/******/ 	/* webpack/runtime/define property getters */
19688/******/ 	(() => {
19689/******/ 		// define getter functions for harmony exports
19690/******/ 		__webpack_require__.d = (exports, definition) => {
19691/******/ 			for(var key in definition) {
19692/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
19693/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
19694/******/ 				}
19695/******/ 			}
19696/******/ 		};
19697/******/ 	})();
19698/******/ 	
19699/******/ 	/* webpack/runtime/global */
19700/******/ 	(() => {
19701/******/ 		__webpack_require__.g = (function() {
19702/******/ 			if (typeof globalThis === 'object') return globalThis;
19703/******/ 			try {
19704/******/ 				return this || new Function('return this')();
19705/******/ 			} catch (e) {
19706/******/ 				if (typeof window === 'object') return window;
19707/******/ 			}
19708/******/ 		})();
19709/******/ 	})();
19710/******/ 	
19711/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
19712/******/ 	(() => {
19713/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
19714/******/ 	})();
19715/******/ 	
19716/******/ 	/* webpack/runtime/make namespace object */
19717/******/ 	(() => {
19718/******/ 		// define __esModule on exports
19719/******/ 		__webpack_require__.r = (exports) => {
19720/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
19721/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
19722/******/ 			}
19723/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
19724/******/ 		};
19725/******/ 	})();
19726/******/ 	
19727/******/ 	/* webpack/runtime/jsonp chunk loading */
19728/******/ 	(() => {
19729/******/ 		// no baseURI
19730/******/ 		
19731/******/ 		// object to store loaded and loading chunks
19732/******/ 		// undefined = chunk not loaded, null = chunk preloaded/prefetched
19733/******/ 		// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
19734/******/ 		var installedChunks = {
19735/******/ 			"/scripts/app": 0,
19736/******/ 			"styles/app": 0,
19737/******/ 			"styles/editor-styles": 0
19738/******/ 		};
19739/******/ 		
19740/******/ 		// no chunk on demand loading
19741/******/ 		
19742/******/ 		// no prefetching
19743/******/ 		
19744/******/ 		// no preloaded
19745/******/ 		
19746/******/ 		// no HMR
19747/******/ 		
19748/******/ 		// no HMR manifest
19749/******/ 		
19750/******/ 		__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
19751/******/ 		
19752/******/ 		// install a JSONP callback for chunk loading
19753/******/ 		var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
19754/******/ 			var [chunkIds, moreModules, runtime] = data;
19755/******/ 			// add "moreModules" to the modules object,
19756/******/ 			// then flag all "chunkIds" as loaded and fire callback
19757/******/ 			var moduleId, chunkId, i = 0;
19758/******/ 			if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
19759/******/ 				for(moduleId in moreModules) {
19760/******/ 					if(__webpack_require__.o(moreModules, moduleId)) {
19761/******/ 						__webpack_require__.m[moduleId] = moreModules[moduleId];
19762/******/ 					}
19763/******/ 				}
19764/******/ 				if(runtime) var result = runtime(__webpack_require__);
19765/******/ 			}
19766/******/ 			if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
19767/******/ 			for(;i < chunkIds.length; i++) {
19768/******/ 				chunkId = chunkIds[i];
19769/******/ 				if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
19770/******/ 					installedChunks[chunkId][0]();
19771/******/ 				}
19772/******/ 				installedChunks[chunkId] = 0;
19773/******/ 			}
19774/******/ 			return __webpack_require__.O(result);
19775/******/ 		}
19776/******/ 		
19777/******/ 		var chunkLoadingGlobal = self["webpackChunkos_theme"] = self["webpackChunkos_theme"] || [];
19778/******/ 		chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
19779/******/ 		chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
19780/******/ 	})();
19781/******/ 	
19782/******/ 	/* webpack/runtime/nonce */
19783/******/ 	(() => {
19784/******/ 		__webpack_require__.nc = undefined;
19785/******/ 	})();
19786/******/ 	
19787/************************************************************************/
19788/******/ 	
19789/******/ 	// startup
19790/******/ 	// Load entry module and return exports
19791/******/ 	// This entry module depends on other loaded chunks and execution need to be delayed
19792/******/ 	__webpack_require__.O(undefined, ["styles/app","styles/editor-styles"], () => (__webpack_require__("./resources/assets/scripts/app.js")))
19793/******/ 	__webpack_require__.O(undefined, ["styles/app","styles/editor-styles"], () => (__webpack_require__("./resources/assets/styles/app.scss")))
19794/******/ 	var __webpack_exports__ = __webpack_require__.O(undefined, ["styles/app","styles/editor-styles"], () => (__webpack_require__("./resources/assets/styles/editor-styles.scss")))
19795/******/ 	__webpack_exports__ = __webpack_require__.O(__webpack_exports__);
19796/******/ 	
19797/******/ })()
19798;

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.