1 |
- {"ast":null,"code":"//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : global.moment = factory();\n})(this, function () {\n 'use strict';\n\n var hookCallback;\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 function isArray(input) {\n return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n }\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return input != null && Object.prototype.toString.call(input) === '[object Object]';\n }\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\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 function isUndefined(input) {\n return input === void 0;\n }\n function isNumber(input) {\n return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n }\n function isDate(input) {\n return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\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 function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n return a;\n }\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\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 function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\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 for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n return false;\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 = flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);\n if (m._strict) {\n isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && 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 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 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 function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\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 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 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 function isMoment(obj) {\n return obj instanceof Moment || obj != null && obj._isAMomentObject != null;\n }\n function warn(msg) {\n if (hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n function deprecate(msg, fn) {\n var firstTime = true;\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(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + new Error().stack);\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n var deprecations = {};\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 hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n function isFunction(input) {\n return typeof Function !== 'undefined' && input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\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((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + '|' + /\\d{1,2}/.source);\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 (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n var keys;\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 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 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 function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (sign ? forceSign ? '+' : '' : '-') + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n }\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([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(func.apply(this, arguments), token);\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 function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\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 return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i]) ? array[i].call(mom, format) : 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 format = expandFormat(format, m.localeData());\n formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n return formatFunctions[format](m);\n }\n function expandFormat(format, locale) {\n var i = 5;\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n return format;\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 function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n if (format || !formatUpper) {\n return format;\n }\n this._longDateFormat[key] = formatUpper.match(formattingTokens).map(function (tok) {\n if (tok === 'MMMM' || tok === 'MM' || tok === 'DD' || tok === 'dddd') {\n return tok.slice(1);\n }\n return tok;\n }).join('');\n return this._longDateFormat[key];\n }\n var defaultInvalidDate = 'Invalid date';\n function invalidDate() {\n return this._invalidDate;\n }\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\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 function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);\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 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 function normalizeUnits(units) {\n return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n }\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\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 return normalizedInput;\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 function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({\n unit: u,\n priority: priorities[u]\n });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n var match1 = /\\d/,\n // 0 - 9\n match2 = /\\d\\d/,\n // 00 - 99\n match3 = /\\d{3}/,\n // 000 - 999\n match4 = /\\d{4}/,\n // 0000 - 9999\n match6 = /[+-]?\\d{6}/,\n // -999999 - 999999\n match1to2 = /\\d\\d?/,\n // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/,\n // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/,\n // 99999 - 999999\n match1to3 = /\\d{1,3}/,\n // 0 - 999\n match1to4 = /\\d{1,4}/,\n // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/,\n // -999999 - 999999\n matchUnsigned = /\\d+/,\n // 0 - inf\n matchSigned = /[+-]?\\d+/,\n // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi,\n // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi,\n // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/,\n // 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 = /[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?/,\n // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/,\n // 0-99\n regexes;\n regexes = {};\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\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(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }));\n }\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\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 function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n return value;\n }\n var tokens = {};\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 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 function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n function isLeapYear(year) {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\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 addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\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 addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] = 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 function getIsLeapYear() {\n return isLeapYear(this.year());\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 function get(mom, unit) {\n if (!mom.isValid()) {\n return NaN;\n }\n var d = mom._d,\n isUTC = mom._isUTC;\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;\n // Just in case\n }\n }\n function set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n d = mom._d;\n isUTC = mom._isUTC;\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC ? d.setUTCMilliseconds(value) : 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;\n // See below ...\n default:\n return;\n // Just in case\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 ? d.setUTCFullYear(year, month, date) : 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 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 function mod(n, x) {\n return (n % x + x) % x;\n }\n var indexOf;\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 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 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\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 addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\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 = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n defaultLocaleMonthsShort = '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 function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months) ? this._months : this._months['standalone'];\n }\n return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n }\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\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(mom, '').toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\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 function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\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('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n }\n if (!strict && !this._monthsParse[i]) {\n regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n return i;\n } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\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 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 var month = value,\n date = mom.date();\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC ? mom._d.setUTCMonth(month, date) : mom._d.setMonth(month, date));\n return mom;\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 function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\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 ? this._monthsShortStrictRegex : this._monthsShortRegex;\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 ? this._monthsStrictRegex : this._monthsRegex;\n }\n }\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\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 this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\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 return date;\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 return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var\n // 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 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 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 return {\n year: resYear,\n dayOfYear: resDayOfYear\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 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 return {\n week: resWeek,\n year: resYear\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 addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\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 var defaultLocaleWeek = {\n dow: 0,\n // 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 function localeFirstDayOfWeek() {\n return this._week.dow;\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 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 addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\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 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 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 if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n return null;\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 var defaultLocaleWeekdays = '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 function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format) ? 'format' : 'standalone'];\n return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;\n }\n function localeWeekdaysShort(m) {\n return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n }\n function localeWeekdaysMin(m) {\n return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;\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 for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\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 function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\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('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n }\n if (!this._weekdaysParse[i]) {\n regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\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 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 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 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 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 ? this._weekdaysStrictRegex : this._weekdaysRegex;\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 ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\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 ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n }\n }\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\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 this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n function kFormat() {\n return this.hours() || 24;\n }\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n addFormatToken('hmmss', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n });\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n addFormatToken('Hmmss', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n });\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\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 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 addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\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 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 function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n week: defaultLocaleWeek,\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n meridiemParse: defaultLocaleMeridiemParse\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\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 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 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 (next && next.length >= j && commonPrefix(split, next) >= j - 1) {\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 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 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 (locales[name] === undefined && typeof module !== 'undefined' && module && module.exports && isLocaleNameSane(name)) {\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 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('Locale ' + key + ' not found. Did you forget to load it?');\n }\n }\n }\n return globalLocale._abbr;\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('defineLocaleOverride', 'use moment.updateLocale(localeName, config) to change ' + 'an existing locale. moment.defineLocale(localeName, ' + 'config) should only be used for creating a new locale ' + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\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 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 return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\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 if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n if (!key) {\n return globalLocale;\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 return chooseLocale(key);\n }\n function listLocales() {\n return keys(locales);\n }\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n if (a && getParsingFlags(m).overflow === -2) {\n overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;\n if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\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 getParsingFlags(m).overflow = overflow;\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 = /^\\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 = /^\\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 = [['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/], ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/], ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/], ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false], ['YYYY-DDD', /\\d{4}-\\d{3}/], ['YYYY-MM', /\\d{4}-\\d\\d/, false], ['YYYYYYMMDD', /[+-]\\d{10}/], ['YYYYMMDD', /\\d{8}/], ['GGGG[W]WWE', /\\d{4}W\\d{3}/], ['GGGG[W]WW', /\\d{4}W\\d{2}/, false], ['YYYYDDD', /\\d{7}/], ['YYYYMM', /\\d{6}/, false], ['YYYY', /\\d{4}/, false]],\n // iso time formats and regexes\n isoTimes = [['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/], ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/], ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/], ['HH:mm', /\\d\\d:\\d\\d/], ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/], ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/], ['HHmmss', /\\d\\d\\d\\d\\d\\d/], ['HHmm', /\\d\\d\\d\\d/], ['HH', /\\d\\d/]],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 = /^(?:(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 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 function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n var result = [untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10)];\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n return result;\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 function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s.replace(/\\([^()]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\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(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\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(match[4], match[3], match[2], match[5], match[6], match[7]);\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\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 configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n hooks.createFromInputFallback = deprecate('value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\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 function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\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 if (config._d) {\n return;\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 if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n getParsingFlags(config)._overflowDayOfYear = true;\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] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n expectedWeekday = config._useUTC ? config._d.getUTCDay() : 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 if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\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(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\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 curWeek = weekOfYear(createLocal(), dow, doy);\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\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 tokens = 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)) || [])[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(string.indexOf(parsedInput) + parsedInput.length);\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 = 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 (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {\n getParsingFlags(config).bigHour = undefined;\n }\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\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 configFromArray(config);\n checkOverflow(config);\n }\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\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 if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\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 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 getParsingFlags(tempConfig).score = currentScore;\n if (!bestFormatIsValid) {\n if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) {\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 extend(config, bestMoment || tempConfig);\n }\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map([i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n return obj && parseInt(obj, 10);\n });\n configFromArray(config);\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 return res;\n }\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n config._locale = config._locale || getLocale(config._l);\n if (input === null || format === undefined && input === '') {\n return createInvalid({\n nullInput: true\n });\n }\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\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 if (!isValid(config)) {\n config._d = null;\n }\n return config;\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 function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {\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 return createFromConfig(c);\n }\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n var prototypeMin = deprecate('moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', 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 prototypeMax = deprecate('moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', 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 // 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 return pickBy('isBefore', args);\n }\n function max() {\n var args = [].slice.call(arguments, 0);\n return pickBy('isAfter', args);\n }\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (hasOwnProp(m, key) && !(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n return false;\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 return true;\n }\n function isValid$1() {\n return this._isValid;\n }\n function createInvalid$1() {\n return createDuration(NaN);\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 this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds = +milliseconds + seconds * 1e3 +\n // 1000\n minutes * 6e4 +\n // 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 this._data = {};\n this._locale = getLocale();\n this._bubble();\n }\n function isDuration(obj) {\n return obj instanceof Duration;\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 (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {\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 sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2);\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 function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n if (matches === null) {\n return null;\n }\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\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 = (isMoment(input) || isDate(input) ? input.valueOf() : 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 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(this, createDuration(input - offset, 'm'), 1, false);\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 function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n this.utcOffset(input, keepLocalTime);\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\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 function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n return (this.utcOffset() - input) % 60 === 0;\n }\n function isDaylightSavingTime() {\n return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();\n }\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n var c = {},\n other;\n copyConfig(c, this);\n c = prepareConfig(c);\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n return this._isDSTShifted;\n }\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\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 = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\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 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 (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n ret = new Duration(duration);\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n return ret;\n }\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\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 function positiveMomentsDifference(base, other) {\n var res = {};\n res.months = other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n return res;\n }\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return {\n milliseconds: 0,\n 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 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(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n tmp = val;\n val = period;\n period = tmp;\n }\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\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 if (!mom.isValid()) {\n // No op\n return;\n }\n updateOffset = updateOffset == null ? true : updateOffset;\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 var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\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 isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === undefined;\n }\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = ['years', 'year', 'y', 'months', 'month', 'M', 'days', 'day', 'd', 'dates', 'date', 'D', 'hours', 'hour', 'h', 'minutes', 'minute', 'm', 'seconds', 'second', 's', 'milliseconds', 'millisecond', 'ms'],\n i,\n property,\n propertyLen = properties.length;\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n return objectTest && propertyTest;\n }\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest = input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = ['sameDay', 'nextDay', 'lastDay', 'nextWeek', 'lastWeek', 'sameElse'],\n i,\n property;\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n return objectTest && propertyTest;\n }\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse';\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 = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n }\n function clone() {\n return new Moment(this);\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 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 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 (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\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 this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n }\n }\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n if (!this.isValid()) {\n return NaN;\n }\n that = cloneWithOffset(input, this);\n if (!that.isValid()) {\n return NaN;\n }\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n units = normalizeUnits(units);\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;\n // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break;\n // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break;\n // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break;\n // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break;\n // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n return asFloat ? output : absFloor(output);\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 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 hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\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(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\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).toISOString().replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\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 return this.format(prefix + year + datetime + suffix);\n }\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n function from(time, withoutSuffix) {\n if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n return createDuration({\n to: this,\n from: time\n }).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n function to(time, withoutSuffix) {\n if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n return createDuration({\n from: this,\n to: time\n }).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\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 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 var lang = deprecate('moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n });\n function localeData() {\n return this._locale;\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 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 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 function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\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(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\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 this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\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 startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 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 += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 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 this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n function toDate() {\n return new Date(this.valueOf());\n }\n function toArray() {\n var m = this;\n return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\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 function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n function isValid$2() {\n return isValid(this);\n }\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n function invalidAt() {\n return getParsingFlags(this).overflow;\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 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 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 addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], 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 addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\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 if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\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 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 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 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 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 case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\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 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 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 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 return '';\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 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 return '';\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 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 return '';\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 if (eras[i].since <= val && val <= eras[i].until || eras[i].until <= val && val <= eras[i].since) {\n return (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset;\n }\n }\n return this.year();\n }\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\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 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 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 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('^(' + narrowPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\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 addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\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(this, input, this.week(), this.weekday() + this.localeData()._week.dow, this.localeData()._week.dow, this.localeData()._week.doy);\n }\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(this, input, this.isoWeek(), this.isoWeekday(), 1, 4);\n }\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\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 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 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 ? Math.ceil((this.month() + 1) / 3) : 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 ? locale._dayOfMonthOrdinalParse || locale._ordinalParse : locale._dayOfMonthOrdinalParseLenient;\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 = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 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 addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\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 var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\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 function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n var proto = Moment.prototype;\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('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n function preParsePostFormat(string) {\n return string;\n }\n var proto$1 = Locale.prototype;\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 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 proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\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 function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n format = format || '';\n if (index != null) {\n return get$1(format, index, field, 'month');\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 format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n format = format || '';\n }\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\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 function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n getSetGlobalLocale('en', {\n eras: [{\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD'\n }, {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC'\n }],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output = toInt(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n return number + output;\n }\n });\n\n // Side effect imports\n\n hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n var mathAbs = Math.abs;\n function abs() {\n var data = this._data;\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\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 return this;\n }\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\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 function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\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 (!(milliseconds >= 0 && days >= 0 && months >= 0 || milliseconds <= 0 && days <= 0 && months <= 0)) {\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 seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\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 data.days = days;\n data.months = months;\n data.years = years;\n return this;\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 function monthsToDays(months) {\n // the reverse of daysToMonths\n return months * 146097 / 4800;\n }\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n units = normalizeUnits(units);\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 function makeAs(alias) {\n return function () {\n return this.as(alias);\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 function clone$1() {\n return createDuration(this);\n }\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\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 function weeks() {\n return absFloor(this.days() / 7);\n }\n var round = Math.round,\n thresholds = {\n ss: 44,\n // a few seconds to seconds\n s: 45,\n // seconds to minute\n m: 45,\n // minutes to hour\n h: 22,\n // hours to day\n d: 26,\n // days to month/week\n w: null,\n // 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 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 = seconds <= thresholds.ss && ['s', seconds] || seconds < thresholds.s && ['ss', seconds] || minutes <= 1 && ['m'] || minutes < thresholds.m && ['mm', minutes] || hours <= 1 && ['h'] || hours < thresholds.h && ['hh', hours] || days <= 1 && ['d'] || days < thresholds.d && ['dd', days];\n if (thresholds.w != null) {\n a = a || weeks <= 1 && ['w'] || weeks < thresholds.w && ['ww', weeks];\n }\n a = a || months <= 1 && ['M'] || months < thresholds.M && ['MM', months] || years <= 1 && ['y'] || ['yy', years];\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 function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\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 locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n return locale.postformat(output);\n }\n var abs$1 = Math.abs;\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\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 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 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 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 return totalSign + 'P' + (years ? ymSign + years + 'Y' : '') + (months ? ymSign + months + 'M' : '') + (days ? daysSign + days + 'D' : '') + (hours || minutes || seconds ? 'T' : '') + (hours ? hmsSign + hours + 'H' : '') + (minutes ? hmsSign + minutes + 'M' : '') + (seconds ? hmsSign + s + 'S' : '');\n }\n var proto$2 = Duration.prototype;\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 proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\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 setHookCallback(createLocal);\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 // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',\n // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',\n // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD',\n // <input type=\"date\" />\n TIME: 'HH:mm',\n // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss',\n // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS',\n // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW',\n // <input type=\"week\" />\n MONTH: 'YYYY-MM' // <input type=\"month\" />\n };\n return hooks;\n});","map":{"version":3,"names":["global","factory","exports","module","define","amd","moment","hookCallback","hooks","apply","arguments","setHookCallback","callback","isArray","input","Array","Object","prototype","toString","call","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","obj","getOwnPropertyNames","length","k","isUndefined","isNumber","isDate","Date","map","arr","fn","res","i","arrLen","push","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","some","fun","t","len","isValid","flags","parsedParts","isNowValid","_d","isNaN","getTime","invalidWeekday","_strict","bigHour","undefined","isFrozen","_isValid","createInvalid","NaN","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","args","arg","key","argLen","slice","join","Error","stack","deprecations","deprecateSimple","name","isFunction","Function","set","_config","_dayOfMonthOrdinalParseLenient","RegExp","_dayOfMonthOrdinalParse","source","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","keys","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","now","output","_calendar","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","zerosToFill","sign","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","func","localeData","removeFormattingTokens","match","replace","makeFormatFunction","array","formatMoment","invalidDate","expandFormat","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","_longDateFormat","formatUpper","toUpperCase","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","date","days","day","e","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","toLowerCase","normalizeObjectUnits","inputObject","normalizedInput","normalizedProp","priorities","isoWeekday","dayOfYear","weekYear","isoWeekYear","isoWeek","getPrioritizedUnits","unitsObj","u","unit","priority","sort","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","match1to2NoLeadingZero","match1to2HasZero","regexes","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","value","isFinite","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","parseTwoDigitYear","parseInt","daysInYear","getSetYear","makeGetSet","getIsLeapYear","keepTime","set$1","get","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","indexOf","o","daysInMonth","modMonth","monthsShort","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","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","shortPieces","longPieces","mixedPieces","shortP","longP","createDate","createUTCDate","UTC","firstWeekOffset","dow","doy","fwd","fwdlw","dayOfYearFromWeeks","localWeekday","weekOffset","resYear","resDayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","add","getSetISOWeek","weekdaysMin","weekdaysShort","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","parseWeekday","parseIsoWeekday","shiftWeekdays","ws","concat","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","minPieces","minp","shortp","longp","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","localeIsPM","charAt","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","globalLocale","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","j","next","loadLocale","isLocaleNameSane","oldLocale","aliasedRequire","_abbr","require","getSetGlobalLocale","values","data","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","exec","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","result","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","weekdayProvided","weekdayActual","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","configFromString","createFromInputFallback","_useUTC","defaults","c","currentDateArray","nowValue","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","offsetFromString","chunkOffset","matcher","matches","chunk","parts","cloneWithOffset","model","clone","setTime","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","invalid","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","dur","tmp","isAdding","isString","String","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","properties","property","propertyLen","arrayTest","dataTypeTest","filter","item","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","time","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","anchor2","adjust","defaultFormat","defaultFormatUtc","toISOString","keepOffset","toDate","inspect","zone","prefix","datetime","suffix","inputString","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","matchEraAbbr","matchEraName","matchEraNarrow","erasParse","matchEraYearOrdinal","_eraYearOrdinalRegex","eraYearOrdinalParse","localeEras","eras","_eras","since","until","Infinity","localeErasParse","eraName","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","abbrPieces","namePieces","narrowPieces","erasName","erasAbbr","erasNarrow","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetSecond","getSetMillisecond","parseMs","getZoneAbbr","getZoneName","proto","Symbol","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseZone","isDST","zoneAbbr","zoneName","isDSTShifted","createUnix","createInZone","preParsePostFormat","proto$1","firstDayOfYear","firstDayOfWeek","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","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","assign","abs$1","toISOString$1","total","totalSign","ymSign","daysSign","hmsSign","toFixed","proto$2","toIsoString","version","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS"],"sources":["/Users/max_liu/max_liu/company/tools_auto_pt/node_modules/moment/moment.js"],"sourcesContent":["//! 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', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"script","externalDependencies":[]}
|