{"version":3,"file":"js/157-b90bed4431f6f71738d7.js","mappings":"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","sources":["webpack://gumstack/./node_modules/@rails/request.js/src/fetch_response.js","webpack://gumstack/./node_modules/@rails/request.js/src/request_interceptor.js","webpack://gumstack/./node_modules/@rails/request.js/src/lib/utils.js","webpack://gumstack/./node_modules/@rails/request.js/src/fetch_request.js","webpack://gumstack/./node_modules/@rails/request.js/src/verbs.js","webpack://gumstack/./node_modules/ahoy.js/dist/ahoy.esm.js","webpack://gumstack/./node_modules/moment/moment.js","webpack://gumstack/./node_modules/stimulus-use/dist/support/index.js","webpack://gumstack/./node_modules/stimulus-use/dist/use-intersection/intersection-controller.js","webpack://gumstack/./node_modules/stimulus-use/dist/use-lazy-load/lazy-load-controller.js","webpack://gumstack/./node_modules/stimulus-use/dist/use-resize/resize-controller.js","webpack://gumstack/./node_modules/stimulus-use/dist/use-click-outside/use-click-outside.js","webpack://gumstack/./node_modules/stimulus-use/dist/use-click-outside/click-outside-controller.js","webpack://gumstack/./node_modules/stimulus-use/dist/stimulus_use.js","webpack://gumstack/./node_modules/stimulus-use/dist/use-dispatch/use-dispatch.js","webpack://gumstack/./node_modules/stimulus-use/dist/use-application/application-controller.js","webpack://gumstack/./node_modules/stimulus-use/dist/use-idle/idle-controller.js","webpack://gumstack/./node_modules/stimulus-use/dist/use-visibility/visibility-controller.js","webpack://gumstack/./node_modules/stimulus-use/dist/use-window-resize/window-resize-controller.js","webpack://gumstack/./node_modules/stimulus-use/dist/use-debounce/use-debounce.js","webpack://gumstack/./node_modules/stimulus-use/dist/use-throttle/use-throttle.js","webpack://gumstack/./node_modules/stimulus_reflex/node_modules/@rails/actioncable/app/assets/javascripts/actioncable.esm.js","webpack://gumstack/./node_modules/stimulus_reflex/dist/stimulus_reflex.js","webpack://gumstack/./node_modules/ua-parser-js/src/ua-parser.js"],"sourcesContent":["export class FetchResponse {\n constructor (response) {\n this.response = response\n }\n\n get statusCode () {\n return this.response.status\n }\n\n get redirected () {\n return this.response.redirected\n }\n\n get ok () {\n return this.response.ok\n }\n\n get unauthenticated () {\n return this.statusCode === 401\n }\n\n get unprocessableEntity () {\n return this.statusCode === 422\n }\n\n get authenticationURL () {\n return this.response.headers.get('WWW-Authenticate')\n }\n\n get contentType () {\n const contentType = this.response.headers.get('Content-Type') || ''\n\n return contentType.replace(/;.*$/, '')\n }\n\n get headers () {\n return this.response.headers\n }\n\n get html () {\n if (this.contentType.match(/^(application|text)\\/(html|xhtml\\+xml)$/)) {\n return this.text\n }\n\n return Promise.reject(new Error(`Expected an HTML response but got \"${this.contentType}\" instead`))\n }\n\n get json () {\n if (this.contentType.match(/^application\\/.*json$/)) {\n return this.responseJson || (this.responseJson = this.response.json())\n }\n\n return Promise.reject(new Error(`Expected a JSON response but got \"${this.contentType}\" instead`))\n }\n\n get text () {\n return this.responseText || (this.responseText = this.response.text())\n }\n\n get isTurboStream () {\n return this.contentType.match(/^text\\/vnd\\.turbo-stream\\.html/)\n }\n\n async renderTurboStream () {\n if (this.isTurboStream) {\n if (window.Turbo) {\n await window.Turbo.renderStreamMessage(await this.text)\n } else {\n console.warn('You must set `window.Turbo = Turbo` to automatically process Turbo Stream events with request.js')\n }\n } else {\n return Promise.reject(new Error(`Expected a Turbo Stream response but got \"${this.contentType}\" instead`))\n }\n }\n}\n","export class RequestInterceptor {\n static register (interceptor) {\n this.interceptor = interceptor\n }\n\n static get () {\n return this.interceptor\n }\n\n static reset () {\n this.interceptor = undefined\n }\n}\n","export function getCookie (name) {\n const cookies = document.cookie ? document.cookie.split('; ') : []\n const prefix = `${encodeURIComponent(name)}=`\n const cookie = cookies.find(cookie => cookie.startsWith(prefix))\n\n if (cookie) {\n const value = cookie.split('=').slice(1).join('=')\n\n if (value) {\n return decodeURIComponent(value)\n }\n }\n}\n\nexport function compact (object) {\n const result = {}\n\n for (const key in object) {\n const value = object[key]\n if (value !== undefined) {\n result[key] = value\n }\n }\n\n return result\n}\n\nexport function metaContent (name) {\n const element = document.head.querySelector(`meta[name=\"${name}\"]`)\n return element && element.content\n}\n\nexport function stringEntriesFromFormData (formData) {\n return [...formData].reduce((entries, [name, value]) => {\n return entries.concat(typeof value === 'string' ? [[name, value]] : [])\n }, [])\n}\n\nexport function mergeEntries (searchParams, entries) {\n for (const [name, value] of entries) {\n if (value instanceof window.File) continue\n\n if (searchParams.has(name) && !name.includes('[]')) {\n searchParams.delete(name)\n searchParams.set(name, value)\n } else {\n searchParams.append(name, value)\n }\n }\n}\n","import { FetchResponse } from './fetch_response'\nimport { RequestInterceptor } from './request_interceptor'\nimport { getCookie, compact, metaContent, stringEntriesFromFormData, mergeEntries } from './lib/utils'\n\nexport class FetchRequest {\n constructor (method, url, options = {}) {\n this.method = method\n this.options = options\n this.originalUrl = url.toString()\n }\n\n async perform () {\n try {\n const requestInterceptor = RequestInterceptor.get()\n if (requestInterceptor) {\n await requestInterceptor(this)\n }\n } catch (error) {\n console.error(error)\n }\n\n const response = new FetchResponse(await window.fetch(this.url, this.fetchOptions))\n\n if (response.unauthenticated && response.authenticationURL) {\n return Promise.reject(window.location.href = response.authenticationURL)\n }\n\n const responseStatusIsTurboStreamable = response.ok || response.unprocessableEntity\n\n if (responseStatusIsTurboStreamable && response.isTurboStream) {\n await response.renderTurboStream()\n }\n\n return response\n }\n\n addHeader (key, value) {\n const headers = this.additionalHeaders\n headers[key] = value\n this.options.headers = headers\n }\n\n sameHostname () {\n if (!this.originalUrl.startsWith('http:')) {\n return true\n }\n\n try {\n return new URL(this.originalUrl).hostname === window.location.hostname\n } catch (_) {\n return true\n }\n }\n\n get fetchOptions () {\n return {\n method: this.method.toUpperCase(),\n headers: this.headers,\n body: this.formattedBody,\n signal: this.signal,\n credentials: this.credentials,\n redirect: this.redirect\n }\n }\n\n get headers () {\n const baseHeaders = {\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': this.contentType,\n Accept: this.accept\n }\n\n if (this.sameHostname()) {\n baseHeaders['X-CSRF-Token'] = this.csrfToken\n }\n\n return compact(\n Object.assign(baseHeaders, this.additionalHeaders)\n )\n }\n\n get csrfToken () {\n return getCookie(metaContent('csrf-param')) || metaContent('csrf-token')\n }\n\n get contentType () {\n if (this.options.contentType) {\n return this.options.contentType\n } else if (this.body == null || this.body instanceof window.FormData) {\n return undefined\n } else if (this.body instanceof window.File) {\n return this.body.type\n }\n\n return 'application/json'\n }\n\n get accept () {\n switch (this.responseKind) {\n case 'html':\n return 'text/html, application/xhtml+xml'\n case 'turbo-stream':\n return 'text/vnd.turbo-stream.html, text/html, application/xhtml+xml'\n case 'json':\n return 'application/json, application/vnd.api+json'\n default:\n return '*/*'\n }\n }\n\n get body () {\n return this.options.body\n }\n\n get query () {\n const originalQuery = (this.originalUrl.split('?')[1] || '').split('#')[0]\n const params = new URLSearchParams(originalQuery)\n\n let requestQuery = this.options.query\n if (requestQuery instanceof window.FormData) {\n requestQuery = stringEntriesFromFormData(requestQuery)\n } else if (requestQuery instanceof window.URLSearchParams) {\n requestQuery = requestQuery.entries()\n } else {\n requestQuery = Object.entries(requestQuery || {})\n }\n\n mergeEntries(params, requestQuery)\n\n const query = params.toString()\n return (query.length > 0 ? `?${query}` : '')\n }\n\n get url () {\n return (this.originalUrl.split('?')[0]).split('#')[0] + this.query\n }\n\n get responseKind () {\n return this.options.responseKind || 'html'\n }\n\n get signal () {\n return this.options.signal\n }\n\n get redirect () {\n return this.options.redirect || 'follow'\n }\n\n get credentials () {\n return this.options.credentials || 'same-origin'\n }\n\n get additionalHeaders () {\n return this.options.headers || {}\n }\n\n get formattedBody () {\n const bodyIsAString = Object.prototype.toString.call(this.body) === '[object String]'\n const contentTypeIsJson = this.headers['Content-Type'] === 'application/json'\n\n if (contentTypeIsJson && !bodyIsAString) {\n return JSON.stringify(this.body)\n }\n\n return this.body\n }\n}\n","import { FetchRequest } from './fetch_request'\n\nasync function get (url, options) {\n const request = new FetchRequest('get', url, options)\n return request.perform()\n}\n\nasync function post (url, options) {\n const request = new FetchRequest('post', url, options)\n return request.perform()\n}\n\nasync function put (url, options) {\n const request = new FetchRequest('put', url, options)\n return request.perform()\n}\n\nasync function patch (url, options) {\n const request = new FetchRequest('patch', url, options)\n return request.perform()\n}\n\nasync function destroy (url, options) {\n const request = new FetchRequest('delete', url, options)\n return request.perform()\n}\n\nexport { get, post, put, patch, destroy }\n","/*!\n * Ahoy.js\n * Simple, powerful JavaScript analytics\n * https://github.com/ankane/ahoy.js\n * v0.3.9\n * MIT License\n */\n\n// https://www.quirksmode.org/js/cookies.html\n\nvar Cookies = {\n set: function (name, value, ttl, domain) {\n var expires = \"\";\n var cookieDomain = \"\";\n if (ttl) {\n var date = new Date();\n date.setTime(date.getTime() + (ttl * 60 * 1000));\n expires = \"; expires=\" + date.toGMTString();\n }\n if (domain) {\n cookieDomain = \"; domain=\" + domain;\n }\n document.cookie = name + \"=\" + escape(value) + expires + cookieDomain + \"; path=/\";\n },\n get: function (name) {\n var i, c;\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(';');\n for (i = 0; i < ca.length; i++) {\n c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return unescape(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n }\n};\n\nvar config = {\n urlPrefix: \"\",\n visitsUrl: \"/ahoy/visits\",\n eventsUrl: \"/ahoy/events\",\n page: null,\n platform: \"Web\",\n useBeacon: true,\n startOnReady: true,\n trackVisits: true,\n cookies: true,\n cookieDomain: null,\n headers: {},\n visitParams: {},\n withCredentials: false,\n visitDuration: 4 * 60, // default 4 hours\n visitorDuration: 2 * 365 * 24 * 60 // default 2 years\n};\n\nvar ahoy = window.ahoy || window.Ahoy || {};\n\nahoy.configure = function (options) {\n for (var key in options) {\n if (options.hasOwnProperty(key)) {\n config[key] = options[key];\n }\n }\n};\n\n// legacy\nahoy.configure(ahoy);\n\nvar $ = window.jQuery || window.Zepto || window.$;\nvar visitId, visitorId, track;\nvar isReady = false;\nvar queue = [];\nvar canStringify = typeof(JSON) !== \"undefined\" && typeof(JSON.stringify) !== \"undefined\";\nvar eventQueue = [];\n\nfunction visitsUrl() {\n return config.urlPrefix + config.visitsUrl;\n}\n\nfunction eventsUrl() {\n return config.urlPrefix + config.eventsUrl;\n}\n\nfunction isEmpty(obj) {\n return Object.keys(obj).length === 0;\n}\n\nfunction canTrackNow() {\n return (config.useBeacon || config.trackNow) && isEmpty(config.headers) && canStringify && typeof(window.navigator.sendBeacon) !== \"undefined\" && !config.withCredentials;\n}\n\nfunction serialize(object) {\n var data = new FormData();\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n data.append(key, object[key]);\n }\n }\n return data;\n}\n\n// cookies\n\nfunction setCookie(name, value, ttl) {\n Cookies.set(name, value, ttl, config.cookieDomain || config.domain);\n}\n\nfunction getCookie(name) {\n return Cookies.get(name);\n}\n\nfunction destroyCookie(name) {\n Cookies.set(name, \"\", -1);\n}\n\nfunction log(message) {\n if (getCookie(\"ahoy_debug\")) {\n window.console.log(message);\n }\n}\n\nfunction setReady() {\n var callback;\n while ((callback = queue.shift())) {\n callback();\n }\n isReady = true;\n}\n\nahoy.ready = function (callback) {\n if (isReady) {\n callback();\n } else {\n queue.push(callback);\n }\n};\n\nfunction matchesSelector(element, selector) {\n var matches = element.matches ||\n element.matchesSelector ||\n element.mozMatchesSelector ||\n element.msMatchesSelector ||\n element.oMatchesSelector ||\n element.webkitMatchesSelector;\n\n if (matches) {\n if (matches.apply(element, [selector])) {\n return element;\n } else if (element.parentElement) {\n return matchesSelector(element.parentElement, selector);\n }\n return null;\n } else {\n log(\"Unable to match\");\n return null;\n }\n}\n\nfunction onEvent(eventName, selector, callback) {\n document.addEventListener(eventName, function (e) {\n var matchedElement = matchesSelector(e.target, selector);\n if (matchedElement) {\n callback.call(matchedElement, e);\n }\n });\n}\n\n// http://beeker.io/jquery-document-ready-equivalent-vanilla-javascript\nfunction documentReady(callback) {\n if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n setTimeout(callback, 0);\n } else {\n document.addEventListener(\"DOMContentLoaded\", callback);\n }\n}\n\n// https://stackoverflow.com/a/2117523/1177228\nfunction generateId() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n}\n\nfunction saveEventQueue() {\n if (config.cookies && canStringify) {\n setCookie(\"ahoy_events\", JSON.stringify(eventQueue), 1);\n }\n}\n\n// from rails-ujs\n\nfunction csrfToken() {\n var meta = document.querySelector(\"meta[name=csrf-token]\");\n return meta && meta.content;\n}\n\nfunction csrfParam() {\n var meta = document.querySelector(\"meta[name=csrf-param]\");\n return meta && meta.content;\n}\n\nfunction CSRFProtection(xhr) {\n var token = csrfToken();\n if (token) { xhr.setRequestHeader(\"X-CSRF-Token\", token); }\n}\n\nfunction sendRequest(url, data, success) {\n if (canStringify) {\n if ($ && $.ajax) {\n $.ajax({\n type: \"POST\",\n url: url,\n data: JSON.stringify(data),\n contentType: \"application/json; charset=utf-8\",\n dataType: \"json\",\n beforeSend: CSRFProtection,\n success: success,\n headers: config.headers,\n xhrFields: {\n withCredentials: config.withCredentials\n }\n });\n } else {\n var xhr = new XMLHttpRequest();\n xhr.open(\"POST\", url, true);\n xhr.withCredentials = config.withCredentials;\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n for (var header in config.headers) {\n if (config.headers.hasOwnProperty(header)) {\n xhr.setRequestHeader(header, config.headers[header]);\n }\n }\n xhr.onload = function() {\n if (xhr.status === 200) {\n success();\n }\n };\n CSRFProtection(xhr);\n xhr.send(JSON.stringify(data));\n }\n }\n}\n\nfunction eventData(event) {\n var data = {\n events: [event]\n };\n if (config.cookies) {\n data.visit_token = event.visit_token;\n data.visitor_token = event.visitor_token;\n }\n delete event.visit_token;\n delete event.visitor_token;\n return data;\n}\n\nfunction trackEvent(event) {\n ahoy.ready( function () {\n sendRequest(eventsUrl(), eventData(event), function() {\n // remove from queue\n for (var i = 0; i < eventQueue.length; i++) {\n if (eventQueue[i].id == event.id) {\n eventQueue.splice(i, 1);\n break;\n }\n }\n saveEventQueue();\n });\n });\n}\n\nfunction trackEventNow(event) {\n ahoy.ready( function () {\n var data = eventData(event);\n var param = csrfParam();\n var token = csrfToken();\n if (param && token) { data[param] = token; }\n // stringify so we keep the type\n data.events_json = JSON.stringify(data.events);\n delete data.events;\n window.navigator.sendBeacon(eventsUrl(), serialize(data));\n });\n}\n\nfunction page() {\n return config.page || window.location.pathname;\n}\n\nfunction presence(str) {\n return (str && str.length > 0) ? str : null;\n}\n\nfunction cleanObject(obj) {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (obj[key] === null) {\n delete obj[key];\n }\n }\n }\n return obj;\n}\n\nfunction eventProperties() {\n return cleanObject({\n tag: this.tagName.toLowerCase(),\n id: presence(this.id),\n \"class\": presence(this.className),\n page: page(),\n section: getClosestSection(this)\n });\n}\n\nfunction getClosestSection(element) {\n for ( ; element && element !== document; element = element.parentNode) {\n if (element.hasAttribute('data-section')) {\n return element.getAttribute('data-section');\n }\n }\n\n return null;\n}\n\nfunction createVisit() {\n isReady = false;\n\n visitId = ahoy.getVisitId();\n visitorId = ahoy.getVisitorId();\n track = getCookie(\"ahoy_track\");\n\n if (config.cookies === false || config.trackVisits === false) {\n log(\"Visit tracking disabled\");\n setReady();\n } else if (visitId && visitorId && !track) {\n // TODO keep visit alive?\n log(\"Active visit\");\n setReady();\n } else {\n if (!visitId) {\n visitId = generateId();\n setCookie(\"ahoy_visit\", visitId, config.visitDuration);\n }\n\n // make sure cookies are enabled\n if (getCookie(\"ahoy_visit\")) {\n log(\"Visit started\");\n\n if (!visitorId) {\n visitorId = generateId();\n setCookie(\"ahoy_visitor\", visitorId, config.visitorDuration);\n }\n\n var data = {\n visit_token: visitId,\n visitor_token: visitorId,\n platform: config.platform,\n landing_page: window.location.href,\n screen_width: window.screen.width,\n screen_height: window.screen.height,\n js: true\n };\n\n // referrer\n if (document.referrer.length > 0) {\n data.referrer = document.referrer;\n }\n\n for (var key in config.visitParams) {\n if (config.visitParams.hasOwnProperty(key)) {\n data[key] = config.visitParams[key];\n }\n }\n\n log(data);\n\n sendRequest(visitsUrl(), data, function () {\n // wait until successful to destroy\n destroyCookie(\"ahoy_track\");\n setReady();\n });\n } else {\n log(\"Cookies disabled\");\n setReady();\n }\n }\n}\n\nahoy.getVisitId = ahoy.getVisitToken = function () {\n return getCookie(\"ahoy_visit\");\n};\n\nahoy.getVisitorId = ahoy.getVisitorToken = function () {\n return getCookie(\"ahoy_visitor\");\n};\n\nahoy.reset = function () {\n destroyCookie(\"ahoy_visit\");\n destroyCookie(\"ahoy_visitor\");\n destroyCookie(\"ahoy_events\");\n destroyCookie(\"ahoy_track\");\n return true;\n};\n\nahoy.debug = function (enabled) {\n if (enabled === false) {\n destroyCookie(\"ahoy_debug\");\n } else {\n setCookie(\"ahoy_debug\", \"t\", 365 * 24 * 60); // 1 year\n }\n return true;\n};\n\nahoy.track = function (name, properties) {\n // generate unique id\n var event = {\n name: name,\n properties: properties || {},\n time: (new Date()).getTime() / 1000.0,\n id: generateId(),\n js: true\n };\n\n ahoy.ready( function () {\n if (config.cookies && !ahoy.getVisitId()) {\n createVisit();\n }\n\n ahoy.ready( function () {\n log(event);\n\n event.visit_token = ahoy.getVisitId();\n event.visitor_token = ahoy.getVisitorId();\n\n if (canTrackNow()) {\n trackEventNow(event);\n } else {\n eventQueue.push(event);\n saveEventQueue();\n\n // wait in case navigating to reduce duplicate events\n setTimeout( function () {\n trackEvent(event);\n }, 1000);\n }\n });\n });\n\n return true;\n};\n\nahoy.trackView = function (additionalProperties) {\n var properties = {\n url: window.location.href,\n title: document.title,\n page: page()\n };\n\n if (additionalProperties) {\n for(var propName in additionalProperties) {\n if (additionalProperties.hasOwnProperty(propName)) {\n properties[propName] = additionalProperties[propName];\n }\n }\n }\n ahoy.track(\"$view\", properties);\n};\n\nahoy.trackClicks = function (selector) {\n if (selector === undefined) {\n log(\"trackClicks will require a selector in 0.4.0\");\n selector = \"a, button, input[type=submit]\";\n }\n onEvent(\"click\", selector, function (e) {\n var properties = eventProperties.call(this, e);\n properties.text = properties.tag == \"input\" ? this.value : (this.textContent || this.innerText || this.innerHTML).replace(/[\\s\\r\\n]+/g, \" \").trim();\n properties.href = this.href;\n ahoy.track(\"$click\", properties);\n });\n};\n\nahoy.trackSubmits = function (selector) {\n if (selector === undefined) {\n log(\"trackSubmits will require a selector in 0.4.0\");\n selector = \"form\";\n }\n onEvent(\"submit\", selector, function (e) {\n var properties = eventProperties.call(this, e);\n ahoy.track(\"$submit\", properties);\n });\n};\n\nahoy.trackChanges = function (selector) {\n if (selector === undefined) {\n // put here instead of above to prevent message with trackAll\n log(\"trackChanges is deprecated and will be removed in 0.4.0\");\n selector = \"input, textarea, select\";\n }\n onEvent(\"change\", selector, function (e) {\n var properties = eventProperties.call(this, e);\n ahoy.track(\"$change\", properties);\n });\n};\n\nahoy.trackAll = function() {\n log(\"trackAll is deprecated and will be removed in 0.4.0\");\n ahoy.trackView();\n ahoy.trackClicks(\"a, button, input[type=submit]\");\n ahoy.trackSubmits(\"form\");\n ahoy.trackChanges(\"input, textarea, select\");\n};\n\n// push events from queue\ntry {\n eventQueue = JSON.parse(getCookie(\"ahoy_events\") || \"[]\");\n} catch (e) {\n // do nothing\n}\n\nfor (var i = 0; i < eventQueue.length; i++) {\n trackEvent(eventQueue[i]);\n}\n\nahoy.start = function () {\n createVisit();\n\n ahoy.start = function () {};\n};\n\ndocumentReady(function() {\n if (config.startOnReady) {\n ahoy.start();\n }\n});\n\nexport default ahoy;\n","//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n var flags = null,\n parsedParts = false,\n isNowValid = m._d && !isNaN(m._d.getTime());\n if (isNowValid) {\n flags = getParsingFlags(m);\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n isNowValid =\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n }\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {\n D: 'date',\n dates: 'date',\n date: 'date',\n d: 'day',\n days: 'day',\n day: 'day',\n e: 'weekday',\n weekdays: 'weekday',\n weekday: 'weekday',\n E: 'isoWeekday',\n isoweekdays: 'isoWeekday',\n isoweekday: 'isoWeekday',\n DDD: 'dayOfYear',\n dayofyears: 'dayOfYear',\n dayofyear: 'dayOfYear',\n h: 'hour',\n hours: 'hour',\n hour: 'hour',\n ms: 'millisecond',\n milliseconds: 'millisecond',\n millisecond: 'millisecond',\n m: 'minute',\n minutes: 'minute',\n minute: 'minute',\n M: 'month',\n months: 'month',\n month: 'month',\n Q: 'quarter',\n quarters: 'quarter',\n quarter: 'quarter',\n s: 'second',\n seconds: 'second',\n second: 'second',\n gg: 'weekYear',\n weekyears: 'weekYear',\n weekyear: 'weekYear',\n GG: 'isoWeekYear',\n isoweekyears: 'isoWeekYear',\n isoweekyear: 'isoWeekYear',\n w: 'week',\n weeks: 'week',\n week: 'week',\n W: 'isoWeek',\n isoweeks: 'isoWeek',\n isoweek: 'isoWeek',\n y: 'year',\n years: 'year',\n year: 'year',\n };\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {\n date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1,\n };\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n match1to2NoLeadingZero = /^[1-9]\\d?/, // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/, // 0-99\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n if (!mom.isValid()) {\n return NaN;\n }\n\n var d = mom._d,\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n case 'Seconds':\n return isUTC ? d.getUTCSeconds() : d.getSeconds();\n case 'Minutes':\n return isUTC ? d.getUTCMinutes() : d.getMinutes();\n case 'Hours':\n return isUTC ? d.getUTCHours() : d.getHours();\n case 'Date':\n return isUTC ? d.getUTCDate() : d.getDate();\n case 'Day':\n return isUTC ? d.getUTCDay() : d.getDay();\n case 'Month':\n return isUTC ? d.getUTCMonth() : d.getMonth();\n case 'FullYear':\n return isUTC ? d.getUTCFullYear() : d.getFullYear();\n default:\n return NaN; // Just in case\n }\n }\n\n function set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n\n d = mom._d;\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC\n ? d.setUTCMilliseconds(value)\n : d.setMilliseconds(value));\n case 'Seconds':\n return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n case 'Minutes':\n return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n case 'Hours':\n return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n case 'Date':\n return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n // case 'Day': // Not real\n // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n // case 'Month': // Not used because we need to pass two variables\n // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n case 'FullYear':\n break; // See below ...\n default:\n return; // Just in case\n }\n\n year = value;\n month = mom.month();\n date = mom.date();\n date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n void (isUTC\n ? d.setUTCFullYear(year, month, date)\n : d.setFullYear(year, month, date));\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // PARSING\n\n addRegexToken('M', match1to2, match1to2NoLeadingZero);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n var month = value,\n date = mom.date();\n\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC\n ? mom._d.setUTCMonth(month, date)\n : mom._d.setMonth(month, date));\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n shortP,\n longP;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortP = regexEscape(this.monthsShort(mom, ''));\n longP = regexEscape(this.months(mom, ''));\n shortPieces.push(shortP);\n longPieces.push(longP);\n mixedPieces.push(longP);\n mixedPieces.push(shortP);\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // PARSING\n\n addRegexToken('w', match1to2, match1to2NoLeadingZero);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2, match1to2NoLeadingZero);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = get(this, 'Day');\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2, match1to2HasZero);\n addRegexToken('h', match1to2, match1to2NoLeadingZero);\n addRegexToken('k', match1to2, match1to2NoLeadingZero);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n // Ensure name is available and function returns boolean\n return !!(name && name.match('^[^/\\\\\\\\]*$'));\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n erasName,\n erasAbbr,\n erasNarrow,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n erasName = regexEscape(eras[i].name);\n erasAbbr = regexEscape(eras[i].abbr);\n erasNarrow = regexEscape(eras[i].narrow);\n\n namePieces.push(erasName);\n abbrPieces.push(erasAbbr);\n narrowPieces.push(erasNarrow);\n mixedPieces.push(erasName);\n mixedPieces.push(erasAbbr);\n mixedPieces.push(erasNarrow);\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday() + this.localeData()._week.dow,\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // PARSING\n\n addRegexToken('D', match1to2, match1to2NoLeadingZero);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // PARSING\n\n addRegexToken('m', match1to2, match1to2HasZero);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // PARSING\n\n addRegexToken('s', match1to2, match1to2HasZero);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y'),\n valueOf$1 = asMilliseconds;\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.30.1';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n","export const method = (controller, methodName) => {\n const method = controller[methodName];\n if (typeof method == 'function') {\n return method;\n }\n throw new Error(`undefined method \"${methodName}\"`);\n};\nexport const composeEventName = (name, controller, eventPrefix) => {\n let composedName = name;\n if (eventPrefix === true) {\n composedName = `${controller.identifier}:${name}`;\n }\n else if (typeof eventPrefix === 'string') {\n composedName = `${eventPrefix}:${name}`;\n }\n return composedName;\n};\nexport const extendedEvent = (type, event, detail) => {\n const { bubbles, cancelable, composed } = event || { bubbles: true, cancelable: true, composed: true };\n if (event) {\n Object.assign(detail, { originalEvent: event });\n }\n const customEvent = new CustomEvent(type, {\n bubbles,\n cancelable,\n composed,\n detail,\n });\n return customEvent;\n};\nexport const isElementInViewport = (el) => {\n const rect = el.getBoundingClientRect();\n return (rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth));\n};\n//# sourceMappingURL=index.js.map","import { Controller } from 'stimulus';\nimport { useIntersection } from './use-intersection';\nexport class IntersectionController extends Controller {\n constructor(context) {\n super(context);\n this.isVisible = false;\n requestAnimationFrame(() => {\n const [observe, unobserve] = useIntersection(this, this.options);\n Object.assign(this, { observe, unobserve });\n });\n }\n}\n//# sourceMappingURL=intersection-controller.js.map","import { Controller } from 'stimulus';\nimport { useLazyLoad } from './useLazyLoad';\nexport class LazyLoadController extends Controller {\n constructor(context) {\n super(context);\n this.isLoading = false;\n this.isLoaded = false;\n this.options = { rootMargin: '10%' };\n requestAnimationFrame(() => {\n const [observe, unobserve] = useLazyLoad(this, this.options);\n Object.assign(this, { observe, unobserve });\n });\n }\n loading(src) { }\n loaded(src) { }\n}\n//# sourceMappingURL=lazy-load-controller.js.map","import { Controller } from 'stimulus';\nimport { useResize } from './use-resize';\nexport class ResizeController extends Controller {\n constructor(context) {\n super(context);\n requestAnimationFrame(() => {\n const [observe, unobserve] = useResize(this, this.options);\n Object.assign(this, { observe, unobserve });\n });\n }\n resize(contentRect) { }\n}\n//# sourceMappingURL=resize-controller.js.map","import { method, extendedEvent, isElementInViewport, composeEventName } from '../support/index';\nconst defaultOptions = {\n events: ['click', 'touchend'],\n onlyVisible: true,\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useClickOutside = (controller, options = {}) => {\n const { onlyVisible, dispatchEvent, events, eventPrefix } = Object.assign({}, defaultOptions, options);\n const onEvent = (event) => {\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n if (targetElement.contains(event.target) || (!isElementInViewport(targetElement) && onlyVisible)) {\n return;\n }\n // call the clickOutside method of the Stimulus controller\n controller.clickOutside && method(controller, 'clickOutside').call(controller, event);\n // emit a custom event\n if (dispatchEvent) {\n const eventName = composeEventName('click:outside', controller, eventPrefix);\n const clickOutsideEvent = extendedEvent(eventName, event, { controller });\n targetElement.dispatchEvent(clickOutsideEvent);\n }\n };\n const observe = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.addEventListener(event, onEvent, false);\n });\n };\n const unobserve = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.removeEventListener(event, onEvent, false);\n });\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-click-outside.js.map","import { Controller } from 'stimulus';\nimport { useClickOutside } from './use-click-outside';\nexport class ClickOutsideController extends Controller {\n constructor(context) {\n super(context);\n requestAnimationFrame(() => {\n const [observe, unobserve] = useClickOutside(this, this.options);\n Object.assign(this, { observe, unobserve });\n });\n }\n clickOutside(event) { }\n}\n//# sourceMappingURL=click-outside-controller.js.map","const defaultOptions = {\n debug: false,\n logger: console\n};\nexport class StimulusUse {\n constructor(controller, options = {}) {\n this.log = (functionName, args) => {\n if (!this.debug)\n return;\n this.logger.groupCollapsed(`%c${this.controller.identifier}#%c${functionName}`, 'color: #3B82F6', 'color: unset');\n this.logger.log(Object.assign({ controllerId: this.controllerId }, args));\n this.logger.groupEnd();\n };\n this.debug = (options === null || options === void 0 ? void 0 : options.debug) || controller.application.stimulusUseDebug || defaultOptions.debug;\n this.logger = (options === null || options === void 0 ? void 0 : options.logger) || defaultOptions.logger;\n this.controller = controller;\n this.controllerId = controller.element.id || controller.element.dataset.id;\n // make copies of lifecycle functions\n this.controllerInitialize = controller.initialize.bind(controller);\n this.controllerConnect = controller.connect.bind(controller);\n this.controllerDisconnect = controller.disconnect.bind(controller);\n }\n}\n//# sourceMappingURL=stimulus_use.js.map","import { composeEventName } from '../support/index';\nimport { StimulusUse } from '../stimulus_use';\nconst defaultOptions = {\n eventPrefix: true,\n bubbles: true,\n cancelable: true,\n};\nexport class UseDispatch extends StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c, _d;\n super(controller, options);\n this.dispatch = (eventName, detail = {}) => {\n const { controller, targetElement, eventPrefix, bubbles, cancelable, log } = this;\n // includes the emitting controller in the event detail\n Object.assign(detail, { controller });\n const eventNameWithPrefix = composeEventName(eventName, this.controller, eventPrefix);\n // creates the custom event\n const event = new CustomEvent(eventNameWithPrefix, {\n detail,\n bubbles,\n cancelable,\n });\n // dispatch the event from the given element or by default from the root element of the controller\n targetElement.dispatchEvent(event);\n log(\"dispatch\", { eventName: eventNameWithPrefix, detail, bubbles, cancelable });\n return event;\n };\n this.targetElement = (_a = options.element) !== null && _a !== void 0 ? _a : controller.element;\n this.eventPrefix = (_b = options.eventPrefix) !== null && _b !== void 0 ? _b : defaultOptions.eventPrefix;\n this.bubbles = (_c = options.bubbles) !== null && _c !== void 0 ? _c : defaultOptions.bubbles;\n this.cancelable = (_d = options.cancelable) !== null && _d !== void 0 ? _d : defaultOptions.cancelable;\n this.enhanceController();\n }\n enhanceController() {\n Object.assign(this.controller, { dispatch: this.dispatch });\n }\n}\nexport const useDispatch = (controller, options = {}) => {\n return new UseDispatch(controller, options);\n};\n//# sourceMappingURL=use-dispatch.js.map","import { Controller } from 'stimulus';\nimport { useApplication } from './use-application';\nexport class ApplicationController extends Controller {\n constructor(context) {\n super(context);\n this.isPreview = false;\n this.csrfToken = '';\n useApplication(this, this.options);\n }\n}\n//# sourceMappingURL=application-controller.js.map","import { Controller } from 'stimulus';\nimport { useIdle } from './use-idle';\nexport class IdleController extends Controller {\n constructor(context) {\n super(context);\n this.isIdle = false;\n requestAnimationFrame(() => {\n const [observe, unobserve] = useIdle(this, this.options);\n Object.assign(this, { observe, unobserve });\n });\n }\n away() { }\n back() { }\n}\n//# sourceMappingURL=idle-controller.js.map","import { Controller } from 'stimulus';\nimport { useVisibility } from './use-visibility';\nexport class VisibilityController extends Controller {\n constructor(context) {\n super(context);\n requestAnimationFrame(() => {\n const [observe, unobserve] = useVisibility(this, this.options);\n Object.assign(this, { observe, unobserve });\n });\n }\n}\n//# sourceMappingURL=visibility-controller.js.map","import { Controller } from 'stimulus';\nimport { useWindowResize } from './use-window-resize';\nexport class WindowResizeController extends Controller {\n constructor(context) {\n super(context);\n requestAnimationFrame(() => {\n const [observe, unobserve] = useWindowResize(this);\n Object.assign(this, { observe, unobserve });\n });\n }\n windowResize(payload) { }\n}\n//# sourceMappingURL=window-resize-controller.js.map","import { Controller } from 'stimulus';\nclass DebounceController extends Controller {\n}\nDebounceController.debounces = [];\nconst defaultWait = 200;\nconst debounce = (fn, wait = defaultWait) => {\n let timeoutId = null;\n return function () {\n const args = arguments;\n const context = this;\n const callback = () => fn.apply(context, args);\n clearTimeout(timeoutId);\n timeoutId = setTimeout(callback, wait);\n };\n};\nexport const useDebounce = (controller, options) => {\n var _a;\n const constructor = controller.constructor;\n (_a = constructor.debounces) === null || _a === void 0 ? void 0 : _a.forEach((func) => {\n if (typeof func === \"string\") {\n controller[func] = debounce(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n }\n if (typeof func === \"object\") {\n const { name, wait } = func;\n if (!name)\n return;\n controller[name] = debounce(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n }\n });\n};\n//# sourceMappingURL=use-debounce.js.map","import { Controller } from 'stimulus';\nclass ThrottleController extends Controller {\n}\nThrottleController.trottles = [];\nconst defaultWait = 200;\nexport function throttle(func, wait = defaultWait) {\n let inThrottle;\n return function () {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n inThrottle = true;\n func.apply(context, args);\n setTimeout(() => (inThrottle = false), wait);\n }\n };\n}\nexport const useThrottle = (controller, options) => {\n var _a;\n const constructor = controller.constructor;\n (_a = constructor.throttles) === null || _a === void 0 ? void 0 : _a.forEach((func) => {\n if (typeof func === \"string\") {\n controller[func] = throttle(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n }\n if (typeof func === \"object\") {\n const { name, wait } = func;\n if (!name)\n return;\n controller[name] = throttle(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n }\n });\n};\n//# sourceMappingURL=use-throttle.js.map","var adapters = {\n logger: typeof console !== \"undefined\" ? console : undefined,\n WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined\n};\n\nvar logger = {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now());\n adapters.logger.log(\"[ActionCable]\", ...messages);\n }\n }\n};\n\nconst now = () => (new Date).getTime();\n\nconst secondsSince = time => (now() - time) / 1e3;\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this);\n this.connection = connection;\n this.reconnectAttempts = 0;\n }\n start() {\n if (!this.isRunning()) {\n this.startedAt = now();\n delete this.stoppedAt;\n this.startPolling();\n addEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`);\n }\n }\n stop() {\n if (this.isRunning()) {\n this.stoppedAt = now();\n this.stopPolling();\n removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(\"ConnectionMonitor stopped\");\n }\n }\n isRunning() {\n return this.startedAt && !this.stoppedAt;\n }\n recordPing() {\n this.pingedAt = now();\n }\n recordConnect() {\n this.reconnectAttempts = 0;\n this.recordPing();\n delete this.disconnectedAt;\n logger.log(\"ConnectionMonitor recorded connect\");\n }\n recordDisconnect() {\n this.disconnectedAt = now();\n logger.log(\"ConnectionMonitor recorded disconnect\");\n }\n startPolling() {\n this.stopPolling();\n this.poll();\n }\n stopPolling() {\n clearTimeout(this.pollTimeout);\n }\n poll() {\n this.pollTimeout = setTimeout((() => {\n this.reconnectIfStale();\n this.poll();\n }), this.getPollInterval());\n }\n getPollInterval() {\n const {staleThreshold: staleThreshold, reconnectionBackoffRate: reconnectionBackoffRate} = this.constructor;\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10));\n const jitterMax = this.reconnectAttempts === 0 ? 1 : reconnectionBackoffRate;\n const jitter = jitterMax * Math.random();\n return staleThreshold * 1e3 * backoff * (1 + jitter);\n }\n reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`);\n this.reconnectAttempts++;\n if (this.disconnectedRecently()) {\n logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`);\n } else {\n logger.log(\"ConnectionMonitor reopening\");\n this.connection.reopen();\n }\n }\n }\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt;\n }\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold;\n }\n disconnectedRecently() {\n return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n }\n visibilityDidChange() {\n if (document.visibilityState === \"visible\") {\n setTimeout((() => {\n if (this.connectionIsStale() || !this.connection.isOpen()) {\n logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`);\n this.connection.reopen();\n }\n }), 200);\n }\n }\n}\n\nConnectionMonitor.staleThreshold = 6;\n\nConnectionMonitor.reconnectionBackoffRate = .15;\n\nvar INTERNAL = {\n message_types: {\n welcome: \"welcome\",\n disconnect: \"disconnect\",\n ping: \"ping\",\n confirmation: \"confirm_subscription\",\n rejection: \"reject_subscription\"\n },\n disconnect_reasons: {\n unauthorized: \"unauthorized\",\n invalid_request: \"invalid_request\",\n server_restart: \"server_restart\",\n remote: \"remote\"\n },\n default_mount_path: \"/cable\",\n protocols: [ \"actioncable-v1-json\", \"actioncable-unsupported\" ]\n};\n\nconst {message_types: message_types, protocols: protocols} = INTERNAL;\n\nconst supportedProtocols = protocols.slice(0, protocols.length - 1);\n\nconst indexOf = [].indexOf;\n\nclass Connection {\n constructor(consumer) {\n this.open = this.open.bind(this);\n this.consumer = consumer;\n this.subscriptions = this.consumer.subscriptions;\n this.monitor = new ConnectionMonitor(this);\n this.disconnected = true;\n }\n send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data));\n return true;\n } else {\n return false;\n }\n }\n open() {\n if (this.isActive()) {\n logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`);\n return false;\n } else {\n const socketProtocols = [ ...protocols, ...this.consumer.subprotocols || [] ];\n logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`);\n if (this.webSocket) {\n this.uninstallEventHandlers();\n }\n this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols);\n this.installEventHandlers();\n this.monitor.start();\n return true;\n }\n }\n close({allowReconnect: allowReconnect} = {\n allowReconnect: true\n }) {\n if (!allowReconnect) {\n this.monitor.stop();\n }\n if (this.isOpen()) {\n return this.webSocket.close();\n }\n }\n reopen() {\n logger.log(`Reopening WebSocket, current state is ${this.getState()}`);\n if (this.isActive()) {\n try {\n return this.close();\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error);\n } finally {\n logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`);\n setTimeout(this.open, this.constructor.reopenDelay);\n }\n } else {\n return this.open();\n }\n }\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol;\n }\n }\n isOpen() {\n return this.isState(\"open\");\n }\n isActive() {\n return this.isState(\"open\", \"connecting\");\n }\n triedToReconnect() {\n return this.monitor.reconnectAttempts > 0;\n }\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n }\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0;\n }\n getState() {\n if (this.webSocket) {\n for (let state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase();\n }\n }\n }\n return null;\n }\n installEventHandlers() {\n for (let eventName in this.events) {\n const handler = this.events[eventName].bind(this);\n this.webSocket[`on${eventName}`] = handler;\n }\n }\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {};\n }\n }\n}\n\nConnection.reopenDelay = 500;\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) {\n return;\n }\n const {identifier: identifier, message: message, reason: reason, reconnect: reconnect, type: type} = JSON.parse(event.data);\n switch (type) {\n case message_types.welcome:\n if (this.triedToReconnect()) {\n this.reconnectAttempted = true;\n }\n this.monitor.recordConnect();\n return this.subscriptions.reload();\n\n case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`);\n return this.close({\n allowReconnect: reconnect\n });\n\n case message_types.ping:\n return this.monitor.recordPing();\n\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier);\n if (this.reconnectAttempted) {\n this.reconnectAttempted = false;\n return this.subscriptions.notify(identifier, \"connected\", {\n reconnected: true\n });\n } else {\n return this.subscriptions.notify(identifier, \"connected\", {\n reconnected: false\n });\n }\n\n case message_types.rejection:\n return this.subscriptions.reject(identifier);\n\n default:\n return this.subscriptions.notify(identifier, \"received\", message);\n }\n },\n open() {\n logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`);\n this.disconnected = false;\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n return this.close({\n allowReconnect: false\n });\n }\n },\n close(event) {\n logger.log(\"WebSocket onclose event\");\n if (this.disconnected) {\n return;\n }\n this.disconnected = true;\n this.monitor.recordDisconnect();\n return this.subscriptions.notifyAll(\"disconnected\", {\n willAttemptReconnect: this.monitor.isRunning()\n });\n },\n error() {\n logger.log(\"WebSocket onerror event\");\n }\n};\n\nconst extend = function(object, properties) {\n if (properties != null) {\n for (let key in properties) {\n const value = properties[key];\n object[key] = value;\n }\n }\n return object;\n};\n\nclass Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer;\n this.identifier = JSON.stringify(params);\n extend(this, mixin);\n }\n perform(action, data = {}) {\n data.action = action;\n return this.send(data);\n }\n send(data) {\n return this.consumer.send({\n command: \"message\",\n identifier: this.identifier,\n data: JSON.stringify(data)\n });\n }\n unsubscribe() {\n return this.consumer.subscriptions.remove(this);\n }\n}\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions;\n this.pendingSubscriptions = [];\n }\n guarantee(subscription) {\n if (this.pendingSubscriptions.indexOf(subscription) == -1) {\n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`);\n this.pendingSubscriptions.push(subscription);\n } else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`);\n }\n this.startGuaranteeing();\n }\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`);\n this.pendingSubscriptions = this.pendingSubscriptions.filter((s => s !== subscription));\n }\n startGuaranteeing() {\n this.stopGuaranteeing();\n this.retrySubscribing();\n }\n stopGuaranteeing() {\n clearTimeout(this.retryTimeout);\n }\n retrySubscribing() {\n this.retryTimeout = setTimeout((() => {\n if (this.subscriptions && typeof this.subscriptions.subscribe === \"function\") {\n this.pendingSubscriptions.map((subscription => {\n logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`);\n this.subscriptions.subscribe(subscription);\n }));\n }\n }), 500);\n }\n}\n\nclass Subscriptions {\n constructor(consumer) {\n this.consumer = consumer;\n this.guarantor = new SubscriptionGuarantor(this);\n this.subscriptions = [];\n }\n create(channelName, mixin) {\n const channel = channelName;\n const params = typeof channel === \"object\" ? channel : {\n channel: channel\n };\n const subscription = new Subscription(this.consumer, params, mixin);\n return this.add(subscription);\n }\n add(subscription) {\n this.subscriptions.push(subscription);\n this.consumer.ensureActiveConnection();\n this.notify(subscription, \"initialized\");\n this.subscribe(subscription);\n return subscription;\n }\n remove(subscription) {\n this.forget(subscription);\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\");\n }\n return subscription;\n }\n reject(identifier) {\n return this.findAll(identifier).map((subscription => {\n this.forget(subscription);\n this.notify(subscription, \"rejected\");\n return subscription;\n }));\n }\n forget(subscription) {\n this.guarantor.forget(subscription);\n this.subscriptions = this.subscriptions.filter((s => s !== subscription));\n return subscription;\n }\n findAll(identifier) {\n return this.subscriptions.filter((s => s.identifier === identifier));\n }\n reload() {\n return this.subscriptions.map((subscription => this.subscribe(subscription)));\n }\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription => this.notify(subscription, callbackName, ...args)));\n }\n notify(subscription, callbackName, ...args) {\n let subscriptions;\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription);\n } else {\n subscriptions = [ subscription ];\n }\n return subscriptions.map((subscription => typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined));\n }\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription);\n }\n }\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`);\n this.findAll(identifier).map((subscription => this.guarantor.forget(subscription)));\n }\n sendCommand(subscription, command) {\n const {identifier: identifier} = subscription;\n return this.consumer.send({\n command: command,\n identifier: identifier\n });\n }\n}\n\nclass Consumer {\n constructor(url) {\n this._url = url;\n this.subscriptions = new Subscriptions(this);\n this.connection = new Connection(this);\n this.subprotocols = [];\n }\n get url() {\n return createWebSocketURL(this._url);\n }\n send(data) {\n return this.connection.send(data);\n }\n connect() {\n return this.connection.open();\n }\n disconnect() {\n return this.connection.close({\n allowReconnect: false\n });\n }\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open();\n }\n }\n addSubProtocol(subprotocol) {\n this.subprotocols = [ ...this.subprotocols, subprotocol ];\n }\n}\n\nfunction createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url();\n }\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\");\n a.href = url;\n a.href = a.href;\n a.protocol = a.protocol.replace(\"http\", \"ws\");\n return a.href;\n } else {\n return url;\n }\n}\n\nfunction createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url);\n}\n\nfunction getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`);\n if (element) {\n return element.getAttribute(\"content\");\n }\n}\n\nexport { Connection, ConnectionMonitor, Consumer, INTERNAL, Subscription, SubscriptionGuarantor, Subscriptions, adapters, createConsumer, createWebSocketURL, getConfig, logger };\n","import { Controller } from \"@hotwired/stimulus\";\n\nimport CableReady, { Utils } from \"cable_ready\";\n\nimport { createConsumer } from \"@rails/actioncable\";\n\n/*!\n * Toastify js 1.12.0\n * https://github.com/apvarun/toastify-js\n * @license MIT licensed\n *\n * Copyright (C) 2018 Varun A P\n */ class Toastify {\n defaults={\n oldestFirst: true,\n text: \"Toastify is awesome!\",\n node: undefined,\n duration: 3e3,\n selector: undefined,\n callback: function() {},\n destination: undefined,\n newWindow: false,\n close: false,\n gravity: \"toastify-top\",\n positionLeft: false,\n position: \"\",\n backgroundColor: \"\",\n avatar: \"\",\n className: \"\",\n stopOnFocus: true,\n onClick: function() {},\n offset: {\n x: 0,\n y: 0\n },\n escapeMarkup: true,\n ariaLive: \"polite\",\n style: {\n background: \"\"\n }\n };\n constructor(options) {\n this.version = \"1.12.0\";\n this.options = {};\n this.toastElement = null;\n this._rootElement = document.body;\n this._init(options);\n }\n showToast() {\n this.toastElement = this._buildToast();\n if (typeof this.options.selector === \"string\") {\n this._rootElement = document.getElementById(this.options.selector);\n } else if (this.options.selector instanceof HTMLElement || this.options.selector instanceof ShadowRoot) {\n this._rootElement = this.options.selector;\n } else {\n this._rootElement = document.body;\n }\n if (!this._rootElement) {\n throw \"Root element is not defined\";\n }\n this._rootElement.insertBefore(this.toastElement, this._rootElement.firstChild);\n this._reposition();\n if (this.options.duration > 0) {\n this.toastElement.timeOutValue = window.setTimeout((() => {\n this._removeElement(this.toastElement);\n }), this.options.duration);\n }\n return this;\n }\n hideToast() {\n if (this.toastElement.timeOutValue) {\n clearTimeout(this.toastElement.timeOutValue);\n }\n this._removeElement(this.toastElement);\n }\n _init(options) {\n this.options = Object.assign(this.defaults, options);\n if (this.options.backgroundColor) {\n console.warn('DEPRECATION NOTICE: \"backgroundColor\" is being deprecated. Please use the \"style.background\" property.');\n }\n this.toastElement = null;\n this.options.gravity = options.gravity === \"bottom\" ? \"toastify-bottom\" : \"toastify-top\";\n this.options.stopOnFocus = options.stopOnFocus === undefined ? true : options.stopOnFocus;\n if (options.backgroundColor) {\n this.options.style.background = options.backgroundColor;\n }\n }\n _buildToast() {\n if (!this.options) {\n throw \"Toastify is not initialized\";\n }\n let divElement = document.createElement(\"div\");\n divElement.className = `toastify on ${this.options.className}`;\n divElement.className += ` toastify-${this.options.position}`;\n divElement.className += ` ${this.options.gravity}`;\n for (const property in this.options.style) {\n divElement.style[property] = this.options.style[property];\n }\n if (this.options.ariaLive) {\n divElement.setAttribute(\"aria-live\", this.options.ariaLive);\n }\n if (this.options.node && this.options.node.nodeType === Node.ELEMENT_NODE) {\n divElement.appendChild(this.options.node);\n } else {\n if (this.options.escapeMarkup) {\n divElement.innerText = this.options.text;\n } else {\n divElement.innerHTML = this.options.text;\n }\n if (this.options.avatar !== \"\") {\n let avatarElement = document.createElement(\"img\");\n avatarElement.src = this.options.avatar;\n avatarElement.className = \"toastify-avatar\";\n if (this.options.position == \"left\") {\n divElement.appendChild(avatarElement);\n } else {\n divElement.insertAdjacentElement(\"afterbegin\", avatarElement);\n }\n }\n }\n if (this.options.close === true) {\n let closeElement = document.createElement(\"button\");\n closeElement.type = \"button\";\n closeElement.setAttribute(\"aria-label\", \"Close\");\n closeElement.className = \"toast-close\";\n closeElement.innerHTML = \"✖\";\n closeElement.addEventListener(\"click\", (event => {\n event.stopPropagation();\n this._removeElement(this.toastElement);\n window.clearTimeout(this.toastElement.timeOutValue);\n }));\n const width = window.innerWidth > 0 ? window.innerWidth : screen.width;\n if (this.options.position == \"left\" && width > 360) {\n divElement.insertAdjacentElement(\"afterbegin\", closeElement);\n } else {\n divElement.appendChild(closeElement);\n }\n }\n if (this.options.stopOnFocus && this.options.duration > 0) {\n divElement.addEventListener(\"mouseover\", (event => {\n window.clearTimeout(divElement.timeOutValue);\n }));\n divElement.addEventListener(\"mouseleave\", (() => {\n divElement.timeOutValue = window.setTimeout((() => {\n this._removeElement(divElement);\n }), this.options.duration);\n }));\n }\n if (typeof this.options.destination !== \"undefined\") {\n divElement.addEventListener(\"click\", (event => {\n event.stopPropagation();\n if (this.options.newWindow === true) {\n window.open(this.options.destination, \"_blank\");\n } else {\n window.location = this.options.destination;\n }\n }));\n }\n if (typeof this.options.onClick === \"function\" && typeof this.options.destination === \"undefined\") {\n divElement.addEventListener(\"click\", (event => {\n event.stopPropagation();\n this.options.onClick();\n }));\n }\n if (typeof this.options.offset === \"object\") {\n const x = this._getAxisOffsetAValue(\"x\", this.options);\n const y = this._getAxisOffsetAValue(\"y\", this.options);\n const xOffset = this.options.position == \"left\" ? x : `-${x}`;\n const yOffset = this.options.gravity == \"toastify-top\" ? y : `-${y}`;\n divElement.style.transform = `translate(${xOffset},${yOffset})`;\n }\n return divElement;\n }\n _removeElement(toastElement) {\n toastElement.className = toastElement.className.replace(\" on\", \"\");\n window.setTimeout((() => {\n if (this.options.node && this.options.node.parentNode) {\n this.options.node.parentNode.removeChild(this.options.node);\n }\n if (toastElement.parentNode) {\n toastElement.parentNode.removeChild(toastElement);\n }\n this.options.callback.call(toastElement);\n this._reposition();\n }), 400);\n }\n _reposition() {\n let topLeftOffsetSize = {\n top: 15,\n bottom: 15\n };\n let topRightOffsetSize = {\n top: 15,\n bottom: 15\n };\n let offsetSize = {\n top: 15,\n bottom: 15\n };\n let allToasts = this._rootElement.querySelectorAll(\".toastify\");\n let classUsed;\n for (let i = 0; i < allToasts.length; i++) {\n if (allToasts[i].classList.contains(\"toastify-top\") === true) {\n classUsed = \"toastify-top\";\n } else {\n classUsed = \"toastify-bottom\";\n }\n let height = allToasts[i].offsetHeight;\n classUsed = classUsed.substr(9, classUsed.length - 1);\n let offset = 15;\n let width = window.innerWidth > 0 ? window.innerWidth : screen.width;\n if (width <= 360) {\n allToasts[i].style[classUsed] = `${offsetSize[classUsed]}px`;\n offsetSize[classUsed] += height + offset;\n } else {\n if (allToasts[i].classList.contains(\"toastify-left\") === true) {\n allToasts[i].style[classUsed] = `${topLeftOffsetSize[classUsed]}px`;\n topLeftOffsetSize[classUsed] += height + offset;\n } else {\n allToasts[i].style[classUsed] = `${topRightOffsetSize[classUsed]}px`;\n topRightOffsetSize[classUsed] += height + offset;\n }\n }\n }\n }\n _getAxisOffsetAValue(axis, options) {\n if (options.offset[axis]) {\n if (isNaN(options.offset[axis])) {\n return options.offset[axis];\n } else {\n return `${options.offset[axis]}px`;\n }\n }\n return \"0px\";\n }\n}\n\nfunction StartToastifyInstance(options) {\n return new Toastify(options);\n}\n\nCableReady.operations.stimulusReflexVersionMismatch = operation => {\n const levels = {\n info: {},\n success: {\n background: \"#198754\",\n color: \"white\"\n },\n warn: {\n background: \"#ffc107\",\n color: \"black\"\n },\n error: {\n background: \"#dc3545\",\n color: \"white\"\n }\n };\n const defaults = {\n selector: setupToastify(),\n close: true,\n duration: 30 * 1e3,\n gravity: \"bottom\",\n position: \"right\",\n newWindow: true,\n style: levels[operation.level || \"info\"]\n };\n StartToastifyInstance({\n ...defaults,\n ...operation\n }).showToast();\n};\n\nfunction setupToastify() {\n const id = \"stimulus-reflex-toast-element\";\n let element = document.querySelector(`#${id}`);\n if (!element) {\n element = document.createElement(\"div\");\n element.id = id;\n document.documentElement.appendChild(element);\n const styles = document.createElement(\"style\");\n styles.innerHTML = `\\n #${id} .toastify {\\n padding: 12px 20px;\\n color: #ffffff;\\n display: inline-block;\\n background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5);\\n background: linear-gradient(135deg, #73a5ff, #5477f5);\\n position: fixed;\\n opacity: 0;\\n transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);\\n border-radius: 2px;\\n cursor: pointer;\\n text-decoration: none;\\n max-width: calc(50% - 20px);\\n z-index: 2147483647;\\n bottom: -150px;\\n right: 15px;\\n }\\n\\n #${id} .toastify.on {\\n opacity: 1;\\n }\\n\\n #${id} .toast-close {\\n background: transparent;\\n border: 0;\\n color: white;\\n cursor: pointer;\\n font-family: inherit;\\n font-size: 1em;\\n opacity: 0.4;\\n padding: 0 5px;\\n }\\n `;\n document.head.appendChild(styles);\n }\n return element;\n}\n\nlet deprecationWarnings = true;\n\nvar Deprecate = {\n get enabled() {\n return deprecationWarnings;\n },\n get disabled() {\n return !deprecationWarnings;\n },\n get value() {\n return deprecationWarnings;\n },\n set(value) {\n deprecationWarnings = !!value;\n },\n set deprecate(value) {\n deprecationWarnings = !!value;\n }\n};\n\nlet debugging = false;\n\nvar Debug$1 = {\n get enabled() {\n return debugging;\n },\n get disabled() {\n return !debugging;\n },\n get value() {\n return debugging;\n },\n set(value) {\n debugging = !!value;\n },\n set debug(value) {\n debugging = !!value;\n }\n};\n\nconst defaultSchema = {\n reflexAttribute: \"data-reflex\",\n reflexPermanentAttribute: \"data-reflex-permanent\",\n reflexRootAttribute: \"data-reflex-root\",\n reflexSuppressLoggingAttribute: \"data-reflex-suppress-logging\",\n reflexDatasetAttribute: \"data-reflex-dataset\",\n reflexDatasetAllAttribute: \"data-reflex-dataset-all\",\n reflexSerializeFormAttribute: \"data-reflex-serialize-form\",\n reflexFormSelectorAttribute: \"data-reflex-form-selector\",\n reflexIncludeInnerHtmlAttribute: \"data-reflex-include-inner-html\",\n reflexIncludeTextContentAttribute: \"data-reflex-include-text-content\"\n};\n\nlet schema = {};\n\nvar Schema = {\n set(application) {\n schema = {\n ...defaultSchema,\n ...application.schema\n };\n for (const attribute in schema) {\n const attributeName = attribute.slice(0, -9);\n Object.defineProperty(this, attributeName, {\n get: () => schema[attribute],\n configurable: true\n });\n }\n }\n};\n\nconst {debounce: debounce, dispatch: dispatch, xpathToElement: xpathToElement, xpathToElementArray: xpathToElementArray} = Utils;\n\nconst uuidv4 = () => {\n const crypto = window.crypto || window.msCrypto;\n return ([ 1e7 ] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)));\n};\n\nconst serializeForm = (form, options = {}) => {\n if (!form) return \"\";\n const w = options.w || window;\n const {element: element} = options;\n const formData = new w.FormData(form);\n const data = Array.from(formData, (e => e.map(encodeURIComponent).join(\"=\")));\n const submitButton = form.querySelector(\"input[type=submit]\");\n if (element && element.name && element.nodeName === \"INPUT\" && element.type === \"submit\") {\n data.push(`${encodeURIComponent(element.name)}=${encodeURIComponent(element.value)}`);\n } else if (submitButton && submitButton.name) {\n data.push(`${encodeURIComponent(submitButton.name)}=${encodeURIComponent(submitButton.value)}`);\n }\n return Array.from(data).join(\"&\");\n};\n\nconst camelize = (value, uppercaseFirstLetter = true) => {\n if (typeof value !== \"string\") return \"\";\n value = value.replace(/[\\s_](.)/g, ($1 => $1.toUpperCase())).replace(/[\\s_]/g, \"\").replace(/^(.)/, ($1 => $1.toLowerCase()));\n if (uppercaseFirstLetter) value = value.substr(0, 1).toUpperCase() + value.substr(1);\n return value;\n};\n\nconst XPathToElement = xpathToElement;\n\nconst XPathToArray = xpathToElementArray;\n\nconst emitEvent = (name, detail = {}) => dispatch(document, name, detail);\n\nconst extractReflexName = reflexString => {\n const match = reflexString.match(/(?:.*->)?(.*?)(?:Reflex)?#/);\n return match ? match[1] : \"\";\n};\n\nconst elementToXPath = element => {\n if (element.id !== \"\") return \"//*[@id='\" + element.id + \"']\";\n if (element === document.body) return \"/html/body\";\n if (element.nodeName === \"HTML\") return \"/html\";\n let ix = 0;\n const siblings = element && element.parentNode ? element.parentNode.childNodes : [];\n for (var i = 0; i < siblings.length; i++) {\n const sibling = siblings[i];\n if (sibling === element) {\n const computedPath = elementToXPath(element.parentNode);\n const tagName = element.tagName.toLowerCase();\n const ixInc = ix + 1;\n return `${computedPath}/${tagName}[${ixInc}]`;\n }\n if (sibling.nodeType === 1 && sibling.tagName === element.tagName) {\n ix++;\n }\n }\n};\n\nconst elementInvalid = element => element.type === \"number\" && element.validity && element.validity.badInput;\n\nconst getReflexElement = (args, element) => args[0] && args[0].nodeType === Node.ELEMENT_NODE ? args.shift() : element;\n\nconst getReflexOptions = args => {\n const options = {};\n if (args[0] && typeof args[0] === \"object\" && Object.keys(args[0]).filter((key => [ \"id\", \"attrs\", \"selectors\", \"reflexId\", \"resolveLate\", \"serializeForm\", \"suppressLogging\", \"includeInnerHTML\", \"includeTextContent\" ].includes(key))).length) {\n const opts = args.shift();\n Object.keys(opts).forEach((o => {\n if (o === \"reflexId\") {\n if (Deprecate.enabled) console.warn(\"reflexId option will be removed in v4. Use id instead.\");\n options[\"id\"] = opts[\"reflexId\"];\n } else options[o] = opts[o];\n }));\n }\n return options;\n};\n\nconst getReflexRoots = element => {\n let list = [];\n while (list.length === 0 && element) {\n let reflexRoot = element.getAttribute(Schema.reflexRoot);\n if (reflexRoot) {\n if (reflexRoot.length === 0 && element.id) reflexRoot = `#${element.id}`;\n const selectors = reflexRoot.split(\",\").filter((s => s.trim().length));\n if (Debug$1.enabled && selectors.length === 0) {\n console.error(`No value found for ${Schema.reflexRoot}. Add an #id to the element or provide a value for ${Schema.reflexRoot}.`, element);\n }\n list = list.concat(selectors.filter((s => document.querySelector(s))));\n }\n element = element.parentElement ? element.parentElement.closest(`[${Schema.reflexRoot}]`) : null;\n }\n return list;\n};\n\nconst reflexNameToControllerIdentifier = reflexName => reflexName.replace(/([a-z0–9])([A-Z])/g, \"$1-$2\").replace(/(::)/g, \"--\").replace(/-reflex$/gi, \"\").toLowerCase();\n\nconst stages = [ \"created\", \"before\", \"delivered\", \"queued\", \"after\", \"finalized\", \"success\", \"error\", \"halted\", \"forbidden\" ];\n\nlet lastReflex;\n\nconst reflexes = new Proxy({}, {\n get: function(target, prop) {\n if (stages.includes(prop)) return Object.fromEntries(Object.entries(target).filter((([_, reflex]) => reflex.stage === prop))); else if (prop === \"last\") return lastReflex; else if (prop === \"all\") return target;\n return Reflect.get(...arguments);\n },\n set: function(target, prop, value) {\n target[prop] = value;\n lastReflex = value;\n return true;\n }\n});\n\nconst invokeLifecycleMethod = (reflex, stage) => {\n const specificLifecycleMethod = reflex.controller[[ \"before\", \"after\", \"finalize\" ].includes(stage) ? `${stage}${camelize(reflex.action)}` : `${camelize(reflex.action, false)}${camelize(stage)}`];\n const genericLifecycleMethod = reflex.controller[[ \"before\", \"after\", \"finalize\" ].includes(stage) ? `${stage}Reflex` : `reflex${camelize(stage)}`];\n if (typeof specificLifecycleMethod === \"function\") {\n specificLifecycleMethod.call(reflex.controller, reflex.element, reflex.target, reflex.error, reflex.id, reflex.payload);\n }\n if (typeof genericLifecycleMethod === \"function\") {\n genericLifecycleMethod.call(reflex.controller, reflex.element, reflex.target, reflex.error, reflex.id, reflex.payload);\n }\n};\n\nconst dispatchLifecycleEvent = (reflex, stage) => {\n if (!reflex.controller.element.parentElement) {\n if (Debug$1.enabled && !reflex.warned) {\n console.warn(`StimulusReflex was not able execute callbacks or emit events for \"${stage}\" or later life-cycle stages for this Reflex. The StimulusReflex Controller Element is no longer present in the DOM. Could you move the StimulusReflex Controller to an element higher in your DOM?`);\n reflex.warned = true;\n }\n return;\n }\n reflex.stage = stage;\n reflex.lifecycle.push(stage);\n const event = `stimulus-reflex:${stage}`;\n const action = `${event}:${reflex.action}`;\n const detail = {\n reflex: reflex.target,\n controller: reflex.controller,\n id: reflex.id,\n element: reflex.element,\n payload: reflex.payload\n };\n const options = {\n bubbles: true,\n cancelable: false,\n detail: detail\n };\n reflex.controller.element.dispatchEvent(new CustomEvent(event, options));\n reflex.controller.element.dispatchEvent(new CustomEvent(action, options));\n if (window.jQuery) {\n window.jQuery(reflex.controller.element).trigger(event, detail);\n window.jQuery(reflex.controller.element).trigger(action, detail);\n }\n};\n\ndocument.addEventListener(\"stimulus-reflex:before\", (event => invokeLifecycleMethod(reflexes[event.detail.id], \"before\")), true);\n\ndocument.addEventListener(\"stimulus-reflex:queued\", (event => invokeLifecycleMethod(reflexes[event.detail.id], \"queued\")), true);\n\ndocument.addEventListener(\"stimulus-reflex:delivered\", (event => invokeLifecycleMethod(reflexes[event.detail.id], \"delivered\")), true);\n\ndocument.addEventListener(\"stimulus-reflex:success\", (event => {\n const reflex = reflexes[event.detail.id];\n invokeLifecycleMethod(reflex, \"success\");\n dispatchLifecycleEvent(reflex, \"after\");\n}), true);\n\ndocument.addEventListener(\"stimulus-reflex:nothing\", (event => dispatchLifecycleEvent(reflexes[event.detail.id], \"success\")), true);\n\ndocument.addEventListener(\"stimulus-reflex:error\", (event => {\n const reflex = reflexes[event.detail.id];\n invokeLifecycleMethod(reflex, \"error\");\n dispatchLifecycleEvent(reflex, \"after\");\n}), true);\n\ndocument.addEventListener(\"stimulus-reflex:halted\", (event => invokeLifecycleMethod(reflexes[event.detail.id], \"halted\")), true);\n\ndocument.addEventListener(\"stimulus-reflex:forbidden\", (event => invokeLifecycleMethod(reflexes[event.detail.id], \"forbidden\")), true);\n\ndocument.addEventListener(\"stimulus-reflex:after\", (event => invokeLifecycleMethod(reflexes[event.detail.id], \"after\")), true);\n\ndocument.addEventListener(\"stimulus-reflex:finalize\", (event => invokeLifecycleMethod(reflexes[event.detail.id], \"finalize\")), true);\n\nlet app = {};\n\nvar App = {\n get app() {\n return app;\n },\n set(application) {\n app = application;\n }\n};\n\nlet isolationMode = false;\n\nvar IsolationMode = {\n get disabled() {\n return !isolationMode;\n },\n set(value) {\n isolationMode = value;\n if (Deprecate.enabled && !isolationMode) {\n document.addEventListener(\"DOMContentLoaded\", (() => console.warn(\"Deprecation warning: the next version of StimulusReflex will standardize isolation mode, and the isolate option will be removed.\\nPlease update your applications to assume that every tab will be isolated. Use CableReady operations to broadcast updates to other tabs and users.\")), {\n once: true\n });\n }\n }\n};\n\nclass Reflex {\n constructor(data, controller) {\n this.data = data.valueOf();\n this.controller = controller;\n this.element = data.reflexElement;\n this.id = data.id;\n this.error = null;\n this.payload = null;\n this.stage = \"created\";\n this.lifecycle = [ \"created\" ];\n this.warned = false;\n this.target = data.target;\n this.action = data.target.split(\"#\")[1];\n this.selector = null;\n this.morph = null;\n this.operation = null;\n this.timestamp = new Date;\n this.cloned = false;\n }\n get getPromise() {\n const promise = new Promise(((resolve, reject) => {\n this.promise = {\n resolve: resolve,\n reject: reject,\n data: this.data\n };\n }));\n promise.id = this.id;\n Object.defineProperty(promise, \"reflexId\", {\n get() {\n if (Deprecate.enabled) console.warn(\"reflexId is deprecated and will be removed from v4. Use id instead.\");\n return this.id;\n }\n });\n promise.reflex = this;\n if (Debug$1.enabled) promise.catch((() => {}));\n return promise;\n }\n}\n\nconst received = data => {\n if (!data.cableReady) return;\n if (data.version.replace(\".pre\", \"-pre\").replace(\".rc\", \"-rc\") !== CableReady.version) {\n const mismatch = `CableReady failed to execute your reflex action due to a version mismatch between your gem and JavaScript version. Package versions must match exactly.\\n\\ncable_ready gem: ${data.version}\\ncable_ready npm: ${CableReady.version}`;\n console.error(mismatch);\n if (Debug$1.enabled) {\n CableReady.operations.stimulusReflexVersionMismatch({\n text: mismatch,\n level: \"error\"\n });\n }\n return;\n }\n let reflexOperations = [];\n for (let i = data.operations.length - 1; i >= 0; i--) {\n if (data.operations[i].stimulusReflex) {\n reflexOperations.push(data.operations[i]);\n data.operations.splice(i, 1);\n }\n }\n if (reflexOperations.some((operation => operation.stimulusReflex.url !== location.href))) {\n if (Debug$1.enabled) {\n console.error(\"Reflex failed due to mismatched URL.\");\n return;\n }\n }\n let reflexData;\n if (reflexOperations.length) {\n reflexData = reflexOperations[0].stimulusReflex;\n reflexData.payload = reflexOperations[0].payload;\n }\n if (reflexData) {\n const {id: id, payload: payload} = reflexData;\n let reflex;\n if (!reflexes[id] && IsolationMode.disabled) {\n const controllerElement = XPathToElement(reflexData.xpathController);\n const reflexElement = XPathToElement(reflexData.xpathElement);\n controllerElement.reflexController = controllerElement.reflexController || {};\n controllerElement.reflexData = controllerElement.reflexData || {};\n controllerElement.reflexError = controllerElement.reflexError || {};\n const controller = App.app.getControllerForElementAndIdentifier(controllerElement, reflexData.reflexController);\n controllerElement.reflexController[id] = controller;\n controllerElement.reflexData[id] = reflexData;\n reflex = new Reflex(reflexData, controller);\n reflexes[id] = reflex;\n reflex.cloned = true;\n reflex.element = reflexElement;\n controller.lastReflex = reflex;\n dispatchLifecycleEvent(reflex, \"before\");\n reflex.getPromise;\n } else {\n reflex = reflexes[id];\n }\n if (reflex) {\n reflex.payload = payload;\n reflex.totalOperations = reflexOperations.length;\n reflex.pendingOperations = reflexOperations.length;\n reflex.completedOperations = 0;\n reflex.piggybackOperations = data.operations;\n CableReady.perform(reflexOperations);\n }\n } else {\n if (data.operations.length && reflexes[data.operations[0].reflexId]) {\n CableReady.perform(data.operations);\n }\n }\n};\n\nlet consumer;\n\nlet params;\n\nlet subscription;\n\nlet active;\n\nconst initialize$1 = (consumerValue, paramsValue) => {\n consumer = consumerValue;\n params = paramsValue;\n document.addEventListener(\"DOMContentLoaded\", (() => {\n active = false;\n connectionStatusClass();\n if (Deprecate.enabled && consumerValue) console.warn(\"Deprecation warning: the next version of StimulusReflex will obtain a reference to consumer via the Stimulus application object.\\nPlease add 'application.consumer = consumer' to your index.js after your Stimulus application has been established, and remove the consumer key from your StimulusReflex initialize() options object.\");\n }));\n document.addEventListener(\"turbolinks:load\", connectionStatusClass);\n document.addEventListener(\"turbo:load\", connectionStatusClass);\n};\n\nconst subscribe = controller => {\n if (subscription) return;\n consumer = consumer || controller.application.consumer || createConsumer();\n const {channel: channel} = controller.StimulusReflex;\n const request = {\n channel: channel,\n ...params\n };\n const identifier = JSON.stringify(request);\n subscription = consumer.subscriptions.findAll(identifier)[0] || consumer.subscriptions.create(request, {\n received: received,\n connected: connected,\n rejected: rejected,\n disconnected: disconnected\n });\n};\n\nconst connected = () => {\n active = true;\n connectionStatusClass();\n emitEvent(\"stimulus-reflex:connected\");\n Object.values(reflexes.queued).forEach((reflex => {\n subscription.send(reflex.data);\n dispatchLifecycleEvent(reflex, \"delivered\");\n }));\n};\n\nconst rejected = () => {\n active = false;\n connectionStatusClass();\n emitEvent(\"stimulus-reflex:rejected\");\n if (Debug.enabled) console.warn(\"Channel subscription was rejected.\");\n};\n\nconst disconnected = willAttemptReconnect => {\n active = false;\n connectionStatusClass();\n emitEvent(\"stimulus-reflex:disconnected\", willAttemptReconnect);\n};\n\nconst deliver = reflex => {\n if (active) {\n subscription.send(reflex.data);\n dispatchLifecycleEvent(reflex, \"delivered\");\n } else dispatchLifecycleEvent(reflex, \"queued\");\n};\n\nconst connectionStatusClass = () => {\n const list = document.body.classList;\n if (!(list.contains(\"stimulus-reflex-connected\") || list.contains(\"stimulus-reflex-disconnected\"))) {\n list.add(active ? \"stimulus-reflex-connected\" : \"stimulus-reflex-disconnected\");\n return;\n }\n if (active) {\n list.replace(\"stimulus-reflex-disconnected\", \"stimulus-reflex-connected\");\n } else {\n list.replace(\"stimulus-reflex-connected\", \"stimulus-reflex-disconnected\");\n }\n};\n\nvar ActionCableTransport = {\n subscribe: subscribe,\n deliver: deliver,\n initialize: initialize$1\n};\n\nconst request = reflex => {\n if (Debug$1.disabled || reflex.data.suppressLogging) return;\n console.log(`↑ stimulus ↑ ${reflex.target}`, {\n id: reflex.id,\n args: reflex.data.args,\n controller: reflex.controller.identifier,\n element: reflex.element,\n controllerElement: reflex.controller.element\n });\n};\n\nconst success = reflex => {\n if (Debug$1.disabled || reflex.data.suppressLogging) return;\n const output = {\n id: reflex.id,\n morph: reflex.morph,\n payload: reflex.payload\n };\n if (reflex.operation !== \"dispatch_event\") output.operation = reflex.operation;\n console.log(`↓ reflex ↓ ${reflex.target} → ${reflex.selector || \"∞\"}${progress(reflex)} ${duration(reflex)}`, output);\n};\n\nconst halted$1 = reflex => {\n if (Debug$1.disabled || reflex.data.suppressLogging) return;\n console.log(`↓ reflex ↓ ${reflex.target} ${duration(reflex)} %cHALTED`, \"color: #ffa500;\", {\n id: reflex.id,\n payload: reflex.payload\n });\n};\n\nconst forbidden$1 = reflex => {\n if (Debug$1.disabled || reflex.data.suppressLogging) return;\n console.log(`↓ reflex ↓ ${reflex.target} ${duration(reflex)} %cFORBIDDEN`, \"color: #BF40BF;\", {\n id: reflex.id,\n payload: reflex.payload\n });\n};\n\nconst error$1 = reflex => {\n if (Debug$1.disabled || reflex.data.suppressLogging) return;\n console.log(`↓ reflex ↓ ${reflex.target} ${duration(reflex)} %cERROR: ${reflex.error}`, \"color: #f00;\", {\n id: reflex.id,\n payload: reflex.payload\n });\n};\n\nconst duration = reflex => !reflex.cloned ? `in ${new Date - reflex.timestamp}ms` : \"CLONED\";\n\nconst progress = reflex => reflex.totalOperations > 1 ? ` ${reflex.completedOperations}/${reflex.totalOperations}` : \"\";\n\nvar Log = {\n request: request,\n success: success,\n halted: halted$1,\n forbidden: forbidden$1,\n error: error$1\n};\n\nconst multipleInstances = element => {\n if ([ \"checkbox\", \"radio\" ].includes(element.type)) {\n return document.querySelectorAll(`input[type=\"${element.type}\"][name=\"${element.name}\"]`).length > 1;\n }\n return false;\n};\n\nconst collectCheckedOptions = element => Array.from(element.querySelectorAll(\"option:checked\")).concat(Array.from(document.querySelectorAll(`input[type=\"${element.type}\"][name=\"${element.name}\"]`)).filter((elem => elem.checked))).map((o => o.value));\n\nconst attributeValue = (values = []) => {\n const value = Array.from(new Set(values.filter((v => v && String(v).length)).map((v => v.trim())))).join(\" \").trim();\n return value.length > 0 ? value : null;\n};\n\nconst attributeValues = value => {\n if (!value) return [];\n if (!value.length) return [];\n return value.split(\" \").filter((v => v.trim().length));\n};\n\nconst extractElementAttributes = element => {\n let attrs = Array.from(element.attributes).reduce(((memo, attr) => {\n memo[attr.name] = attr.value;\n return memo;\n }), {});\n attrs.checked = !!element.checked;\n attrs.selected = !!element.selected;\n attrs.tag_name = element.tagName;\n if (element.tagName.match(/select/i) || multipleInstances(element)) {\n const collectedOptions = collectCheckedOptions(element);\n attrs.values = collectedOptions;\n attrs.value = collectedOptions.join(\",\");\n } else {\n attrs.value = element.value;\n }\n return attrs;\n};\n\nconst getElementsFromTokens = (element, tokens) => {\n if (!tokens || tokens.length === 0) return [];\n let elements = [ element ];\n const xPath = elementToXPath(element);\n tokens.forEach((token => {\n try {\n switch (token) {\n case \"combined\":\n if (Deprecate.enabled) console.warn(\"In the next version of StimulusReflex, the 'combined' option to data-reflex-dataset will become 'ancestors'.\");\n elements = [ ...elements, ...XPathToArray(`${xPath}/ancestor::*`, true) ];\n break;\n\n case \"ancestors\":\n elements = [ ...elements, ...XPathToArray(`${xPath}/ancestor::*`, true) ];\n break;\n\n case \"parent\":\n elements = [ ...elements, ...XPathToArray(`${xPath}/parent::*`) ];\n break;\n\n case \"siblings\":\n elements = [ ...elements, ...XPathToArray(`${xPath}/preceding-sibling::*|${xPath}/following-sibling::*`) ];\n break;\n\n case \"children\":\n elements = [ ...elements, ...XPathToArray(`${xPath}/child::*`) ];\n break;\n\n case \"descendants\":\n elements = [ ...elements, ...XPathToArray(`${xPath}/descendant::*`) ];\n break;\n\n default:\n elements = [ ...elements, ...document.querySelectorAll(token) ];\n }\n } catch (error) {\n if (Debug$1.enabled) console.error(error);\n }\n }));\n return elements;\n};\n\nconst extractElementDataset = element => {\n const dataset = element.attributes[Schema.reflexDataset];\n const allDataset = element.attributes[Schema.reflexDatasetAll];\n const tokens = dataset && dataset.value.split(\" \") || [];\n const allTokens = allDataset && allDataset.value.split(\" \") || [];\n const datasetElements = getElementsFromTokens(element, tokens);\n const datasetAllElements = getElementsFromTokens(element, allTokens);\n const datasetAttributes = datasetElements.reduce(((acc, ele) => ({\n ...extractDataAttributes(ele),\n ...acc\n })), {});\n const reflexElementAttributes = extractDataAttributes(element);\n const elementDataset = {\n dataset: {\n ...reflexElementAttributes,\n ...datasetAttributes\n },\n datasetAll: {}\n };\n datasetAllElements.forEach((element => {\n const elementAttributes = extractDataAttributes(element);\n Object.keys(elementAttributes).forEach((key => {\n const value = elementAttributes[key];\n if (elementDataset.datasetAll[key] && Array.isArray(elementDataset.datasetAll[key])) {\n elementDataset.datasetAll[key].push(value);\n } else {\n elementDataset.datasetAll[key] = [ value ];\n }\n }));\n }));\n return elementDataset;\n};\n\nconst extractDataAttributes = element => {\n let attrs = {};\n if (element && element.attributes) {\n Array.from(element.attributes).forEach((attr => {\n if (attr.name.startsWith(\"data-\")) {\n attrs[attr.name] = attr.value;\n }\n }));\n }\n return attrs;\n};\n\nvar name = \"stimulus_reflex\";\n\nvar version = \"3.5.2\";\n\nvar description = \"Build reactive applications with the Rails tooling you already know and love.\";\n\nvar keywords = [ \"ruby\", \"rails\", \"websockets\", \"actioncable\", \"turbolinks\", \"reactive\", \"cable\", \"ujs\", \"ssr\", \"stimulus\", \"reflex\", \"stimulus_reflex\", \"dom\", \"morphdom\" ];\n\nvar homepage = \"https://docs.stimulusreflex.com\";\n\nvar bugs = \"https://github.com/stimulusreflex/stimulus_reflex/issues\";\n\nvar repository = \"https://github.com/stimulusreflex/stimulus_reflex\";\n\nvar license = \"MIT\";\n\nvar author = \"Nathan Hopkins \";\n\nvar contributors = [ \"Andrew Mason \", \"Julian Rubisch \", \"Marco Roth \", \"Nathan Hopkins \" ];\n\nvar main = \"./dist/stimulus_reflex.js\";\n\nvar module = \"./dist/stimulus_reflex.js\";\n\nvar browser = \"./dist/stimulus_reflex.js\";\n\nvar unpkg = \"./dist/stimulus_reflex.umd.js\";\n\nvar umd = \"./dist/stimulus_reflex.umd.js\";\n\nvar files = [ \"dist/*\", \"javascript/*\" ];\n\nvar scripts = {\n lint: \"yarn run format --check\",\n format: \"yarn run prettier-standard ./javascript/**/*.js rollup.config.mjs\",\n build: \"yarn rollup -c\",\n \"build:watch\": \"yarn rollup -wc\",\n watch: \"yarn build:watch\",\n test: \"web-test-runner javascript/test/**/*.test.js\",\n \"test:watch\": \"yarn test --watch\",\n \"docs:dev\": \"vitepress dev docs\",\n \"docs:build\": \"vitepress build docs && cp docs/_redirects docs/.vitepress/dist\",\n \"docs:preview\": \"vitepress preview docs\"\n};\n\nvar peerDependencies = {\n \"@hotwired/stimulus\": \">= 3.0\"\n};\n\nvar dependencies = {\n \"@hotwired/stimulus\": \"^3\",\n \"@rails/actioncable\": \"^6 || ^7\",\n cable_ready: \"^5.0.5\"\n};\n\nvar devDependencies = {\n \"@open-wc/testing\": \"^3.1.7\",\n \"@rollup/plugin-json\": \"^6.0.0\",\n \"@rollup/plugin-node-resolve\": \"^15.0.1\",\n \"@rollup/plugin-terser\": \"^0.4.0\",\n \"@web/dev-server-esbuild\": \"^0.3.3\",\n \"@web/dev-server-rollup\": \"^0.3.21\",\n \"@web/test-runner\": \"^0.15.1\",\n \"prettier-standard\": \"^16.4.1\",\n rollup: \"^3.19.1\",\n \"toastify-js\": \"^1.12.0\",\n vitepress: \"^1.0.0-beta.1\"\n};\n\nvar packageInfo = {\n name: name,\n version: version,\n description: description,\n keywords: keywords,\n homepage: homepage,\n bugs: bugs,\n repository: repository,\n license: license,\n author: author,\n contributors: contributors,\n main: main,\n module: module,\n browser: browser,\n import: \"./dist/stimulus_reflex.js\",\n unpkg: unpkg,\n umd: umd,\n files: files,\n scripts: scripts,\n peerDependencies: peerDependencies,\n dependencies: dependencies,\n devDependencies: devDependencies\n};\n\nclass ReflexData {\n constructor(options, reflexElement, controllerElement, reflexController, permanentAttributeName, target, args, url, tabId) {\n this.options = options;\n this.reflexElement = reflexElement;\n this.controllerElement = controllerElement;\n this.reflexController = reflexController;\n this.permanentAttributeName = permanentAttributeName;\n this.target = target;\n this.args = args;\n this.url = url;\n this.tabId = tabId;\n }\n get attrs() {\n this._attrs = this._attrs || this.options[\"attrs\"] || extractElementAttributes(this.reflexElement);\n return this._attrs;\n }\n get id() {\n this._id = this._id || this.options[\"id\"] || uuidv4();\n return this._id;\n }\n get selectors() {\n this._selectors = this._selectors || this.options[\"selectors\"] || getReflexRoots(this.reflexElement);\n return typeof this._selectors === \"string\" ? [ this._selectors ] : this._selectors;\n }\n get resolveLate() {\n return this.options[\"resolveLate\"] || false;\n }\n get dataset() {\n this._dataset = this._dataset || extractElementDataset(this.reflexElement);\n return this._dataset;\n }\n get innerHTML() {\n return this.includeInnerHtml ? this.reflexElement.innerHTML : \"\";\n }\n get textContent() {\n return this.includeTextContent ? this.reflexElement.textContent : \"\";\n }\n get xpathController() {\n return elementToXPath(this.controllerElement);\n }\n get xpathElement() {\n return elementToXPath(this.reflexElement);\n }\n get formSelector() {\n const attr = this.reflexElement.attributes[Schema.reflexFormSelector] ? this.reflexElement.attributes[Schema.reflexFormSelector].value : undefined;\n return this.options[\"formSelector\"] || attr;\n }\n get includeInnerHtml() {\n const attr = this.reflexElement.attributes[Schema.reflexIncludeInnerHtml] || false;\n return this.options[\"includeInnerHTML\"] || attr ? attr.value !== \"false\" : false;\n }\n get includeTextContent() {\n const attr = this.reflexElement.attributes[Schema.reflexIncludeTextContent] || false;\n return this.options[\"includeTextContent\"] || attr ? attr.value !== \"false\" : false;\n }\n get suppressLogging() {\n return this.options[\"suppressLogging\"] || this.reflexElement.attributes[Schema.reflexSuppressLogging] || false;\n }\n valueOf() {\n return {\n attrs: this.attrs,\n dataset: this.dataset,\n selectors: this.selectors,\n id: this.id,\n resolveLate: this.resolveLate,\n suppressLogging: this.suppressLogging,\n xpathController: this.xpathController,\n xpathElement: this.xpathElement,\n inner_html: this.innerHTML,\n text_content: this.textContent,\n formSelector: this.formSelector,\n reflexController: this.reflexController,\n permanentAttributeName: this.permanentAttributeName,\n target: this.target,\n args: this.args,\n url: this.url,\n tabId: this.tabId,\n version: packageInfo.version\n };\n }\n}\n\nlet transport = {};\n\nvar Transport = {\n get plugin() {\n return transport;\n },\n set(newTransport) {\n transport = newTransport;\n }\n};\n\nconst beforeDOMUpdate = event => {\n const {stimulusReflex: stimulusReflex} = event.detail || {};\n if (!stimulusReflex) return;\n const reflex = reflexes[stimulusReflex.id];\n reflex.pendingOperations--;\n if (reflex.pendingOperations > 0) return;\n if (!stimulusReflex.resolveLate) setTimeout((() => reflex.promise.resolve({\n element: reflex.element,\n event: event,\n data: reflex.data,\n payload: reflex.payload,\n id: reflex.id,\n toString: () => \"\"\n })));\n setTimeout((() => dispatchLifecycleEvent(reflex, \"success\")));\n};\n\nconst afterDOMUpdate = event => {\n const {stimulusReflex: stimulusReflex} = event.detail || {};\n if (!stimulusReflex) return;\n const reflex = reflexes[stimulusReflex.id];\n reflex.completedOperations++;\n reflex.selector = event.detail.selector;\n reflex.morph = event.detail.stimulusReflex.morph;\n reflex.operation = event.type.split(\":\")[1].split(\"-\").slice(1).join(\"_\");\n Log.success(reflex);\n if (reflex.completedOperations < reflex.totalOperations) return;\n if (stimulusReflex.resolveLate) setTimeout((() => reflex.promise.resolve({\n element: reflex.element,\n event: event,\n data: reflex.data,\n payload: reflex.payload,\n id: reflex.id,\n toString: () => \"\"\n })));\n setTimeout((() => dispatchLifecycleEvent(reflex, \"finalize\")));\n if (reflex.piggybackOperations.length) CableReady.perform(reflex.piggybackOperations);\n};\n\nconst routeReflexEvent = event => {\n const {stimulusReflex: stimulusReflex, name: name} = event.detail || {};\n const eventType = name.split(\"-\")[2];\n const eventTypes = {\n nothing: nothing,\n halted: halted,\n forbidden: forbidden,\n error: error\n };\n if (!stimulusReflex || !Object.keys(eventTypes).includes(eventType)) return;\n const reflex = reflexes[stimulusReflex.id];\n reflex.completedOperations++;\n reflex.pendingOperations--;\n reflex.selector = event.detail.selector;\n reflex.morph = event.detail.stimulusReflex.morph;\n reflex.operation = event.type.split(\":\")[1].split(\"-\").slice(1).join(\"_\");\n if (eventType === \"error\") reflex.error = event.detail.error;\n eventTypes[eventType](reflex, event);\n setTimeout((() => dispatchLifecycleEvent(reflex, eventType)));\n if (reflex.piggybackOperations.length) CableReady.perform(reflex.piggybackOperations);\n};\n\nconst nothing = (reflex, event) => {\n Log.success(reflex);\n setTimeout((() => reflex.promise.resolve({\n data: reflex.data,\n element: reflex.element,\n event: event,\n payload: reflex.payload,\n id: reflex.id,\n toString: () => \"\"\n })));\n};\n\nconst halted = (reflex, event) => {\n Log.halted(reflex, event);\n setTimeout((() => reflex.promise.resolve({\n data: reflex.data,\n element: reflex.element,\n event: event,\n payload: reflex.payload,\n id: reflex.id,\n toString: () => \"\"\n })));\n};\n\nconst forbidden = (reflex, event) => {\n Log.forbidden(reflex, event);\n setTimeout((() => reflex.promise.resolve({\n data: reflex.data,\n element: reflex.element,\n event: event,\n payload: reflex.payload,\n id: reflex.id,\n toString: () => \"\"\n })));\n};\n\nconst error = (reflex, event) => {\n Log.error(reflex, event);\n setTimeout((() => reflex.promise.reject({\n data: reflex.data,\n element: reflex.element,\n event: event,\n payload: reflex.payload,\n id: reflex.id,\n error: reflex.error,\n toString: () => reflex.error\n })));\n};\n\nconst localReflexControllers = element => {\n const potentialIdentifiers = attributeValues(element.getAttribute(Schema.controller));\n const potentialControllers = potentialIdentifiers.map((identifier => App.app.getControllerForElementAndIdentifier(element, identifier)));\n return potentialControllers.filter((controller => controller && controller.StimulusReflex));\n};\n\nconst allReflexControllers = element => {\n let controllers = [];\n while (element) {\n controllers = controllers.concat(localReflexControllers(element));\n element = element.parentElement;\n }\n return controllers;\n};\n\nconst findControllerByReflexName = (reflexName, controllers) => {\n const controller = controllers.find((controller => {\n if (!controller || !controller.identifier) return;\n const identifier = reflexNameToControllerIdentifier(extractReflexName(reflexName));\n return identifier === controller.identifier;\n }));\n return controller;\n};\n\nconst scanForReflexes = debounce((() => {\n const reflexElements = document.querySelectorAll(`[${Schema.reflex}]`);\n reflexElements.forEach((element => scanForReflexesOnElement(element)));\n}), 20);\n\nconst scanForReflexesOnElement = (element, controller = null) => {\n const controllerAttribute = element.getAttribute(Schema.controller);\n const controllers = attributeValues(controllerAttribute).filter((controller => controller !== \"stimulus-reflex\"));\n const reflexAttribute = element.getAttribute(Schema.reflex);\n const reflexAttributeNames = attributeValues(reflexAttribute);\n const actionAttribute = element.getAttribute(Schema.action);\n const actions = attributeValues(actionAttribute).filter((action => !action.includes(\"#__perform\")));\n reflexAttributeNames.forEach((reflexName => {\n const potentialControllers = [ controller ].concat(allReflexControllers(element));\n controller = findControllerByReflexName(reflexName, potentialControllers);\n const controllerName = controller ? controller.identifier : \"stimulus-reflex\";\n actions.push(`${reflexName.split(\"->\")[0]}->${controllerName}#__perform`);\n const parentControllerElement = element.closest(`[data-controller~=${controllerName}]`);\n const elementPreviouslyHadStimulusReflexController = element === parentControllerElement && controllerName === \"stimulus-reflex\";\n if (!parentControllerElement || elementPreviouslyHadStimulusReflexController) {\n controllers.push(controllerName);\n }\n }));\n const controllerValue = attributeValue(controllers);\n const actionValue = attributeValue(actions);\n let emitReadyEvent = false;\n if (controllerValue && element.getAttribute(Schema.controller) != controllerValue) {\n element.setAttribute(Schema.controller, controllerValue);\n emitReadyEvent = true;\n }\n if (actionValue && element.getAttribute(Schema.action) != actionValue) {\n element.setAttribute(Schema.action, actionValue);\n emitReadyEvent = true;\n }\n if (emitReadyEvent) {\n dispatch(element, \"stimulus-reflex:ready\", {\n reflex: reflexAttribute,\n controller: controllerValue,\n action: actionValue,\n element: element\n });\n }\n};\n\nclass StimulusReflexController extends Controller {\n constructor(...args) {\n super(...args);\n register(this);\n }\n}\n\nconst tabId = uuidv4();\n\nconst initialize = (application, {controller: controller, consumer: consumer, debug: debug, params: params, isolate: isolate, deprecate: deprecate, transport: transport} = {}) => {\n Transport.set(transport || ActionCableTransport);\n Transport.plugin.initialize(consumer, params);\n IsolationMode.set(!!isolate);\n App.set(application);\n Schema.set(application);\n App.app.register(\"stimulus-reflex\", controller || StimulusReflexController);\n Debug$1.set(!!debug);\n if (typeof deprecate !== \"undefined\") Deprecate.set(deprecate);\n const observer = new MutationObserver(scanForReflexes);\n observer.observe(document.documentElement, {\n attributeFilter: [ Schema.reflex, Schema.action ],\n childList: true,\n subtree: true\n });\n emitEvent(\"stimulus-reflex:initialized\");\n};\n\nconst register = (controller, options = {}) => {\n const channel = \"StimulusReflex::Channel\";\n controller.StimulusReflex = {\n ...options,\n channel: channel\n };\n Transport.plugin.subscribe(controller);\n Object.assign(controller, {\n stimulate() {\n const url = location.href;\n const controllerElement = this.element;\n const args = Array.from(arguments);\n const target = args.shift() || \"StimulusReflex::Reflex#default_reflex\";\n const reflexElement = getReflexElement(args, controllerElement);\n if (elementInvalid(reflexElement)) {\n if (Debug$1.enabled) console.warn(\"Reflex aborted: invalid numeric input\");\n return;\n }\n const options = getReflexOptions(args);\n const reflexData = new ReflexData(options, reflexElement, controllerElement, this.identifier, Schema.reflexPermanent, target, args, url, tabId);\n const id = reflexData.id;\n controllerElement.reflexController = controllerElement.reflexController || {};\n controllerElement.reflexData = controllerElement.reflexData || {};\n controllerElement.reflexError = controllerElement.reflexError || {};\n controllerElement.reflexController[id] = this;\n controllerElement.reflexData[id] = reflexData.valueOf();\n const reflex = new Reflex(reflexData, this);\n reflexes[id] = reflex;\n this.lastReflex = reflex;\n dispatchLifecycleEvent(reflex, \"before\");\n setTimeout((() => {\n const {params: params} = controllerElement.reflexData[id] || {};\n const check = reflexElement.attributes[Schema.reflexSerializeForm];\n if (check) {\n options[\"serializeForm\"] = check.value !== \"false\";\n }\n const form = reflexElement.closest(reflexData.formSelector) || document.querySelector(reflexData.formSelector) || reflexElement.closest(\"form\");\n if (Deprecate.enabled && options[\"serializeForm\"] === undefined && form) console.warn(`Deprecation warning: the next version of StimulusReflex will not serialize forms by default.\\nPlease set ${Schema.reflexSerializeForm}=\"true\" on your Reflex Controller Element or pass { serializeForm: true } as an option to stimulate.`);\n const formData = options[\"serializeForm\"] === false ? \"\" : serializeForm(form, {\n element: reflexElement\n });\n reflex.data = {\n ...reflexData.valueOf(),\n params: params,\n formData: formData\n };\n controllerElement.reflexData[id] = reflex.data;\n Transport.plugin.deliver(reflex);\n }));\n Log.request(reflex);\n return reflex.getPromise;\n },\n __perform(event) {\n let element = event.target;\n let reflex;\n while (element && !reflex) {\n reflex = element.getAttribute(Schema.reflex);\n if (!reflex || !reflex.trim().length) element = element.parentElement;\n }\n const match = attributeValues(reflex).find((reflex => reflex.split(\"->\")[0] === event.type));\n if (match) {\n event.preventDefault();\n event.stopPropagation();\n this.stimulate(match.split(\"->\")[1], element);\n }\n }\n });\n if (!controller.reflexes) Object.defineProperty(controller, \"reflexes\", {\n get() {\n return new Proxy(reflexes, {\n get: function(target, prop) {\n if (prop === \"last\") return this.lastReflex;\n return Object.fromEntries(Object.entries(target[prop]).filter((([_, reflex]) => reflex.controller === this)));\n }.bind(this)\n });\n }\n });\n scanForReflexesOnElement(controller.element, controller);\n emitEvent(\"stimulus-reflex:controller-registered\", {\n detail: {\n controller: controller\n }\n });\n};\n\nconst useReflex = (controller, options = {}) => {\n register(controller, options);\n};\n\ndocument.addEventListener(\"cable-ready:after-dispatch-event\", routeReflexEvent);\n\ndocument.addEventListener(\"cable-ready:before-inner-html\", beforeDOMUpdate);\n\ndocument.addEventListener(\"cable-ready:before-morph\", beforeDOMUpdate);\n\ndocument.addEventListener(\"cable-ready:after-inner-html\", afterDOMUpdate);\n\ndocument.addEventListener(\"cable-ready:after-morph\", afterDOMUpdate);\n\ndocument.addEventListener(\"readystatechange\", (() => {\n if (document.readyState === \"complete\") {\n scanForReflexes();\n }\n}));\n\nvar StimulusReflex = Object.freeze({\n __proto__: null,\n StimulusReflexController: StimulusReflexController,\n initialize: initialize,\n reflexes: reflexes,\n register: register,\n scanForReflexes: scanForReflexes,\n scanForReflexesOnElement: scanForReflexesOnElement,\n useReflex: useReflex\n});\n\nconst global = {\n version: packageInfo.version,\n ...StimulusReflex,\n get debug() {\n return Debug$1.value;\n },\n set debug(value) {\n Debug$1.set(!!value);\n },\n get deprecate() {\n return Deprecate.value;\n },\n set deprecate(value) {\n Deprecate.set(!!value);\n }\n};\n\nwindow.StimulusReflex = global;\n\nexport { StimulusReflexController, global as default, initialize, reflexes, register, scanForReflexes, scanForReflexesOnElement, useReflex };\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v0.7.38\n Copyright © 2012-2021 Faisal Salman \n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '0.7.38',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 500;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n OPERA = 'Opera',\n SAMSUNG = 'Samsung',\n SHARP = 'Sharp',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook',\n CHROMIUM_OS = 'Chromium OS',\n MAC_OS = 'Mac OS';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bop(?:rg)?x\\/([\\w\\.]+)/i // Opera GX\n ], [VERSION, [NAME, OPERA+' GX']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i // Baidu\n ], [VERSION, [NAME, 'Baidu']], [\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant|iemobile|slim)\\s?(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(heytap|ovi)browser\\/([\\d\\.]+)/i, // Heytap/Ovi\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /\\bddg\\/([\\w\\.]+)/i // DuckDuckGo\n ], [VERSION, [NAME, 'DuckDuckGo']], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /microm.+\\bqbcore\\/([\\w\\.]+)/i, // WeChat Desktop for Windows Built-in Browser\n /\\bqbcore\\/([\\w\\.]+).+microm/i,\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /ya(?:search)?browser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /slbrowser\\/([\\w\\.]+)/i // Smart Lenovo Browser\n ], [VERSION, [NAME, 'Smart Lenovo '+BROWSER]], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ], [[NAME, '360 ' + BROWSER]], [\n /(oculus|sailfish|huawei|vivo)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 ' + BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser\n /samsungbrowser\\/([\\w\\.]+)/i // Samsung Internet\n ], [VERSION, [NAME, SAMSUNG + ' Internet']], [\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /metasr[\\/ ]?([\\d\\.]+)/i // Sogou Explorer\n ], [VERSION, [NAME, 'Sogou Explorer']], [\n /(sogou)mo\\w+\\/([\\d\\.]+)/i // Sogou Mobile\n ], [[NAME, 'Sogou Mobile'], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/2345 Browser\n ], [NAME, VERSION], [\n /(lbbrowser)/i, // LieBao Browser\n /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n ], [NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /(Klarna)\\/([\\w\\.]+)/i, // Klarna Shopping Browser for iOS & Android\n /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i, // Kakao App\n /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i, // Naver InApp\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(alipay)client\\/([\\w\\.]+)/i, // Alipay\n /(twitter)(?:and| f.+e\\/([\\w\\.]+))/i, // Twitter\n /(chromium|instagram|snapchat)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram/Snapchat\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i // TikTok\n ], [VERSION, [NAME, 'TikTok']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i, // Links\n /panasonic;(viera)/i // Panasonic Viera\n ], [NAME, VERSION], [\n \n /(cobalt)\\/([\\w\\.]+)/i // Cobalt\n ], [NAME, [VERSION, /master.|lts./, \"\"]]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n /(macintosh);/i\n ], [MODEL, [VENDOR, APPLE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i, // Xiaomi Redmi 'numeric' models\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n /oid[^\\)]+; (2\\d{4}(283|rpbf)[cgl])( bui|\\))/i, // Redmi Pad\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n /\\b(opd2\\d{3}a?) bui/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, TABLET]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i, // Kindle Fire without Silk / Echo Show\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n \n // Ulefone\n /; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(kobo)\\s(ereader|touch)/i, // Kobo\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w+)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i,\n /(aquos-tv[\\w ]+)\\)/i // Sharp\n ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n /(bravia[\\w ]+)( bui|\\))/i // Sony\n ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n /(mitv-\\w{5}) bui/i // Xiaomi\n ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n /Hbbtv.*(technisat) (.*);/i // TechniSAT\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield) bui/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation [345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i // Apple Watch\n ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n /(quest( \\d| pro)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n /(aeobc)\\b/i // Echo Dot\n ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i, // iCab\n /\\b(libweb)/i\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i // Windows Phone\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /windows nt 6\\.2; (arm)/i, // Windows RT\n /windows[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i,\n /(?:win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[VERSION, strMapper, windowsVersionMap], [NAME, 'Windows']], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /(?:ios;fbsv\\/|iphone.+ios[\\/ ])([\\d\\.]+)/i,\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS\n ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i // watchOS\n ], [VERSION, [NAME, 'watchOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i // Chromium OS\n ], [[NAME, CHROMIUM_OS], VERSION],[\n\n // Smart TVs\n /panasonic;(viera)/i, // Panasonic Viera\n /(netrange)mmh/i, // Netrange\n /(nettv)\\/(\\d+\\.[\\w\\.]+)/i, // NetTV\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;\n var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);\n var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n var _isSelfNav = _navigator && _navigator.userAgent == _ua;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser[MAJOR] = majorize(_browser[VERSION]);\n // Brave-specific detection\n if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {\n _browser[NAME] = 'Brave';\n }\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {\n _device[TYPE] = MOBILE;\n }\n // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n if (_isSelfNav && _device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {\n _device[MODEL] = 'iPad';\n _device[TYPE] = TABLET;\n }\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n if (_isSelfNav && !_os[NAME] && _uach && _uach.platform && _uach.platform != 'Unknown') {\n _os[NAME] = _uach.platform \n .replace(/chrome os/i, CHROMIUM_OS)\n .replace(/macos/i, MAC_OS); // backward compatibility\n }\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n"],"names":["FetchResponse","constructor","response","this","statusCode","status","redirected","ok","unauthenticated","unprocessableEntity","authenticationURL","headers","get","contentType","replace","html","match","text","Promise","reject","Error","json","responseJson","responseText","isTurboStream","renderTurboStream","window","Turbo","renderStreamMessage","console","warn","RequestInterceptor","register","interceptor","reset","undefined","metaContent","name","element","document","head","querySelector","content","method","url","options","originalUrl","toString","perform","requestInterceptor","error","fetch","fetchOptions","location","href","addHeader","key","value","additionalHeaders","sameHostname","startsWith","URL","hostname","_","toUpperCase","body","formattedBody","signal","credentials","redirect","baseHeaders","Accept","accept","csrfToken","object","result","compact","Object","assign","cookies","cookie","split","prefix","encodeURIComponent","find","slice","join","decodeURIComponent","getCookie","FormData","File","type","responseKind","query","originalQuery","params","URLSearchParams","requestQuery","formData","reduce","entries","concat","searchParams","has","includes","delete","set","append","mergeEntries","length","bodyIsAString","prototype","call","JSON","stringify","async","post","patch","Cookies","ttl","domain","expires","cookieDomain","date","Date","setTime","getTime","toGMTString","escape","i","c","nameEQ","ca","charAt","substring","indexOf","unescape","config","urlPrefix","visitsUrl","eventsUrl","page","platform","useBeacon","startOnReady","trackVisits","visitParams","withCredentials","visitDuration","visitorDuration","ahoy","Ahoy","configure","hasOwnProperty","visitId","visitorId","track","callback","$","jQuery","Zepto","isReady","queue","canStringify","eventQueue","canTrackNow","trackNow","obj","keys","navigator","setCookie","destroyCookie","log","message","setReady","shift","matchesSelector","selector","matches","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","apply","parentElement","onEvent","eventName","addEventListener","e","matchedElement","target","generateId","r","Math","random","saveEventQueue","meta","CSRFProtection","xhr","token","setRequestHeader","sendRequest","data","success","ajax","dataType","beforeSend","xhrFields","XMLHttpRequest","header","open","onload","send","eventData","event","events","visit_token","visitor_token","trackEvent","ready","id","splice","trackEventNow","param","events_json","sendBeacon","serialize","pathname","presence","str","eventProperties","cleanObject","tag","tagName","toLowerCase","className","section","getClosestSection","parentNode","hasAttribute","getAttribute","createVisit","getVisitId","getVisitorId","landing_page","screen_width","screen","width","screen_height","height","js","referrer","push","getVisitToken","getVisitorToken","debug","enabled","properties","time","setTimeout","trackView","additionalProperties","title","propName","trackClicks","textContent","innerText","innerHTML","trim","trackSubmits","trackChanges","trackAll","parse","start","readyState","exports","hookCallback","some","hooks","arguments","setHookCallback","isArray","input","Array","isObject","hasOwnProp","a","b","isObjectEmpty","getOwnPropertyNames","k","isUndefined","isNumber","isDate","map","arr","fn","res","arrLen","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","m","_pf","isValid","flags","parsedParts","isNowValid","_d","isNaN","invalidWeekday","_strict","bigHour","isFrozen","_isValid","createInvalid","NaN","fun","t","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","arg","args","argLen","stack","deprecations","deprecateSimple","isFunction","Function","_config","_dayOfMonthOrdinalParseLenient","RegExp","_dayOfMonthOrdinalParse","source","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","now","output","_calendar","zeroFill","number","targetLength","forceSign","absNumber","abs","zerosToFill","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","func","localeData","removeFormattingTokens","makeFormatFunction","array","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","s","ss","mm","h","hh","d","dd","w","ww","M","MM","y","yy","relativeTime","withoutSuffix","string","isFuture","_relativeTime","pastFuture","diff","aliases","D","dates","days","day","weekdays","weekday","E","isoweekdays","isoweekday","DDD","dayofyears","dayofyear","hours","hour","ms","milliseconds","millisecond","minutes","minute","months","month","Q","quarters","quarter","seconds","second","gg","weekyears","weekyear","GG","isoweekyears","isoweekyear","weeks","week","W","isoweeks","isoweek","years","year","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","isoWeekday","dayOfYear","weekYear","isoWeekYear","isoWeek","getPrioritizedUnits","unitsObj","u","unit","priority","sort","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","match1to2NoLeadingZero","match1to2HasZero","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","isFinite","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","parseTwoDigitYear","parseInt","getSetYear","makeGetSet","getIsLeapYear","keepTime","set$1","isUTC","getUTCMilliseconds","getMilliseconds","getUTCSeconds","getSeconds","getUTCMinutes","getMinutes","getUTCHours","getHours","getUTCDate","getDate","getUTCDay","getDay","getUTCMonth","getMonth","getUTCFullYear","getFullYear","setUTCMilliseconds","setMilliseconds","setUTCSeconds","setSeconds","setUTCMinutes","setMinutes","setUTCHours","setHours","setUTCDate","setDate","setUTCFullYear","setFullYear","stringGet","stringSet","prioritized","prioritizedLen","mod","n","x","daysInMonth","modMonth","o","monthsShort","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","min","setUTCMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortP","longP","shortPieces","longPieces","mixedPieces","createDate","createUTCDate","UTC","firstWeekOffset","dow","doy","fwd","dayOfYearFromWeeks","resYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","add","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","j","next","loadLocale","isLocaleNameSane","oldLocale","module","_abbr","getSetGlobalLocale","values","getLocale","defineLocale","abbr","parentLocale","forEach","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","configFromString","createFromInputFallback","defaults","currentDateArray","nowValue","_useUTC","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","temp","weekdayOverflow","curWeek","createLocal","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","createFromConfig","prepareConfig","preparse","configFromInput","prototypeMin","other","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","duration","_milliseconds","_days","_data","_bubble","isDuration","absRound","round","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","cloneWithOffset","model","clone","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","tmp","isAdding","invalid","isString","String","isMomentInput","isNumberOrStringArray","isMomentInputObject","property","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","filter","item","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","toISOString","keepOffset","toDate","inspect","datetime","suffix","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","unix","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","erasName","erasAbbr","erasNarrow","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","parseZone","preParsePostFormat","Symbol","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","isDSTShifted","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","argWithSuffix","argThresholds","withSuffix","th","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","toIsoString","version","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","controller","methodName","composeEventName","eventPrefix","composedName","identifier","extendedEvent","detail","bubbles","cancelable","composed","originalEvent","CustomEvent","Controller","onlyVisible","dispatchEvent","useClickOutside","targetElement","contains","el","rect","getBoundingClientRect","top","left","bottom","innerHeight","documentElement","clientHeight","right","innerWidth","clientWidth","isElementInViewport","clickOutside","clickOutsideEvent","observe","unobserve","removeEventListener","controllerDisconnect","disconnect","bind","logger","StimulusUse","functionName","groupCollapsed","controllerId","groupEnd","application","stimulusUseDebug","dataset","controllerInitialize","initialize","controllerConnect","connect","UseDispatch","_b","_c","super","dispatch","eventNameWithPrefix","enhanceController","useDispatch","DebounceController","debounces","ThrottleController","trottles","adapters","WebSocket","messages","secondsSince","ConnectionMonitor","connection","visibilityDidChange","reconnectAttempts","isRunning","startedAt","stoppedAt","startPolling","staleThreshold","stop","stopPolling","recordPing","pingedAt","recordConnect","disconnectedAt","recordDisconnect","poll","clearTimeout","pollTimeout","reconnectIfStale","getPollInterval","reconnectionBackoffRate","connectionIsStale","refreshedAt","disconnectedRecently","reopen","visibilityState","isOpen","INTERNAL","message_types","welcome","ping","confirmation","rejection","disconnect_reasons","unauthorized","invalid_request","server_restart","remote","default_mount_path","protocols","supportedProtocols","Connection","consumer","subscriptions","monitor","disconnected","webSocket","isActive","getState","socketProtocols","subprotocols","uninstallEventHandlers","installEventHandlers","close","allowReconnect","reopenDelay","getProtocol","protocol","isState","triedToReconnect","isProtocolSupported","states","state","handler","reason","reconnect","reconnectAttempted","reload","confirmSubscription","notify","reconnected","notifyAll","willAttemptReconnect","Subscription","mixin","action","command","unsubscribe","remove","SubscriptionGuarantor","pendingSubscriptions","guarantee","subscription","startGuaranteeing","forget","stopGuaranteeing","retrySubscribing","retryTimeout","subscribe","Subscriptions","guarantor","create","channelName","channel","ensureActiveConnection","findAll","sendCommand","callbackName","Consumer","_url","createElement","createWebSocketURL","addSubProtocol","subprotocol","createConsumer","getConfig","Toastify","oldestFirst","node","destination","newWindow","gravity","positionLeft","position","backgroundColor","avatar","stopOnFocus","onClick","escapeMarkup","ariaLive","style","background","toastElement","_rootElement","_init","showToast","_buildToast","getElementById","HTMLElement","ShadowRoot","insertBefore","firstChild","_reposition","timeOutValue","_removeElement","hideToast","divElement","setAttribute","nodeType","Node","ELEMENT_NODE","appendChild","avatarElement","src","insertAdjacentElement","closeElement","stopPropagation","_getAxisOffsetAValue","xOffset","yOffset","transform","removeChild","classUsed","topLeftOffsetSize","topRightOffsetSize","offsetSize","allToasts","querySelectorAll","classList","offsetHeight","axis","setupToastify","styles","operations","stimulusReflexVersionMismatch","operation","info","color","level","deprecationWarnings","Deprecate","disabled","debugging","Debug$1","defaultSchema","reflexAttribute","reflexPermanentAttribute","reflexRootAttribute","reflexSuppressLoggingAttribute","reflexDatasetAttribute","reflexDatasetAllAttribute","reflexSerializeFormAttribute","reflexFormSelectorAttribute","reflexIncludeInnerHtmlAttribute","reflexIncludeTextContentAttribute","schema","Schema","attribute","attributeName","defineProperty","configurable","debounce","xpathToElement","xpathToElementArray","uuidv4","crypto","msCrypto","getRandomValues","Uint8Array","camelize","uppercaseFirstLetter","$1","XPathToElement","XPathToArray","emitEvent","elementToXPath","nodeName","ix","siblings","childNodes","sibling","stages","lastReflex","reflexes","Proxy","fromEntries","reflex","stage","Reflect","invokeLifecycleMethod","specificLifecycleMethod","genericLifecycleMethod","payload","dispatchLifecycleEvent","warned","lifecycle","trigger","app","App","isolationMode","IsolationMode","once","Reflex","reflexElement","morph","timestamp","cloned","getPromise","promise","resolve","catch","received","cableReady","mismatch","reflexData","reflexOperations","stimulusReflex","controllerElement","xpathController","xpathElement","reflexController","reflexError","getControllerForElementAndIdentifier","totalOperations","pendingOperations","completedOperations","piggybackOperations","reflexId","active","connected","connectionStatusClass","queued","rejected","Debug","list","ActionCableTransport","StimulusReflex","request","deliver","consumerValue","paramsValue","progress","Log","suppressLogging","attributeValue","Set","v","attributeValues","extractElementAttributes","attrs","attributes","memo","attr","checked","selected","tag_name","multipleInstances","collectedOptions","elem","collectCheckedOptions","getElementsFromTokens","elements","xPath","extractDataAttributes","packageInfo","ReflexData","permanentAttributeName","tabId","_attrs","_id","selectors","_selectors","reflexRoot","closest","getReflexRoots","resolveLate","_dataset","reflexDataset","allDataset","reflexDatasetAll","allTokens","datasetElements","datasetAllElements","datasetAttributes","acc","ele","elementDataset","datasetAll","elementAttributes","extractElementDataset","includeInnerHtml","includeTextContent","formSelector","reflexFormSelector","reflexIncludeInnerHtml","reflexIncludeTextContent","reflexSuppressLogging","inner_html","text_content","transport","Transport","plugin","newTransport","beforeDOMUpdate","afterDOMUpdate","nothing","halted","forbidden","localReflexControllers","scanForReflexes","scanForReflexesOnElement","controllerAttribute","controllers","reflexAttributeNames","actionAttribute","actions","reflexName","potentialControllers","allReflexControllers","reflexNameToControllerIdentifier","reflexString","extractReflexName","findControllerByReflexName","controllerName","parentControllerElement","controllerValue","actionValue","emitReadyEvent","StimulusReflexController","stimulate","getReflexElement","validity","badInput","opts","getReflexOptions","reflexPermanent","check","reflexSerializeForm","form","submitButton","serializeForm","__perform","preventDefault","eventType","eventTypes","freeze","__proto__","isolate","MutationObserver","attributeFilter","childList","subtree","useReflex","global","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MAJOR","MODEL","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","BROWSER","CHROME","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","FACEBOOK","CHROMIUM_OS","MAC_OS","enumerize","enums","str1","str2","lowerize","rgxMapper","ua","arrays","p","q","props","strMapper","windowsVersionMap","browser","cpu","device","engine","EDGE","os","UAParser","extensions","getResult","_navigator","_ua","userAgent","_uach","userAgentData","_rgxmap","mergedRegexes","_isSelfNav","getBrowser","_browser","brave","isBrave","getCPU","_cpu","getDevice","_device","mobile","standalone","maxTouchPoints","getEngine","_engine","getOS","_os","getUA","setUA","CPU","DEVICE","ENGINE","OS","parser"],"sourceRoot":""}