PageSourceSearch

https://digitalcountry.ua/sf/js/moment.js

js digitalcountry.ua collected 2026-09-29 09:03:42 UTC 541,363 bytes, 14,765 lines download raw bytes

1;(function (global, factory) {
2    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
3    typeof define === 'function' && define.amd ? define(factory) :
4    global.moment = factory()
vendor: 56,293 bytes, lines 4-1764
4
5}(this, (function () { 'use strict';
6
7    var hookCallback;
8
9    function hooks () {
10        return hookCallback.apply(null, arguments);
11    }
12
13    // This is done to register the method called with moment()
14    // without creating circular dependencies.
15    function setHookCallback (callback) {
16        hookCallback = callback;
17    }
18
19    function isArray(input) {
20        return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
21    }
22
23    function isObject(input) {
24        // IE8 will treat undefined and null as object if it wasn't for
25        // input != null
26        return input != null && Object.prototype.toString.call(input) === '[object Object]';
27    }
28
29    function isObjectEmpty(obj) {
30        if (Object.getOwnPropertyNames) {
31            return (Object.getOwnPropertyNames(obj).length === 0);
32        } else {
33            var k;
34            for (k in obj) {
35                if (obj.hasOwnProperty(k)) {
36                    return false;
37                }
38            }
39            return true;
40        }
41    }
42
43    function isUndefined(input) {
44        return input === void 0;
45    }
46
47    function isNumber(input) {
48        return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';
49    }
50
51    function isDate(input) {
52        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
53    }
54
55    function map(arr, fn) {
56        var res = [], i;
57        for (i = 0; i < arr.length; ++i) {
58            res.push(fn(arr[i], i));
59        }
60        return res;
61    }
62
63    function hasOwnProp(a, b) {
64        return Object.prototype.hasOwnProperty.call(a, b);
65    }
66
67    function extend(a, b) {
68        for (var i in b) {
69            if (hasOwnProp(b, i)) {
70                a[i] = b[i];
71            }
72        }
73
74        if (hasOwnProp(b, 'toString')) {
75            a.toString = b.toString;
76        }
77
78        if (hasOwnProp(b, 'valueOf')) {
79            a.valueOf = b.valueOf;
80        }
81
82        return a;
83    }
84
85    function createUTC (input, format, locale, strict) {
86        return createLocalOrUTC(input, format, locale, strict, true).utc();
87    }
88
89    function defaultParsingFlags() {
90        // We need to deep clone this object.
91        return {
92            empty           : false,
93            unusedTokens    : [],
94            unusedInput     : [],
95            overflow        : -2,
96            charsLeftOver   : 0,
97            nullInput       : false,
98            invalidMonth    : null,
99            invalidFormat   : false,
100            userInvalidated : false,
101            iso             : false,
102            parsedDateParts : [],
103            meridiem        : null,
104            rfc2822         : false,
105            weekdayMismatch : false
106        };
107    }
108
109    function getParsingFlags(m) {
110        if (m._pf == null) {
111            m._pf = defaultParsingFlags();
112        }
113        return m._pf;
114    }
115
116    var some;
117    if (Array.prototype.some) {
118        some = Array.prototype.some;
119    } else {
120        some = function (fun) {
121            var t = Object(this);
122            var len = t.length >>> 0;
123
124            for (var i = 0; i < len; i++) {
125                if (i in t && fun.call(this, t[i], i, t)) {
126                    return true;
127                }
128            }
129
130            return false;
131        };
132    }
133
134    function isValid(m) {
135        if (m._isValid == null) {
136            var flags = getParsingFlags(m);
137            var parsedParts = some.call(flags.parsedDateParts, function (i) {
138                return i != null;
139            });
140            var isNowValid = !isNaN(m._d.getTime()) &&
141                flags.overflow < 0 &&
142                !flags.empty &&
143                !flags.invalidMonth &&
144                !flags.invalidWeekday &&
145                !flags.weekdayMismatch &&
146                !flags.nullInput &&
147                !flags.invalidFormat &&
148                !flags.userInvalidated &&
149                (!flags.meridiem || (flags.meridiem && parsedParts));
150
151            if (m._strict) {
152                isNowValid = isNowValid &&
153                    flags.charsLeftOver === 0 &&
154                    flags.unusedTokens.length === 0 &&
155                    flags.bigHour === undefined;
156            }
157
158            if (Object.isFrozen == null || !Object.isFrozen(m)) {
159                m._isValid = isNowValid;
160            }
161            else {
162                return isNowValid;
163            }
164        }
165        return m._isValid;
166    }
167
168    function createInvalid (flags) {
169        var m = createUTC(NaN);
170        if (flags != null) {
171            extend(getParsingFlags(m), flags);
172        }
173        else {
174            getParsingFlags(m).userInvalidated = true;
175        }
176
177        return m;
178    }
179
180    // Plugins that add properties should also add the key here (null value),
181    // so we can properly clone ourselves.
182    var momentProperties = hooks.momentProperties = [];
183
184    function copyConfig(to, from) {
185        var i, prop, val;
186
187        if (!isUndefined(from._isAMomentObject)) {
188            to._isAMomentObject = from._isAMomentObject;
189        }
190        if (!isUndefined(from._i)) {
191            to._i = from._i;
192        }
193        if (!isUndefined(from._f)) {
194            to._f = from._f;
195        }
196        if (!isUndefined(from._l)) {
197            to._l = from._l;
198        }
199        if (!isUndefined(from._strict)) {
200            to._strict = from._strict;
201        }
202        if (!isUndefined(from._tzm)) {
203            to._tzm = from._tzm;
204        }
205        if (!isUndefined(from._isUTC)) {
206            to._isUTC = from._isUTC;
207        }
208        if (!isUndefined(from._offset)) {
209            to._offset = from._offset;
210        }
211        if (!isUndefined(from._pf)) {
212            to._pf = getParsingFlags(from);
213        }
214        if (!isUndefined(from._locale)) {
215            to._locale = from._locale;
216        }
217
218        if (momentProperties.length > 0) {
219            for (i = 0; i < momentProperties.length; i++) {
220                prop = momentProperties[i];
221                val = from[prop];
222                if (!isUndefined(val)) {
223                    to[prop] = val;
224                }
225            }
226        }
227
228        return to;
229    }
230
231    var updateInProgress = false;
232
233    // Moment prototype object
234    function Moment(config) {
235        copyConfig(this, config);
236        this._d = new Date(config._d != null ? config._d.getTime() : NaN);
237        if (!this.isValid()) {
238            this._d = new Date(NaN);
239        }
240        // Prevent infinite loop in case updateOffset creates new moment
241        // objects.
242        if (updateInProgress === false) {
243            updateInProgress = true;
244            hooks.updateOffset(this);
245            updateInProgress = false;
246        }
247    }
248
249    function isMoment (obj) {
250        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
251    }
252
253    function absFloor (number) {
254        if (number < 0) {
255            // -0 -> 0
256            return Math.ceil(number) || 0;
257        } else {
258            return Math.floor(number);
259        }
260    }
261
262    function toInt(argumentForCoercion) {
263        var coercedNumber = +argumentForCoercion,
264            value = 0;
265
266        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
267            value = absFloor(coercedNumber);
268        }
269
270        return value;
271    }
272
273    // compare two arrays, return the number of differences
274    function compareArrays(array1, array2, dontConvert) {
275        var len = Math.min(array1.length, array2.length),
276            lengthDiff = Math.abs(array1.length - array2.length),
277            diffs = 0,
278            i;
279        for (i = 0; i < len; i++) {
280            if ((dontConvert && array1[i] !== array2[i]) ||
281                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
282                diffs++;
283            }
284        }
285        return diffs + lengthDiff;
286    }
287
288    function warn(msg) {
289        if (hooks.suppressDeprecationWarnings === false &&
290                (typeof console !==  'undefined') && console.warn) {
291            console.warn('Deprecation warning: ' + msg);
292        }
293    }
294
295    function deprecate(msg, fn) {
296        var firstTime = true;
297
298        return extend(function () {
299            if (hooks.deprecationHandler != null) {
300                hooks.deprecationHandler(null, msg);
301            }
302            if (firstTime) {
303                var args = [];
304                var arg;
305                for (var i = 0; i < arguments.length; i++) {
306                    arg = '';
307                    if (typeof arguments[i] === 'object') {
308                        arg += '\n[' + i + '] ';
309                        for (var key in arguments[0]) {
310                            arg += key + ': ' + arguments[0][key] + ', ';
311                        }
312                        arg = arg.slice(0, -2); // Remove trailing comma and space
313                    } else {
314                        arg = arguments[i];
315                    }
316                    args.push(arg);
317                }
318                warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
319                firstTime = false;
320            }
321            return fn.apply(this, arguments);
322        }, fn);
323    }
324
325    var deprecations = {};
326
327    function deprecateSimple(name, msg) {
328        if (hooks.deprecationHandler != null) {
329            hooks.deprecationHandler(name, msg);
330        }
331        if (!deprecations[name]) {
332            warn(msg);
333            deprecations[name] = true;
334        }
335    }
336
337    hooks.suppressDeprecationWarnings = false;
338    hooks.deprecationHandler = null;
339
340    function isFunction(input) {
341        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
342    }
343
344    function set (config) {
345        var prop, i;
346        for (i in config) {
347            prop = config[i];
348            if (isFunction(prop)) {
349                this[i] = prop;
350            } else {
351                this['_' + i] = prop;
352            }
353        }
354        this._config = config;
355        // Lenient ordinal parsing accepts just a number in addition to
356        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
357        // TODO: Remove "ordinalParse" fallback in next major release.
358        this._dayOfMonthOrdinalParseLenient = new RegExp(
359            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
360                '|' + (/\d{1,2}/).source);
361    }
362
363    function mergeConfigs(parentConfig, childConfig) {
364        var res = extend({}, parentConfig), prop;
365        for (prop in childConfig) {
366            if (hasOwnProp(childConfig, prop)) {
367                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
368                    res[prop] = {};
369                    extend(res[prop], parentConfig[prop]);
370                    extend(res[prop], childConfig[prop]);
371                } else if (childConfig[prop] != null) {
372                    res[prop] = childConfig[prop];
373                } else {
374                    delete res[prop];
375                }
376            }
377        }
378        for (prop in parentConfig) {
379            if (hasOwnProp(parentConfig, prop) &&
380                    !hasOwnProp(childConfig, prop) &&
381                    isObject(parentConfig[prop])) {
382                // make sure changes to properties don't modify parent config
383                res[prop] = extend({}, res[prop]);
384            }
385        }
386        return res;
387    }
388
389    function Locale(config) {
390        if (config != null) {
391            this.set(config);
392        }
393    }
394
395    var keys;
396
397    if (Object.keys) {
398        keys = Object.keys;
399    } else {
400        keys = function (obj) {
401            var i, res = [];
402            for (i in obj) {
403                if (hasOwnProp(obj, i)) {
404                    res.push(i);
405                }
406            }
407            return res;
408        };
409    }
410
411    var defaultCalendar = {
412        sameDay : '[Today at] LT',
413        nextDay : '[Tomorrow at] LT',
414        nextWeek : 'dddd [at] LT',
415        lastDay : '[Yesterday at] LT',
416        lastWeek : '[Last] dddd [at] LT',
417        sameElse : 'L'
418    };
419
420    function calendar (key, mom, now) {
421        var output = this._calendar[key] || this._calendar['sameElse'];
422        return isFunction(output) ? output.call(mom, now) : output;
423    }
424
425    var defaultLongDateFormat = {
426        LTS  : 'h:mm:ss A',
427        LT   : 'h:mm A',
428        L    : 'MM/DD/YYYY',
429        LL   : 'MMMM D, YYYY',
430        LLL  : 'MMMM D, YYYY h:mm A',
431        LLLL : 'dddd, MMMM D, YYYY h:mm A'
432    };
433
434    function longDateFormat (key) {
435        var format = this._longDateFormat[key],
436            formatUpper = this._longDateFormat[key.toUpperCase()];
437
438        if (format || !formatUpper) {
439            return format;
440        }
441
442        this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
443            return val.slice(1);
444        });
445
446        return this._longDateFormat[key];
447    }
448
449    var defaultInvalidDate = 'Invalid date';
450
451    function invalidDate () {
452        return this._invalidDate;
453    }
454
455    var defaultOrdinal = '%d';
456    var defaultDayOfMonthOrdinalParse = /\d{1,2}/;
457
458    function ordinal (number) {
459        return this._ordinal.replace('%d', number);
460    }
461
462    var defaultRelativeTime = {
463        future : 'in %s',
464        past   : '%s ago',
465        s  : 'a few seconds',
466        ss : '%d seconds',
467        m  : 'a minute',
468        mm : '%d minutes',
469        h  : 'an hour',
470        hh : '%d hours',
471        d  : 'a day',
472        dd : '%d days',
473        M  : 'a month',
474        MM : '%d months',
475        y  : 'a year',
476        yy : '%d years'
477    };
478
479    function relativeTime (number, withoutSuffix, string, isFuture) {
480        var output = this._relativeTime[string];
481        return (isFunction(output)) ?
482            output(number, withoutSuffix, string, isFuture) :
483            output.replace(/%d/i, number);
484    }
485
486    function pastFuture (diff, output) {
487        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
488        return isFunction(format) ? format(output) : format.replace(/%s/i, output);
489    }
490
491    var aliases = {};
492
493    function addUnitAlias (unit, shorthand) {
494        var lowerCase = unit.toLowerCase();
495        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
496    }
497
498    function normalizeUnits(units) {
499        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
500    }
501
502    function normalizeObjectUnits(inputObject) {
503        var normalizedInput = {},
504            normalizedProp,
505            prop;
506
507        for (prop in inputObject) {
508            if (hasOwnProp(inputObject, prop)) {
509                normalizedProp = normalizeUnits(prop);
510                if (normalizedProp) {
511                    normalizedInput[normalizedProp] = inputObject[prop];
512                }
513            }
514        }
515
516        return normalizedInput;
517    }
518
519    var priorities = {};
520
521    function addUnitPriority(unit, priority) {
522        priorities[unit] = priority;
523    }
524
525    function getPrioritizedUnits(unitsObj) {
526        var units = [];
527        for (var u in unitsObj) {
528            units.push({unit: u, priority: priorities[u]});
529        }
530        units.sort(function (a, b) {
531            return a.priority - b.priority;
532        });
533        return units;
534    }
535
536    function zeroFill(number, targetLength, forceSign) {
537        var absNumber = '' + Math.abs(number),
538            zerosToFill = targetLength - absNumber.length,
539            sign = number >= 0;
540        return (sign ? (forceSign ? '+' : '') : '-') +
541            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
542    }
543
544    var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
545
546    var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
547
548    var formatFunctions = {};
549
550    var formatTokenFunctions = {};
551
552    // token:    'M'
553    // padded:   ['MM', 2]
554    // ordinal:  'Mo'
555    // callback: function () { this.month() + 1 }
556    function addFormatToken (token, padded, ordinal, callback) {
557        var func = callback;
558        if (typeof callback === 'string') {
559            func = function () {
560                return this[callback]();
561            };
562        }
563        if (token) {
564            formatTokenFunctions[token] = func;
565        }
566        if (padded) {
567            formatTokenFunctions[padded[0]] = function () {
568                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
569            };
570        }
571        if (ordinal) {
572            formatTokenFunctions[ordinal] = function () {
573                return this.localeData().ordinal(func.apply(this, arguments), token);
574            };
575        }
576    }
577
578    function removeFormattingTokens(input) {
579        if (input.match(/\[[\s\S]/)) {
580            return input.replace(/^\[|\]$/g, '');
581        }
582        return input.replace(/\\/g, '');
583    }
584
585    function makeFormatFunction(format) {
586        var array = format.match(formattingTokens), i, length;
587
588        for (i = 0, length = array.length; i < length; i++) {
589            if (formatTokenFunctions[array[i]]) {
590                array[i] = formatTokenFunctions[array[i]];
591            } else {
592                array[i] = removeFormattingTokens(array[i]);
593            }
594        }
595
596        return function (mom) {
597            var output = '', i;
598            for (i = 0; i < length; i++) {
599                output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];
600            }
601            return output;
602        };
603    }
604
605    // format date using native date object
606    function formatMoment(m, format) {
607        if (!m.isValid()) {
608            return m.localeData().invalidDate();
609        }
610
611        format = expandFormat(format, m.localeData());
612        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
613
614        return formatFunctions[format](m);
615    }
616
617    function expandFormat(format, locale) {
618        var i = 5;
619
620        function replaceLongDateFormatTokens(input) {
621            return locale.longDateFormat(input) || input;
622        }
623
624        localFormattingTokens.lastIndex = 0;
625        while (i >= 0 && localFormattingTokens.test(format)) {
626            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
627            localFormattingTokens.lastIndex = 0;
628            i -= 1;
629        }
630
631        return format;
632    }
633
634    var match1         = /\d/;            //       0 - 9
635    var match2         = /\d\d/;          //      00 - 99
636    var match3         = /\d{3}/;         //     000 - 999
637    var match4         = /\d{4}/;         //    0000 - 9999
638    var match6         = /[+-]?\d{6}/;    // -999999 - 999999
639    var match1to2      = /\d\d?/;         //       0 - 99
640    var match3to4      = /\d\d\d\d?/;     //     999 - 9999
641    var match5to6      = /\d\d\d\d\d\d?/; //   99999 - 999999
642    var match1to3      = /\d{1,3}/;       //       0 - 999
643    var match1to4      = /\d{1,4}/;       //       0 - 9999
644    var match1to6      = /[+-]?\d{1,6}/;  // -999999 - 999999
645
646    var matchUnsigned  = /\d+/;           //       0 - inf
647    var matchSigned    = /[+-]?\d+/;      //    -inf - inf
648
649    var matchOffset    = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
650    var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z
651
652    var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
653
654    // any word (or two) characters or numbers including two/three word month in arabic.
655    // includes scottish gaelic two word and hyphenated months
656    var 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;
657
658    var regexes = {};
659
660    function addRegexToken (token, regex, strictRegex) {
661        regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
662            return (isStrict && strictRegex) ? strictRegex : regex;
663        };
664    }
665
666    function getParseRegexForToken (token, config) {
667        if (!hasOwnProp(regexes, token)) {
668            return new RegExp(unescapeFormat(token));
669        }
670
671        return regexes[token](config._strict, config._locale);
672    }
673
674    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
675    function unescapeFormat(s) {
676        return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
677            return p1 || p2 || p3 || p4;
678        }));
679    }
680
681    function regexEscape(s) {
682        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
683    }
684
685    var tokens = {};
686
687    function addParseToken (token, callback) {
688        var i, func = callback;
689        if (typeof token === 'string') {
690            token = [token];
691        }
692        if (isNumber(callback)) {
693            func = function (input, array) {
694                array[callback] = toInt(input);
695            };
696        }
697        for (i = 0; i < token.length; i++) {
698            tokens[token[i]] = func;
699        }
700    }
701
702    function addWeekParseToken (token, callback) {
703        addParseToken(token, function (input, array, config, token) {
704            config._w = config._w || {};
705            callback(input, config._w, config, token);
706        });
707    }
708
709    function addTimeToArrayFromToken(token, input, config) {
710        if (input != null && hasOwnProp(tokens, token)) {
711            tokens[token](input, config._a, config, token);
712        }
713    }
714
715    var YEAR = 0;
716    var MONTH = 1;
717    var DATE = 2;
718    var HOUR = 3;
719    var MINUTE = 4;
720    var SECOND = 5;
721    var MILLISECOND = 6;
722    var WEEK = 7;
723    var WEEKDAY = 8;
724
725    // FORMATTING
726
727    addFormatToken('Y', 0, 0, function () {
728        var y = this.year();
729        return y <= 9999 ? '' + y : '+' + y;
730    });
731
732    addFormatToken(0, ['YY', 2], 0, function () {
733        return this.year() % 100;
734    });
735
736    addFormatToken(0, ['YYYY',   4],       0, 'year');
737    addFormatToken(0, ['YYYYY',  5],       0, 'year');
738    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
739
740    // ALIASES
741
742    addUnitAlias('year', 'y');
743
744    // PRIORITIES
745
746    addUnitPriority('year', 1);
747
748    // PARSING
749
750    addRegexToken('Y',      matchSigned);
751    addRegexToken('YY',     match1to2, match2);
752    addRegexToken('YYYY',   match1to4, match4);
753    addRegexToken('YYYYY',  match1to6, match6);
754    addRegexToken('YYYYYY', match1to6, match6);
755
756    addParseToken(['YYYYY', 'YYYYYY'], YEAR);
757    addParseToken('YYYY', function (input, array) {
758        array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
759    });
760    addParseToken('YY', function (input, array) {
761        array[YEAR] = hooks.parseTwoDigitYear(input);
762    });
763    addParseToken('Y', function (input, array) {
764        array[YEAR] = parseInt(input, 10);
765    });
766
767    // HELPERS
768
769    function daysInYear(year) {
770        return isLeapYear(year) ? 366 : 365;
771    }
772
773    function isLeapYear(year) {
774        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
775    }
776
777    // HOOKS
778
779    hooks.parseTwoDigitYear = function (input) {
780        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
781    };
782
783    // MOMENTS
784
785    var getSetYear = makeGetSet('FullYear', true);
786
787    function getIsLeapYear () {
788        return isLeapYear(this.year());
789    }
790
791    function makeGetSet (unit, keepTime) {
792        return function (value) {
793            if (value != null) {
794                set$1(this, unit, value);
795                hooks.updateOffset(this, keepTime);
796                return this;
797            } else {
798                return get(this, unit);
799            }
800        };
801    }
802
803    function get (mom, unit) {
804        return mom.isValid() ?
805            mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
806    }
807
808    function set$1 (mom, unit, value) {
809        if (mom.isValid() && !isNaN(value)) {
810            if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {
811                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));
812            }
813            else {
814                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
815            }
816        }
817    }
818
819    // MOMENTS
820
821    function stringGet (units) {
822        units = normalizeUnits(units);
823        if (isFunction(this[units])) {
824            return this[units]();
825        }
826        return this;
827    }
828
829
830    function stringSet (units, value) {
831        if (typeof units === 'object') {
832            units = normalizeObjectUnits(units);
833            var prioritized = getPrioritizedUnits(units);
834            for (var i = 0; i < prioritized.length; i++) {
835                this[prioritized[i].unit](units[prioritized[i].unit]);
836            }
837        } else {
838            units = normalizeUnits(units);
839            if (isFunction(this[units])) {
840                return this[units](value);
841            }
842        }
843        return this;
844    }
845
846    function mod(n, x) {
847        return ((n % x) + x) % x;
848    }
849
850    var indexOf;
851
852    if (Array.prototype.indexOf) {
853        indexOf = Array.prototype.indexOf;
854    } else {
855        indexOf = function (o) {
856            // I know
857            var i;
858            for (i = 0; i < this.length; ++i) {
859                if (this[i] === o) {
860                    return i;
861                }
862            }
863            return -1;
864        };
865    }
866
867    function daysInMonth(year, month) {
868        if (isNaN(year) || isNaN(month)) {
869            return NaN;
870        }
871        var modMonth = mod(month, 12);
872        year += (month - modMonth) / 12;
873        return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);
874    }
875
876    // FORMATTING
877
878    addFormatToken('M', ['MM', 2], 'Mo', function () {
879        return this.month() + 1;
880    });
881
882    addFormatToken('MMM', 0, 0, function (format) {
883        return this.localeData().monthsShort(this, format);
884    });
885
886    addFormatToken('MMMM', 0, 0, function (format) {
887        return this.localeData().months(this, format);
888    });
889
890    // ALIASES
891
892    addUnitAlias('month', 'M');
893
894    // PRIORITY
895
896    addUnitPriority('month', 8);
897
898    // PARSING
899
900    addRegexToken('M',    match1to2);
901    addRegexToken('MM',   match1to2, match2);
902    addRegexToken('MMM',  function (isStrict, locale) {
903        return locale.monthsShortRegex(isStrict);
904    });
905    addRegexToken('MMMM', function (isStrict, locale) {
906        return locale.monthsRegex(isStrict);
907    });
908
909    addParseToken(['M', 'MM'], function (input, array) {
910        array[MONTH] = toInt(input) - 1;
911    });
912
913    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
914        var month = config._locale.monthsParse(input, token, config._strict);
915        // if we didn't find a month name, mark the date as invalid.
916        if (month != null) {
917            array[MONTH] = month;
918        } else {
919            getParsingFlags(config).invalidMonth = input;
920        }
921    });
922
923    // LOCALES
924
925    var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/;
926    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
927    function localeMonths (m, format) {
928        if (!m) {
929            return isArray(this._months) ? this._months :
930                this._months['standalone'];
931        }
932        return isArray(this._months) ? this._months[m.month()] :
933            this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
934    }
935
936    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
937    function localeMonthsShort (m, format) {
938        if (!m) {
939            return isArray(this._monthsShort) ? this._monthsShort :
940                this._monthsShort['standalone'];
941        }
942        return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
943            this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
944    }
945
946    function handleStrictParse(monthName, format, strict) {
947        var i, ii, mom, llc = monthName.toLocaleLowerCase();
948        if (!this._monthsParse) {
949            // this is not used
950            this._monthsParse = [];
951            this._longMonthsParse = [];
952            this._shortMonthsParse = [];
953            for (i = 0; i < 12; ++i) {
954                mom = createUTC([2000, i]);
955                this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
956                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
957            }
958        }
959
960        if (strict) {
961            if (format === 'MMM') {
962                ii = indexOf.call(this._shortMonthsParse, llc);
963                return ii !== -1 ? ii : null;
964            } else {
965                ii = indexOf.call(this._longMonthsParse, llc);
966                return ii !== -1 ? ii : null;
967            }
968        } else {
969            if (format === 'MMM') {
970                ii = indexOf.call(this._shortMonthsParse, llc);
971                if (ii !== -1) {
972                    return ii;
973                }
974                ii = indexOf.call(this._longMonthsParse, llc);
975                return ii !== -1 ? ii : null;
976            } else {
977                ii = indexOf.call(this._longMonthsParse, llc);
978                if (ii !== -1) {
979                    return ii;
980                }
981                ii = indexOf.call(this._shortMonthsParse, llc);
982                return ii !== -1 ? ii : null;
983            }
984        }
985    }
986
987    function localeMonthsParse (monthName, format, strict) {
988        var i, mom, regex;
989
990        if (this._monthsParseExact) {
991            return handleStrictParse.call(this, monthName, format, strict);
992        }
993
994        if (!this._monthsParse) {
995            this._monthsParse = [];
996            this._longMonthsParse = [];
997            this._shortMonthsParse = [];
998        }
999
1000        // TODO: add sorting
1001        // Sorting makes sure if one month (or abbr) is a prefix of another
1002        // see sorting in computeMonthsParse
1003        for (i = 0; i < 12; i++) {
1004            // make the regex if we don't have it already
1005            mom = createUTC([2000, i]);
1006            if (strict && !this._longMonthsParse[i]) {
1007                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
1008                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
1009            }
1010            if (!strict && !this._monthsParse[i]) {
1011                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
1012                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
1013            }
1014            // test the regex
1015            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
1016                return i;
1017            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
1018                return i;
1019            } else if (!strict && this._monthsParse[i].test(monthName)) {
1020                return i;
1021            }
1022        }
1023    }
1024
1025    // MOMENTS
1026
1027    function setMonth (mom, value) {
1028        var dayOfMonth;
1029
1030        if (!mom.isValid()) {
1031            // No op
1032            return mom;
1033        }
1034
1035        if (typeof value === 'string') {
1036            if (/^\d+$/.test(value)) {
1037                value = toInt(value);
1038            } else {
1039                value = mom.localeData().monthsParse(value);
1040                // TODO: Another silent failure?
1041                if (!isNumber(value)) {
1042                    return mom;
1043                }
1044            }
1045        }
1046
1047        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
1048        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
1049        return mom;
1050    }
1051
1052    function getSetMonth (value) {
1053        if (value != null) {
1054            setMonth(this, value);
1055            hooks.updateOffset(this, true);
1056            return this;
1057        } else {
1058            return get(this, 'Month');
1059        }
1060    }
1061
1062    function getDaysInMonth () {
1063        return daysInMonth(this.year(), this.month());
1064    }
1065
1066    var defaultMonthsShortRegex = matchWord;
1067    function monthsShortRegex (isStrict) {
1068        if (this._monthsParseExact) {
1069            if (!hasOwnProp(this, '_monthsRegex')) {
1070                computeMonthsParse.call(this);
1071            }
1072            if (isStrict) {
1073                return this._monthsShortStrictRegex;
1074            } else {
1075                return this._monthsShortRegex;
1076            }
1077        } else {
1078            if (!hasOwnProp(this, '_monthsShortRegex')) {
1079                this._monthsShortRegex = defaultMonthsShortRegex;
1080            }
1081            return this._monthsShortStrictRegex && isStrict ?
1082                this._monthsShortStrictRegex : this._monthsShortRegex;
1083        }
1084    }
1085
1086    var defaultMonthsRegex = matchWord;
1087    function monthsRegex (isStrict) {
1088        if (this._monthsParseExact) {
1089            if (!hasOwnProp(this, '_monthsRegex')) {
1090                computeMonthsParse.call(this);
1091            }
1092            if (isStrict) {
1093                return this._monthsStrictRegex;
1094            } else {
1095                return this._monthsRegex;
1096            }
1097        } else {
1098            if (!hasOwnProp(this, '_monthsRegex')) {
1099                this._monthsRegex = defaultMonthsRegex;
1100            }
1101            return this._monthsStrictRegex && isStrict ?
1102                this._monthsStrictRegex : this._monthsRegex;
1103        }
1104    }
1105
1106    function computeMonthsParse () {
1107        function cmpLenRev(a, b) {
1108            return b.length - a.length;
1109        }
1110
1111        var shortPieces = [], longPieces = [], mixedPieces = [],
1112            i, mom;
1113        for (i = 0; i < 12; i++) {
1114            // make the regex if we don't have it already
1115            mom = createUTC([2000, i]);
1116            shortPieces.push(this.monthsShort(mom, ''));
1117            longPieces.push(this.months(mom, ''));
1118            mixedPieces.push(this.months(mom, ''));
1119            mixedPieces.push(this.monthsShort(mom, ''));
1120        }
1121        // Sorting makes sure if one month (or abbr) is a prefix of another it
1122        // will match the longer piece.
1123        shortPieces.sort(cmpLenRev);
1124        longPieces.sort(cmpLenRev);
1125        mixedPieces.sort(cmpLenRev);
1126        for (i = 0; i < 12; i++) {
1127            shortPieces[i] = regexEscape(shortPieces[i]);
1128            longPieces[i] = regexEscape(longPieces[i]);
1129        }
1130        for (i = 0; i < 24; i++) {
1131            mixedPieces[i] = regexEscape(mixedPieces[i]);
1132        }
1133
1134        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
1135        this._monthsShortRegex = this._monthsRegex;
1136        this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
1137        this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
1138    }
1139
1140    function createDate (y, m, d, h, M, s, ms) {
1141        // can't just apply() to create a date:
1142        // https://stackoverflow.com/q/181348
1143        var date;
1144        // the date constructor remaps years 0-99 to 1900-1999
1145        if (y < 100 && y >= 0) {
1146            // preserve leap years using a full 400 year cycle, then reset
1147            date = new Date(y + 400, m, d, h, M, s, ms);
1148            if (isFinite(date.getFullYear())) {
1149                date.setFullYear(y);
1150            }
1151        } else {
1152            date = new Date(y, m, d, h, M, s, ms);
1153        }
1154
1155        return date;
1156    }
1157
1158    function createUTCDate (y) {
1159        var date;
1160        // the Date.UTC function remaps years 0-99 to 1900-1999
1161        if (y < 100 && y >= 0) {
1162            var args = Array.prototype.slice.call(arguments);
1163            // preserve leap years using a full 400 year cycle, then reset
1164            args[0] = y + 400;
1165            date = new Date(Date.UTC.apply(null, args));
1166            if (isFinite(date.getUTCFullYear())) {
1167                date.setUTCFullYear(y);
1168            }
1169        } else {
1170            date = new Date(Date.UTC.apply(null, arguments));
1171        }
1172
1173        return date;
1174    }
1175
1176    // start-of-first-week - start-of-year
1177    function firstWeekOffset(year, dow, doy) {
1178        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
1179            fwd = 7 + dow - doy,
1180            // first-week day local weekday -- which local weekday is fwd
1181            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
1182
1183        return -fwdlw + fwd - 1;
1184    }
1185
1186    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
1187    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
1188        var localWeekday = (7 + weekday - dow) % 7,
1189            weekOffset = firstWeekOffset(year, dow, doy),
1190            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
1191            resYear, resDayOfYear;
1192
1193        if (dayOfYear <= 0) {
1194            resYear = year - 1;
1195            resDayOfYear = daysInYear(resYear) + dayOfYear;
1196        } else if (dayOfYear > daysInYear(year)) {
1197            resYear = year + 1;
1198            resDayOfYear = dayOfYear - daysInYear(year);
1199        } else {
1200            resYear = year;
1201            resDayOfYear = dayOfYear;
1202        }
1203
1204        return {
1205            year: resYear,
1206            dayOfYear: resDayOfYear
1207        };
1208    }
1209
1210    function weekOfYear(mom, dow, doy) {
1211        var weekOffset = firstWeekOffset(mom.year(), dow, doy),
1212            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
1213            resWeek, resYear;
1214
1215        if (week < 1) {
1216            resYear = mom.year() - 1;
1217            resWeek = week + weeksInYear(resYear, dow, doy);
1218        } else if (week > weeksInYear(mom.year(), dow, doy)) {
1219            resWeek = week - weeksInYear(mom.year(), dow, doy);
1220            resYear = mom.year() + 1;
1221        } else {
1222            resYear = mom.year();
1223            resWeek = week;
1224        }
1225
1226        return {
1227            week: resWeek,
1228            year: resYear
1229        };
1230    }
1231
1232    function weeksInYear(year, dow, doy) {
1233        var weekOffset = firstWeekOffset(year, dow, doy),
1234            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
1235        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
1236    }
1237
1238    // FORMATTING
1239
1240    addFormatToken('w', ['ww', 2], 'wo', 'week');
1241    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
1242
1243    // ALIASES
1244
1245    addUnitAlias('week', 'w');
1246    addUnitAlias('isoWeek', 'W');
1247
1248    // PRIORITIES
1249
1250    addUnitPriority('week', 5);
1251    addUnitPriority('isoWeek', 5);
1252
1253    // PARSING
1254
1255    addRegexToken('w',  match1to2);
1256    addRegexToken('ww', match1to2, match2);
1257    addRegexToken('W',  match1to2);
1258    addRegexToken('WW', match1to2, match2);
1259
1260    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
1261        week[token.substr(0, 1)] = toInt(input);
1262    });
1263
1264    // HELPERS
1265
1266    // LOCALES
1267
1268    function localeWeek (mom) {
1269        return weekOfYear(mom, this._week.dow, this._week.doy).week;
1270    }
1271
1272    var defaultLocaleWeek = {
1273        dow : 0, // Sunday is the first day of the week.
1274        doy : 6  // The week that contains Jan 6th is the first week of the year.
1275    };
1276
1277    function localeFirstDayOfWeek () {
1278        return this._week.dow;
1279    }
1280
1281    function localeFirstDayOfYear () {
1282        return this._week.doy;
1283    }
1284
1285    // MOMENTS
1286
1287    function getSetWeek (input) {
1288        var week = this.localeData().week(this);
1289        return input == null ? week : this.add((input - week) * 7, 'd');
1290    }
1291
1292    function getSetISOWeek (input) {
1293        var week = weekOfYear(this, 1, 4).week;
1294        return input == null ? week : this.add((input - week) * 7, 'd');
1295    }
1296
1297    // FORMATTING
1298
1299    addFormatToken('d', 0, 'do', 'day');
1300
1301    addFormatToken('dd', 0, 0, function (format) {
1302        return this.localeData().weekdaysMin(this, format);
1303    });
1304
1305    addFormatToken('ddd', 0, 0, function (format) {
1306        return this.localeData().weekdaysShort(this, format);
1307    });
1308
1309    addFormatToken('dddd', 0, 0, function (format) {
1310        return this.localeData().weekdays(this, format);
1311    });
1312
1313    addFormatToken('e', 0, 0, 'weekday');
1314    addFormatToken('E', 0, 0, 'isoWeekday');
1315
1316    // ALIASES
1317
1318    addUnitAlias('day', 'd');
1319    addUnitAlias('weekday', 'e');
1320    addUnitAlias('isoWeekday', 'E');
1321
1322    // PRIORITY
1323    addUnitPriority('day', 11);
1324    addUnitPriority('weekday', 11);
1325    addUnitPriority('isoWeekday', 11);
1326
1327    // PARSING
1328
1329    addRegexToken('d',    match1to2);
1330    addRegexToken('e',    match1to2);
1331    addRegexToken('E',    match1to2);
1332    addRegexToken('dd',   function (isStrict, locale) {
1333        return locale.weekdaysMinRegex(isStrict);
1334    });
1335    addRegexToken('ddd',   function (isStrict, locale) {
1336        return locale.weekdaysShortRegex(isStrict);
1337    });
1338    addRegexToken('dddd',   function (isStrict, locale) {
1339        return locale.weekdaysRegex(isStrict);
1340    });
1341
1342    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
1343        var weekday = config._locale.weekdaysParse(input, token, config._strict);
1344        // if we didn't get a weekday name, mark the date as invalid
1345        if (weekday != null) {
1346            week.d = weekday;
1347        } else {
1348            getParsingFlags(config).invalidWeekday = input;
1349        }
1350    });
1351
1352    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
1353        week[token] = toInt(input);
1354    });
1355
1356    // HELPERS
1357
1358    function parseWeekday(input, locale) {
1359        if (typeof input !== 'string') {
1360            return input;
1361        }
1362
1363        if (!isNaN(input)) {
1364            return parseInt(input, 10);
1365        }
1366
1367        input = locale.weekdaysParse(input);
1368        if (typeof input === 'number') {
1369            return input;
1370        }
1371
1372        return null;
1373    }
1374
1375    function parseIsoWeekday(input, locale) {
1376        if (typeof input === 'string') {
1377            return locale.weekdaysParse(input) % 7 || 7;
1378        }
1379        return isNaN(input) ? null : input;
1380    }
1381
1382    // LOCALES
1383    function shiftWeekdays (ws, n) {
1384        return ws.slice(n, 7).concat(ws.slice(0, n));
1385    }
1386
1387    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
1388    function localeWeekdays (m, format) {
1389        var weekdays = isArray(this._weekdays) ? this._weekdays :
1390            this._weekdays[(m && m !== true && this._weekdays.isFormat.test(format)) ? 'format' : 'standalone'];
1391        return (m === true) ? shiftWeekdays(weekdays, this._week.dow)
1392            : (m) ? weekdays[m.day()] : weekdays;
1393    }
1394
1395    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
1396    function localeWeekdaysShort (m) {
1397        return (m === true) ? shiftWeekdays(this._weekdaysShort, this._week.dow)
1398            : (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;
1399    }
1400
1401    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
1402    function localeWeekdaysMin (m) {
1403        return (m === true) ? shiftWeekdays(this._weekdaysMin, this._week.dow)
1404            : (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;
1405    }
1406
1407    function handleStrictParse$1(weekdayName, format, strict) {
1408        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
1409        if (!this._weekdaysParse) {
1410            this._weekdaysParse = [];
1411            this._shortWeekdaysParse = [];
1412            this._minWeekdaysParse = [];
1413
1414            for (i = 0; i < 7; ++i) {
1415                mom = createUTC([2000, 1]).day(i);
1416                this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
1417                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
1418                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
1419            }
1420        }
1421
1422        if (strict) {
1423            if (format === 'dddd') {
1424                ii = indexOf.call(this._weekdaysParse, llc);
1425                return ii !== -1 ? ii : null;
1426            } else if (format === 'ddd') {
1427                ii = indexOf.call(this._shortWeekdaysParse, llc);
1428                return ii !== -1 ? ii : null;
1429            } else {
1430                ii = indexOf.call(this._minWeekdaysParse, llc);
1431                return ii !== -1 ? ii : null;
1432            }
1433        } else {
1434            if (format === 'dddd') {
1435                ii = indexOf.call(this._weekdaysParse, llc);
1436                if (ii !== -1) {
1437                    return ii;
1438                }
1439                ii = indexOf.call(this._shortWeekdaysParse, llc);
1440                if (ii !== -1) {
1441                    return ii;
1442                }
1443                ii = indexOf.call(this._minWeekdaysParse, llc);
1444                return ii !== -1 ? ii : null;
1445            } else if (format === 'ddd') {
1446                ii = indexOf.call(this._shortWeekdaysParse, llc);
1447                if (ii !== -1) {
1448                    return ii;
1449                }
1450                ii = indexOf.call(this._weekdaysParse, llc);
1451                if (ii !== -1) {
1452                    return ii;
1453                }
1454                ii = indexOf.call(this._minWeekdaysParse, llc);
1455                return ii !== -1 ? ii : null;
1456            } else {
1457                ii = indexOf.call(this._minWeekdaysParse, llc);
1458                if (ii !== -1) {
1459                    return ii;
1460                }
1461                ii = indexOf.call(this._weekdaysParse, llc);
1462                if (ii !== -1) {
1463                    return ii;
1464                }
1465                ii = indexOf.call(this._shortWeekdaysParse, llc);
1466                return ii !== -1 ? ii : null;
1467            }
1468        }
1469    }
1470
1471    function localeWeekdaysParse (weekdayName, format, strict) {
1472        var i, mom, regex;
1473
1474        if (this._weekdaysParseExact) {
1475            return handleStrictParse$1.call(this, weekdayName, format, strict);
1476        }
1477
1478        if (!this._weekdaysParse) {
1479            this._weekdaysParse = [];
1480            this._minWeekdaysParse = [];
1481            this._shortWeekdaysParse = [];
1482            this._fullWeekdaysParse = [];
1483        }
1484
1485        for (i = 0; i < 7; i++) {
1486            // make the regex if we don't have it already
1487
1488            mom = createUTC([2000, 1]).day(i);
1489            if (strict && !this._fullWeekdaysParse[i]) {
1490                this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');
1491                this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');
1492                this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');
1493            }
1494            if (!this._weekdaysParse[i]) {
1495                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
1496                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
1497            }
1498            // test the regex
1499            if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
1500                return i;
1501            } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
1502                return i;
1503            } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
1504                return i;
1505            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
1506                return i;
1507            }
1508        }
1509    }
1510
1511    // MOMENTS
1512
1513    function getSetDayOfWeek (input) {
1514        if (!this.isValid()) {
1515            return input != null ? this : NaN;
1516        }
1517        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
1518        if (input != null) {
1519            input = parseWeekday(input, this.localeData());
1520            return this.add(input - day, 'd');
1521        } else {
1522            return day;
1523        }
1524    }
1525
1526    function getSetLocaleDayOfWeek (input) {
1527        if (!this.isValid()) {
1528            return input != null ? this : NaN;
1529        }
1530        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
1531        return input == null ? weekday : this.add(input - weekday, 'd');
1532    }
1533
1534    function getSetISODayOfWeek (input) {
1535        if (!this.isValid()) {
1536            return input != null ? this : NaN;
1537        }
1538
1539        // behaves the same as moment#day except
1540        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
1541        // as a setter, sunday should belong to the previous week.
1542
1543        if (input != null) {
1544            var weekday = parseIsoWeekday(input, this.localeData());
1545            return this.day(this.day() % 7 ? weekday : weekday - 7);
1546        } else {
1547            return this.day() || 7;
1548        }
1549    }
1550
1551    var defaultWeekdaysRegex = matchWord;
1552    function weekdaysRegex (isStrict) {
1553        if (this._weekdaysParseExact) {
1554            if (!hasOwnProp(this, '_weekdaysRegex')) {
1555                computeWeekdaysParse.call(this);
1556            }
1557            if (isStrict) {
1558                return this._weekdaysStrictRegex;
1559            } else {
1560                return this._weekdaysRegex;
1561            }
1562        } else {
1563            if (!hasOwnProp(this, '_weekdaysRegex')) {
1564                this._weekdaysRegex = defaultWeekdaysRegex;
1565            }
1566            return this._weekdaysStrictRegex && isStrict ?
1567                this._weekdaysStrictRegex : this._weekdaysRegex;
1568        }
1569    }
1570
1571    var defaultWeekdaysShortRegex = matchWord;
1572    function weekdaysShortRegex (isStrict) {
1573        if (this._weekdaysParseExact) {
1574            if (!hasOwnProp(this, '_weekdaysRegex')) {
1575                computeWeekdaysParse.call(this);
1576            }
1577            if (isStrict) {
1578                return this._weekdaysShortStrictRegex;
1579            } else {
1580                return this._weekdaysShortRegex;
1581            }
1582        } else {
1583            if (!hasOwnProp(this, '_weekdaysShortRegex')) {
1584                this._weekdaysShortRegex = defaultWeekdaysShortRegex;
1585            }
1586            return this._weekdaysShortStrictRegex && isStrict ?
1587                this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
1588        }
1589    }
1590
1591    var defaultWeekdaysMinRegex = matchWord;
1592    function weekdaysMinRegex (isStrict) {
1593        if (this._weekdaysParseExact) {
1594            if (!hasOwnProp(this, '_weekdaysRegex')) {
1595                computeWeekdaysParse.call(this);
1596            }
1597            if (isStrict) {
1598                return this._weekdaysMinStrictRegex;
1599            } else {
1600                return this._weekdaysMinRegex;
1601            }
1602        } else {
1603            if (!hasOwnProp(this, '_weekdaysMinRegex')) {
1604                this._weekdaysMinRegex = defaultWeekdaysMinRegex;
1605            }
1606            return this._weekdaysMinStrictRegex && isStrict ?
1607                this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
1608        }
1609    }
1610
1611
1612    function computeWeekdaysParse () {
1613        function cmpLenRev(a, b) {
1614            return b.length - a.length;
1615        }
1616
1617        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
1618            i, mom, minp, shortp, longp;
1619        for (i = 0; i < 7; i++) {
1620            // make the regex if we don't have it already
1621            mom = createUTC([2000, 1]).day(i);
1622            minp = this.weekdaysMin(mom, '');
1623            shortp = this.weekdaysShort(mom, '');
1624            longp = this.weekdays(mom, '');
1625            minPieces.push(minp);
1626            shortPieces.push(shortp);
1627            longPieces.push(longp);
1628            mixedPieces.push(minp);
1629            mixedPieces.push(shortp);
1630            mixedPieces.push(longp);
1631        }
1632        // Sorting makes sure if one weekday (or abbr) is a prefix of another it
1633        // will match the longer piece.
1634        minPieces.sort(cmpLenRev);
1635        shortPieces.sort(cmpLenRev);
1636        longPieces.sort(cmpLenRev);
1637        mixedPieces.sort(cmpLenRev);
1638        for (i = 0; i < 7; i++) {
1639            shortPieces[i] = regexEscape(shortPieces[i]);
1640            longPieces[i] = regexEscape(longPieces[i]);
1641            mixedPieces[i] = regexEscape(mixedPieces[i]);
1642        }
1643
1644        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
1645        this._weekdaysShortRegex = this._weekdaysRegex;
1646        this._weekdaysMinRegex = this._weekdaysRegex;
1647
1648        this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
1649        this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
1650        this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
1651    }
1652
1653    // FORMATTING
1654
1655    function hFormat() {
1656        return this.hours() % 12 || 12;
1657    }
1658
1659    function kFormat() {
1660        return this.hours() || 24;
1661    }
1662
1663    addFormatToken('H', ['HH', 2], 0, 'hour');
1664    addFormatToken('h', ['hh', 2], 0, hFormat);
1665    addFormatToken('k', ['kk', 2], 0, kFormat);
1666
1667    addFormatToken('hmm', 0, 0, function () {
1668        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
1669    });
1670
1671    addFormatToken('hmmss', 0, 0, function () {
1672        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +
1673            zeroFill(this.seconds(), 2);
1674    });
1675
1676    addFormatToken('Hmm', 0, 0, function () {
1677        return '' + this.hours() + zeroFill(this.minutes(), 2);
1678    });
1679
1680    addFormatToken('Hmmss', 0, 0, function () {
1681        return '' + this.hours() + zeroFill(this.minutes(), 2) +
1682            zeroFill(this.seconds(), 2);
1683    });
1684
1685    function meridiem (token, lowercase) {
1686        addFormatToken(token, 0, 0, function () {
1687            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
1688        });
1689    }
1690
1691    meridiem('a', true);
1692    meridiem('A', false);
1693
1694    // ALIASES
1695
1696    addUnitAlias('hour', 'h');
1697
1698    // PRIORITY
1699    addUnitPriority('hour', 13);
1700
1701    // PARSING
1702
1703    function matchMeridiem (isStrict, locale) {
1704        return locale._meridiemParse;
1705    }
1706
1707    addRegexToken('a',  matchMeridiem);
1708    addRegexToken('A',  matchMeridiem);
1709    addRegexToken('H',  match1to2);
1710    addRegexToken('h',  match1to2);
1711    addRegexToken('k',  match1to2);
1712    addRegexToken('HH', match1to2, match2);
1713    addRegexToken('hh', match1to2, match2);
1714    addRegexToken('kk', match1to2, match2);
1715
1716    addRegexToken('hmm', match3to4);
1717    addRegexToken('hmmss', match5to6);
1718    addRegexToken('Hmm', match3to4);
1719    addRegexToken('Hmmss', match5to6);
1720
1721    addParseToken(['H', 'HH'], HOUR);
1722    addParseToken(['k', 'kk'], function (input, array, config) {
1723        var kInput = toInt(input);
1724        array[HOUR] = kInput === 24 ? 0 : kInput;
1725    });
1726    addParseToken(['a', 'A'], function (input, array, config) {
1727        config._isPm = config._locale.isPM(input);
1728        config._meridiem = input;
1729    });
1730    addParseToken(['h', 'hh'], function (input, array, config) {
1731        array[HOUR] = toInt(input);
1732        getParsingFlags(config).bigHour = true;
1733    });
1734    addParseToken('hmm', function (input, array, config) {
1735        var pos = input.length - 2;
1736        array[HOUR] = toInt(input.substr(0, pos));
1737        array[MINUTE] = toInt(input.substr(pos));
1738        getParsingFlags(config).bigHour = true;
1739    });
1740    addParseToken('hmmss', function (input, array, config) {
1741        var pos1 = input.length - 4;
1742        var pos2 = input.length - 2;
1743        array[HOUR] = toInt(input.substr(0, pos1));
1744        array[MINUTE] = toInt(input.substr(pos1, 2));
1745        array[SECOND] = toInt(input.substr(pos2));
1746        getParsingFlags(config).bigHour = true;
1747    });
1748    addParseToken('Hmm', function (input, array, config) {
1749        var pos = input.length - 2;
1750        array[HOUR] = toInt(input.substr(0, pos));
1751        array[MINUTE] = toInt(input.substr(pos));
1752    });
1753    addParseToken('Hmmss', function (input, array, config) {
1754        var pos1 = input.length - 4;
1755        var pos2 = input.length - 2;
1756        array[HOUR] = toInt(input.substr(0, pos1));
1757        array[MINUTE] = toInt(input.substr(pos1, 2));
1758        array[SECOND] = toInt(input.substr(pos2));
1759    });
1760
1761    // LOCALES
1762
1763    function localeIsPM (input) {
1764        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing str
vendor: 11,105 bytes, lines 1764-2080
1764ings like arrays
1765        // Using charAt should be more compatible.
1766        return ((input + '').toLowerCase().charAt(0) === 'p');
1767    }
1768
1769    var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
1770    function localeMeridiem (hours, minutes, isLower) {
1771        if (hours > 11) {
1772            return isLower ? 'pm' : 'PM';
1773        } else {
1774            return isLower ? 'am' : 'AM';
1775        }
1776    }
1777
1778
1779    // MOMENTS
1780
1781    // Setting the hour should keep the time, because the user explicitly
1782    // specified which hour they want. So trying to maintain the same hour (in
1783    // a new timezone) makes sense. Adding/subtracting hours does not follow
1784    // this rule.
1785    var getSetHour = makeGetSet('Hours', true);
1786
1787    var baseConfig = {
1788        calendar: defaultCalendar,
1789        longDateFormat: defaultLongDateFormat,
1790        invalidDate: defaultInvalidDate,
1791        ordinal: defaultOrdinal,
1792        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
1793        relativeTime: defaultRelativeTime,
1794
1795        months: defaultLocaleMonths,
1796        monthsShort: defaultLocaleMonthsShort,
1797
1798        week: defaultLocaleWeek,
1799
1800        weekdays: defaultLocaleWeekdays,
1801        weekdaysMin: defaultLocaleWeekdaysMin,
1802        weekdaysShort: defaultLocaleWeekdaysShort,
1803
1804        meridiemParse: defaultLocaleMeridiemParse
1805    };
1806
1807    // internal storage for locale config files
1808    var locales = {};
1809    var localeFamilies = {};
1810    var globalLocale;
1811
1812    function normalizeLocale(key) {
1813        return key ? key.toLowerCase().replace('_', '-') : key;
1814    }
1815
1816    // pick the locale from the array
1817    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
1818    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
1819    function chooseLocale(names) {
1820        var i = 0, j, next, locale, split;
1821
1822        while (i < names.length) {
1823            split = normalizeLocale(names[i]).split('-');
1824            j = split.length;
1825            next = normalizeLocale(names[i + 1]);
1826            next = next ? next.split('-') : null;
1827            while (j > 0) {
1828                locale = loadLocale(split.slice(0, j).join('-'));
1829                if (locale) {
1830                    return locale;
1831                }
1832                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
1833                    //the next array item is better than a shallower substring of this one
1834                    break;
1835                }
1836                j--;
1837            }
1838            i++;
1839        }
1840        return globalLocale;
1841    }
1842
1843    function loadLocale(name) {
1844        var oldLocale = null;
1845        // TODO: Find a better way to register and load all the locales in Node
1846        if (!locales[name] && (typeof module !== 'undefined') &&
1847                module && module.exports) {
1848            try {
1849                oldLocale = globalLocale._abbr;
1850                var aliasedRequire = require;
1851                aliasedRequire('./locale/' + name);
1852                getSetGlobalLocale(oldLocale);
1853            } catch (e) {}
1854        }
1855        return locales[name];
1856    }
1857
1858    // This function will load locale and then set the global locale.  If
1859    // no arguments are passed in, it will simply return the current global
1860    // locale key.
1861    function getSetGlobalLocale (key, values) {
1862        var data;
1863        if (key) {
1864            if (isUndefined(values)) {
1865                data = getLocale(key);
1866            }
1867            else {
1868                data = defineLocale(key, values);
1869            }
1870
1871            if (data) {
1872                // moment.duration._locale = moment._locale = data;
1873                globalLocale = data;
1874            }
1875            else {
1876                if ((typeof console !==  'undefined') && console.warn) {
1877                    //warn user if arguments are passed but the locale could not be set
1878                    console.warn('Locale ' + key +  ' not found. Did you forget to load it?');
1879                }
1880            }
1881        }
1882
1883        return globalLocale._abbr;
1884    }
1885
1886    function defineLocale (name, config) {
1887        if (config !== null) {
1888            var locale, parentConfig = baseConfig;
1889            config.abbr = name;
1890            if (locales[name] != null) {
1891                deprecateSimple('defineLocaleOverride',
1892                        'use moment.updateLocale(localeName, config) to change ' +
1893                        'an existing locale. moment.defineLocale(localeName, ' +
1894                        'config) should only be used for creating a new locale ' +
1895                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
1896                parentConfig = locales[name]._config;
1897            } else if (config.parentLocale != null) {
1898                if (locales[config.parentLocale] != null) {
1899                    parentConfig = locales[config.parentLocale]._config;
1900                } else {
1901                    locale = loadLocale(config.parentLocale);
1902                    if (locale != null) {
1903                        parentConfig = locale._config;
1904                    } else {
1905                        if (!localeFamilies[config.parentLocale]) {
1906                            localeFamilies[config.parentLocale] = [];
1907                        }
1908                        localeFamilies[config.parentLocale].push({
1909                            name: name,
1910                            config: config
1911                        });
1912                        return null;
1913                    }
1914                }
1915            }
1916            locales[name] = new Locale(mergeConfigs(parentConfig, config));
1917
1918            if (localeFamilies[name]) {
1919                localeFamilies[name].forEach(function (x) {
1920                    defineLocale(x.name, x.config);
1921                });
1922            }
1923
1924            // backwards compat for now: also set the locale
1925            // make sure we set the locale AFTER all child locales have been
1926            // created, so we won't end up with the child locale set.
1927            getSetGlobalLocale(name);
1928
1929
1930            return locales[name];
1931        } else {
1932            // useful for testing
1933            delete locales[name];
1934            return null;
1935        }
1936    }
1937
1938    function updateLocale(name, config) {
1939        if (config != null) {
1940            var locale, tmpLocale, parentConfig = baseConfig;
1941            // MERGE
1942            tmpLocale = loadLocale(name);
1943            if (tmpLocale != null) {
1944                parentConfig = tmpLocale._config;
1945            }
1946            config = mergeConfigs(parentConfig, config);
1947            locale = new Locale(config);
1948            locale.parentLocale = locales[name];
1949            locales[name] = locale;
1950
1951            // backwards compat for now: also set the locale
1952            getSetGlobalLocale(name);
1953        } else {
1954            // pass null for config to unupdate, useful for tests
1955            if (locales[name] != null) {
1956                if (locales[name].parentLocale != null) {
1957                    locales[name] = locales[name].parentLocale;
1958                } else if (locales[name] != null) {
1959                    delete locales[name];
1960                }
1961            }
1962        }
1963        return locales[name];
1964    }
1965
1966    // returns locale data
1967    function getLocale (key) {
1968        var locale;
1969
1970        if (key && key._locale && key._locale._abbr) {
1971            key = key._locale._abbr;
1972        }
1973
1974        if (!key) {
1975            return globalLocale;
1976        }
1977
1978        if (!isArray(key)) {
1979            //short-circuit everything else
1980            locale = loadLocale(key);
1981            if (locale) {
1982                return locale;
1983            }
1984            key = [key];
1985        }
1986
1987        return chooseLocale(key);
1988    }
1989
1990    function listLocales() {
1991        return keys(locales);
1992    }
1993
1994    function checkOverflow (m) {
1995        var overflow;
1996        var a = m._a;
1997
1998        if (a && getParsingFlags(m).overflow === -2) {
1999            overflow =
2000                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :
2001                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
2002                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
2003                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :
2004                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :
2005                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
2006                -1;
2007
2008            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
2009                overflow = DATE;
2010            }
2011            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
2012                overflow = WEEK;
2013            }
2014            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
2015                overflow = WEEKDAY;
2016            }
2017
2018            getParsingFlags(m).overflow = overflow;
2019        }
2020
2021        return m;
2022    }
2023
2024    // Pick the first defined of two or three arguments.
2025    function defaults(a, b, c) {
2026        if (a != null) {
2027            return a;
2028        }
2029        if (b != null) {
2030            return b;
2031        }
2032        return c;
2033    }
2034
2035    function currentDateArray(config) {
2036        // hooks is actually the exported moment object
2037        var nowValue = new Date(hooks.now());
2038        if (config._useUTC) {
2039            return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
2040        }
2041        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
2042    }
2043
2044    // convert an array to a date.
2045    // the array should mirror the parameters below
2046    // note: all values past the year are optional and will default to the lowest possible value.
2047    // [year, month, day , hour, minute, second, millisecond]
2048    function configFromArray (config) {
2049        var i, date, input = [], currentDate, expectedWeekday, yearToUse;
2050
2051        if (config._d) {
2052            return;
2053        }
2054
2055        currentDate = currentDateArray(config);
2056
2057        //compute day of the year from weeks and weekdays
2058        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
2059            dayOfYearFromWeekInfo(config);
2060        }
2061
2062        //if the day of the year is set, figure out what it is
2063        if (config._dayOfYear != null) {
2064            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
2065
2066            if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {
2067                getParsingFlags(config)._overflowDayOfYear = true;
2068            }
2069
2070            date = createUTCDate(yearToUse, 0, config._dayOfYear);
2071            config._a[MONTH] = date.getUTCMonth();
2072            config._a[DATE] = date.getUTCDate();
2073        }
2074
2075        // Default to current date.
2076        // * if no year, month, day of month are given, default to today
2077        // * if day of month is given, default month and year
2078        // * if month is given, default only year
2079        // * if year is given, don't default anything
2080        for (i = 0; i < 3 && config._a[i] == null; ++i) {
vendor: 81,024 bytes, lines 2081-4551
2081            config._a[i] = input[i] = currentDate[i];
2082        }
2083
2084        // Zero out whatever was not defaulted, including time
2085        for (; i < 7; i++) {
2086            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
2087        }
2088
2089        // Check for 24:00:00.000
2090        if (config._a[HOUR] === 24 &&
2091                config._a[MINUTE] === 0 &&
2092                config._a[SECOND] === 0 &&
2093                config._a[MILLISECOND] === 0) {
2094            config._nextDay = true;
2095            config._a[HOUR] = 0;
2096        }
2097
2098        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
2099        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();
2100
2101        // Apply timezone offset from input. The actual utcOffset can be changed
2102        // with parseZone.
2103        if (config._tzm != null) {
2104            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
2105        }
2106
2107        if (config._nextDay) {
2108            config._a[HOUR] = 24;
2109        }
2110
2111        // check for mismatching day of week
2112        if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {
2113            getParsingFlags(config).weekdayMismatch = true;
2114        }
2115    }
2116
2117    function dayOfYearFromWeekInfo(config) {
2118        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
2119
2120        w = config._w;
2121        if (w.GG != null || w.W != null || w.E != null) {
2122            dow = 1;
2123            doy = 4;
2124
2125            // TODO: We need to take the current isoWeekYear, but that depends on
2126            // how we interpret now (local, utc, fixed offset). So create
2127            // a now version of current config (take local/utc/offset flags, and
2128            // create now).
2129            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
2130            week = defaults(w.W, 1);
2131            weekday = defaults(w.E, 1);
2132            if (weekday < 1 || weekday > 7) {
2133                weekdayOverflow = true;
2134            }
2135        } else {
2136            dow = config._locale._week.dow;
2137            doy = config._locale._week.doy;
2138
2139            var curWeek = weekOfYear(createLocal(), dow, doy);
2140
2141            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
2142
2143            // Default to current week.
2144            week = defaults(w.w, curWeek.week);
2145
2146            if (w.d != null) {
2147                // weekday -- low day numbers are considered next week
2148                weekday = w.d;
2149                if (weekday < 0 || weekday > 6) {
2150                    weekdayOverflow = true;
2151                }
2152            } else if (w.e != null) {
2153                // local weekday -- counting starts from beginning of week
2154                weekday = w.e + dow;
2155                if (w.e < 0 || w.e > 6) {
2156                    weekdayOverflow = true;
2157                }
2158            } else {
2159                // default to beginning of week
2160                weekday = dow;
2161            }
2162        }
2163        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
2164            getParsingFlags(config)._overflowWeeks = true;
2165        } else if (weekdayOverflow != null) {
2166            getParsingFlags(config)._overflowWeekday = true;
2167        } else {
2168            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
2169            config._a[YEAR] = temp.year;
2170            config._dayOfYear = temp.dayOfYear;
2171        }
2172    }
2173
2174    // iso 8601 regex
2175    // 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)
2176    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)?)?$/;
2177    var 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)?)?$/;
2178
2179    var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
2180
2181    var isoDates = [
2182        ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
2183        ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
2184        ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
2185        ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
2186        ['YYYY-DDD', /\d{4}-\d{3}/],
2187        ['YYYY-MM', /\d{4}-\d\d/, false],
2188        ['YYYYYYMMDD', /[+-]\d{10}/],
2189        ['YYYYMMDD', /\d{8}/],
2190        // YYYYMM is NOT allowed by the standard
2191        ['GGGG[W]WWE', /\d{4}W\d{3}/],
2192        ['GGGG[W]WW', /\d{4}W\d{2}/, false],
2193        ['YYYYDDD', /\d{7}/]
2194    ];
2195
2196    // iso time formats and regexes
2197    var isoTimes = [
2198        ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
2199        ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
2200        ['HH:mm:ss', /\d\d:\d\d:\d\d/],
2201        ['HH:mm', /\d\d:\d\d/],
2202        ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
2203        ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
2204        ['HHmmss', /\d\d\d\d\d\d/],
2205        ['HHmm', /\d\d\d\d/],
2206        ['HH', /\d\d/]
2207    ];
2208
2209    var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
2210
2211    // date from iso format
2212    function configFromISO(config) {
2213        var i, l,
2214            string = config._i,
2215            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
2216            allowTime, dateFormat, timeFormat, tzFormat;
2217
2218        if (match) {
2219            getParsingFlags(config).iso = true;
2220
2221            for (i = 0, l = isoDates.length; i < l; i++) {
2222                if (isoDates[i][1].exec(match[1])) {
2223                    dateFormat = isoDates[i][0];
2224                    allowTime = isoDates[i][2] !== false;
2225                    break;
2226                }
2227            }
2228            if (dateFormat == null) {
2229                config._isValid = false;
2230                return;
2231            }
2232            if (match[3]) {
2233                for (i = 0, l = isoTimes.length; i < l; i++) {
2234                    if (isoTimes[i][1].exec(match[3])) {
2235                        // match[2] should be 'T' or space
2236                        timeFormat = (match[2] || ' ') + isoTimes[i][0];
2237                        break;
2238                    }
2239                }
2240                if (timeFormat == null) {
2241                    config._isValid = false;
2242                    return;
2243                }
2244            }
2245            if (!allowTime && timeFormat != null) {
2246                config._isValid = false;
2247                return;
2248            }
2249            if (match[4]) {
2250                if (tzRegex.exec(match[4])) {
2251                    tzFormat = 'Z';
2252                } else {
2253                    config._isValid = false;
2254                    return;
2255                }
2256            }
2257            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
2258            configFromStringAndFormat(config);
2259        } else {
2260            config._isValid = false;
2261        }
2262    }
2263
2264    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
2265    var 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}))$/;
2266
2267    function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
2268        var result = [
2269            untruncateYear(yearStr),
2270            defaultLocaleMonthsShort.indexOf(monthStr),
2271            parseInt(dayStr, 10),
2272            parseInt(hourStr, 10),
2273            parseInt(minuteStr, 10)
2274        ];
2275
2276        if (secondStr) {
2277            result.push(parseInt(secondStr, 10));
2278        }
2279
2280        return result;
2281    }
2282
2283    function untruncateYear(yearStr) {
2284        var year = parseInt(yearStr, 10);
2285        if (year <= 49) {
2286            return 2000 + year;
2287        } else if (year <= 999) {
2288            return 1900 + year;
2289        }
2290        return year;
2291    }
2292
2293    function preprocessRFC2822(s) {
2294        // Remove comments and folding whitespace and replace multiple-spaces with a single space
2295        return s.replace(/\([^)]*\)|[\n\t]/g, ' ').replace(/(\s\s+)/g, ' ').replace(/^\s\s*/, '').replace(/\s\s*$/, '');
2296    }
2297
2298    function checkWeekday(weekdayStr, parsedInput, config) {
2299        if (weekdayStr) {
2300            // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.
2301            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
2302                weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();
2303            if (weekdayProvided !== weekdayActual) {
2304                getParsingFlags(config).weekdayMismatch = true;
2305                config._isValid = false;
2306                return false;
2307            }
2308        }
2309        return true;
2310    }
2311
2312    var obsOffsets = {
2313        UT: 0,
2314        GMT: 0,
2315        EDT: -4 * 60,
2316        EST: -5 * 60,
2317        CDT: -5 * 60,
2318        CST: -6 * 60,
2319        MDT: -6 * 60,
2320        MST: -7 * 60,
2321        PDT: -7 * 60,
2322        PST: -8 * 60
2323    };
2324
2325    function calculateOffset(obsOffset, militaryOffset, numOffset) {
2326        if (obsOffset) {
2327            return obsOffsets[obsOffset];
2328        } else if (militaryOffset) {
2329            // the only allowed military tz is Z
2330            return 0;
2331        } else {
2332            var hm = parseInt(numOffset, 10);
2333            var m = hm % 100, h = (hm - m) / 100;
2334            return h * 60 + m;
2335        }
2336    }
2337
2338    // date and time from ref 2822 format
2339    function configFromRFC2822(config) {
2340        var match = rfc2822.exec(preprocessRFC2822(config._i));
2341        if (match) {
2342            var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);
2343            if (!checkWeekday(match[1], parsedArray, config)) {
2344                return;
2345            }
2346
2347            config._a = parsedArray;
2348            config._tzm = calculateOffset(match[8], match[9], match[10]);
2349
2350            config._d = createUTCDate.apply(null, config._a);
2351            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
2352
2353            getParsingFlags(config).rfc2822 = true;
2354        } else {
2355            config._isValid = false;
2356        }
2357    }
2358
2359    // date from iso format or fallback
2360    function configFromString(config) {
2361        var matched = aspNetJsonRegex.exec(config._i);
2362
2363        if (matched !== null) {
2364            config._d = new Date(+matched[1]);
2365            return;
2366        }
2367
2368        configFromISO(config);
2369        if (config._isValid === false) {
2370            delete config._isValid;
2371        } else {
2372            return;
2373        }
2374
2375        configFromRFC2822(config);
2376        if (config._isValid === false) {
2377            delete config._isValid;
2378        } else {
2379            return;
2380        }
2381
2382        // Final attempt, use Input Fallback
2383        hooks.createFromInputFallback(config);
2384    }
2385
2386    hooks.createFromInputFallback = deprecate(
2387        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
2388        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
2389        'discouraged and will be removed in an upcoming major release. Please refer to ' +
2390        'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
2391        function (config) {
2392            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
2393        }
2394    );
2395
2396    // constant that refers to the ISO standard
2397    hooks.ISO_8601 = function () {};
2398
2399    // constant that refers to the RFC 2822 form
2400    hooks.RFC_2822 = function () {};
2401
2402    // date from string and format string
2403    function configFromStringAndFormat(config) {
2404        // TODO: Move this to another part of the creation flow to prevent circular deps
2405        if (config._f === hooks.ISO_8601) {
2406            configFromISO(config);
2407            return;
2408        }
2409        if (config._f === hooks.RFC_2822) {
2410            configFromRFC2822(config);
2411            return;
2412        }
2413        config._a = [];
2414        getParsingFlags(config).empty = true;
2415
2416        // This array is used to make a Date, either with `new Date` or `Date.UTC`
2417        var string = '' + config._i,
2418            i, parsedInput, tokens, token, skipped,
2419            stringLength = string.length,
2420            totalParsedInputLength = 0;
2421
2422        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
2423
2424        for (i = 0; i < tokens.length; i++) {
2425            token = tokens[i];
2426            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
2427            // console.log('token', token, 'parsedInput', parsedInput,
2428            //         'regex', getParseRegexForToken(token, config));
2429            if (parsedInput) {
2430                skipped = string.substr(0, string.indexOf(parsedInput));
2431                if (skipped.length > 0) {
2432                    getParsingFlags(config).unusedInput.push(skipped);
2433                }
2434                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
2435                totalParsedInputLength += parsedInput.length;
2436            }
2437            // don't parse if it's not a known token
2438            if (formatTokenFunctions[token]) {
2439                if (parsedInput) {
2440                    getParsingFlags(config).empty = false;
2441                }
2442                else {
2443                    getParsingFlags(config).unusedTokens.push(token);
2444                }
2445                addTimeToArrayFromToken(token, parsedInput, config);
2446            }
2447            else if (config._strict && !parsedInput) {
2448                getParsingFlags(config).unusedTokens.push(token);
2449            }
2450        }
2451
2452        // add remaining unparsed input length to the string
2453        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
2454        if (string.length > 0) {
2455            getParsingFlags(config).unusedInput.push(string);
2456        }
2457
2458        // clear _12h flag if hour is <= 12
2459        if (config._a[HOUR] <= 12 &&
2460            getParsingFlags(config).bigHour === true &&
2461            config._a[HOUR] > 0) {
2462            getParsingFlags(config).bigHour = undefined;
2463        }
2464
2465        getParsingFlags(config).parsedDateParts = config._a.slice(0);
2466        getParsingFlags(config).meridiem = config._meridiem;
2467        // handle meridiem
2468        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
2469
2470        configFromArray(config);
2471        checkOverflow(config);
2472    }
2473
2474
2475    function meridiemFixWrap (locale, hour, meridiem) {
2476        var isPm;
2477
2478        if (meridiem == null) {
2479            // nothing to do
2480            return hour;
2481        }
2482        if (locale.meridiemHour != null) {
2483            return locale.meridiemHour(hour, meridiem);
2484        } else if (locale.isPM != null) {
2485            // Fallback
2486            isPm = locale.isPM(meridiem);
2487            if (isPm && hour < 12) {
2488                hour += 12;
2489            }
2490            if (!isPm && hour === 12) {
2491                hour = 0;
2492            }
2493            return hour;
2494        } else {
2495            // this is not supposed to happen
2496            return hour;
2497        }
2498    }
2499
2500    // date from string and array of format strings
2501    function configFromStringAndArray(config) {
2502        var tempConfig,
2503            bestMoment,
2504
2505            scoreToBeat,
2506            i,
2507            currentScore;
2508
2509        if (config._f.length === 0) {
2510            getParsingFlags(config).invalidFormat = true;
2511            config._d = new Date(NaN);
2512            return;
2513        }
2514
2515        for (i = 0; i < config._f.length; i++) {
2516            currentScore = 0;
2517            tempConfig = copyConfig({}, config);
2518            if (config._useUTC != null) {
2519                tempConfig._useUTC = config._useUTC;
2520            }
2521            tempConfig._f = config._f[i];
2522            configFromStringAndFormat(tempConfig);
2523
2524            if (!isValid(tempConfig)) {
2525                continue;
2526            }
2527
2528            // if there is any input that was not parsed add a penalty for that format
2529            currentScore += getParsingFlags(tempConfig).charsLeftOver;
2530
2531            //or tokens
2532            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
2533
2534            getParsingFlags(tempConfig).score = currentScore;
2535
2536            if (scoreToBeat == null || currentScore < scoreToBeat) {
2537                scoreToBeat = currentScore;
2538                bestMoment = tempConfig;
2539            }
2540        }
2541
2542        extend(config, bestMoment || tempConfig);
2543    }
2544
2545    function configFromObject(config) {
2546        if (config._d) {
2547            return;
2548        }
2549
2550        var i = normalizeObjectUnits(config._i);
2551        config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
2552            return obj && parseInt(obj, 10);
2553        });
2554
2555        configFromArray(config);
2556    }
2557
2558    function createFromConfig (config) {
2559        var res = new Moment(checkOverflow(prepareConfig(config)));
2560        if (res._nextDay) {
2561            // Adding is smart enough around DST
2562            res.add(1, 'd');
2563            res._nextDay = undefined;
2564        }
2565
2566        return res;
2567    }
2568
2569    function prepareConfig (config) {
2570        var input = config._i,
2571            format = config._f;
2572
2573        config._locale = config._locale || getLocale(config._l);
2574
2575        if (input === null || (format === undefined && input === '')) {
2576            return createInvalid({nullInput: true});
2577        }
2578
2579        if (typeof input === 'string') {
2580            config._i = input = config._locale.preparse(input);
2581        }
2582
2583        if (isMoment(input)) {
2584            return new Moment(checkOverflow(input));
2585        } else if (isDate(input)) {
2586            config._d = input;
2587        } else if (isArray(format)) {
2588            configFromStringAndArray(config);
2589        } else if (format) {
2590            configFromStringAndFormat(config);
2591        }  else {
2592            configFromInput(config);
2593        }
2594
2595        if (!isValid(config)) {
2596            config._d = null;
2597        }
2598
2599        return config;
2600    }
2601
2602    function configFromInput(config) {
2603        var input = config._i;
2604        if (isUndefined(input)) {
2605            config._d = new Date(hooks.now());
2606        } else if (isDate(input)) {
2607            config._d = new Date(input.valueOf());
2608        } else if (typeof input === 'string') {
2609            configFromString(config);
2610        } else if (isArray(input)) {
2611            config._a = map(input.slice(0), function (obj) {
2612                return parseInt(obj, 10);
2613            });
2614            configFromArray(config);
2615        } else if (isObject(input)) {
2616            configFromObject(config);
2617        } else if (isNumber(input)) {
2618            // from milliseconds
2619            config._d = new Date(input);
2620        } else {
2621            hooks.createFromInputFallback(config);
2622        }
2623    }
2624
2625    function createLocalOrUTC (input, format, locale, strict, isUTC) {
2626        var c = {};
2627
2628        if (locale === true || locale === false) {
2629            strict = locale;
2630            locale = undefined;
2631        }
2632
2633        if ((isObject(input) && isObjectEmpty(input)) ||
2634                (isArray(input) && input.length === 0)) {
2635            input = undefined;
2636        }
2637        // object construction must be done this way.
2638        // https://github.com/moment/moment/issues/1423
2639        c._isAMomentObject = true;
2640        c._useUTC = c._isUTC = isUTC;
2641        c._l = locale;
2642        c._i = input;
2643        c._f = format;
2644        c._strict = strict;
2645
2646        return createFromConfig(c);
2647    }
2648
2649    function createLocal (input, format, locale, strict) {
2650        return createLocalOrUTC(input, format, locale, strict, false);
2651    }
2652
2653    var prototypeMin = deprecate(
2654        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
2655        function () {
2656            var other = createLocal.apply(null, arguments);
2657            if (this.isValid() && other.isValid()) {
2658                return other < this ? this : other;
2659            } else {
2660                return createInvalid();
2661            }
2662        }
2663    );
2664
2665    var prototypeMax = deprecate(
2666        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
2667        function () {
2668            var other = createLocal.apply(null, arguments);
2669            if (this.isValid() && other.isValid()) {
2670                return other > this ? this : other;
2671            } else {
2672                return createInvalid();
2673            }
2674        }
2675    );
2676
2677    // Pick a moment m from moments so that m[fn](other) is true for all
2678    // other. This relies on the function fn to be transitive.
2679    //
2680    // moments should either be an array of moment objects or an array, whose
2681    // first element is an array of moment objects.
2682    function pickBy(fn, moments) {
2683        var res, i;
2684        if (moments.length === 1 && isArray(moments[0])) {
2685            moments = moments[0];
2686        }
2687        if (!moments.length) {
2688            return createLocal();
2689        }
2690        res = moments[0];
2691        for (i = 1; i < moments.length; ++i) {
2692            if (!moments[i].isValid() || moments[i][fn](res)) {
2693                res = moments[i];
2694            }
2695        }
2696        return res;
2697    }
2698
2699    // TODO: Use [].sort instead?
2700    function min () {
2701        var args = [].slice.call(arguments, 0);
2702
2703        return pickBy('isBefore', args);
2704    }
2705
2706    function max () {
2707        var args = [].slice.call(arguments, 0);
2708
2709        return pickBy('isAfter', args);
2710    }
2711
2712    var now = function () {
2713        return Date.now ? Date.now() : +(new Date());
2714    };
2715
2716    var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];
2717
2718    function isDurationValid(m) {
2719        for (var key in m) {
2720            if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {
2721                return false;
2722            }
2723        }
2724
2725        var unitHasDecimal = false;
2726        for (var i = 0; i < ordering.length; ++i) {
2727            if (m[ordering[i]]) {
2728                if (unitHasDecimal) {
2729                    return false; // only allow non-integers for smallest unit
2730                }
2731                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
2732                    unitHasDecimal = true;
2733                }
2734            }
2735        }
2736
2737        return true;
2738    }
2739
2740    function isValid$1() {
2741        return this._isValid;
2742    }
2743
2744    function createInvalid$1() {
2745        return createDuration(NaN);
2746    }
2747
2748    function Duration (duration) {
2749        var normalizedInput = normalizeObjectUnits(duration),
2750            years = normalizedInput.year || 0,
2751            quarters = normalizedInput.quarter || 0,
2752            months = normalizedInput.month || 0,
2753            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
2754            days = normalizedInput.day || 0,
2755            hours = normalizedInput.hour || 0,
2756            minutes = normalizedInput.minute || 0,
2757            seconds = normalizedInput.second || 0,
2758            milliseconds = normalizedInput.millisecond || 0;
2759
2760        this._isValid = isDurationValid(normalizedInput);
2761
2762        // representation for dateAddRemove
2763        this._milliseconds = +milliseconds +
2764            seconds * 1e3 + // 1000
2765            minutes * 6e4 + // 1000 * 60
2766            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
2767        // Because of dateAddRemove treats 24 hours as different from a
2768        // day when working around DST, we need to store them separately
2769        this._days = +days +
2770            weeks * 7;
2771        // It is impossible to translate months into days without knowing
2772        // which months you are are talking about, so we have to store
2773        // it separately.
2774        this._months = +months +
2775            quarters * 3 +
2776            years * 12;
2777
2778        this._data = {};
2779
2780        this._locale = getLocale();
2781
2782        this._bubble();
2783    }
2784
2785    function isDuration (obj) {
2786        return obj instanceof Duration;
2787    }
2788
2789    function absRound (number) {
2790        if (number < 0) {
2791            return Math.round(-1 * number) * -1;
2792        } else {
2793            return Math.round(number);
2794        }
2795    }
2796
2797    // FORMATTING
2798
2799    function offset (token, separator) {
2800        addFormatToken(token, 0, 0, function () {
2801            var offset = this.utcOffset();
2802            var sign = '+';
2803            if (offset < 0) {
2804                offset = -offset;
2805                sign = '-';
2806            }
2807            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);
2808        });
2809    }
2810
2811    offset('Z', ':');
2812    offset('ZZ', '');
2813
2814    // PARSING
2815
2816    addRegexToken('Z',  matchShortOffset);
2817    addRegexToken('ZZ', matchShortOffset);
2818    addParseToken(['Z', 'ZZ'], function (input, array, config) {
2819        config._useUTC = true;
2820        config._tzm = offsetFromString(matchShortOffset, input);
2821    });
2822
2823    // HELPERS
2824
2825    // timezone chunker
2826    // '+10:00' > ['10',  '00']
2827    // '-1530'  > ['-15', '30']
2828    var chunkOffset = /([\+\-]|\d\d)/gi;
2829
2830    function offsetFromString(matcher, string) {
2831        var matches = (string || '').match(matcher);
2832
2833        if (matches === null) {
2834            return null;
2835        }
2836
2837        var chunk   = matches[matches.length - 1] || [];
2838        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];
2839        var minutes = +(parts[1] * 60) + toInt(parts[2]);
2840
2841        return minutes === 0 ?
2842          0 :
2843          parts[0] === '+' ? minutes : -minutes;
2844    }
2845
2846    // Return a moment from input, that is local/utc/zone equivalent to model.
2847    function cloneWithOffset(input, model) {
2848        var res, diff;
2849        if (model._isUTC) {
2850            res = model.clone();
2851            diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
2852            // Use low-level api, because this fn is low-level api.
2853            res._d.setTime(res._d.valueOf() + diff);
2854            hooks.updateOffset(res, false);
2855            return res;
2856        } else {
2857            return createLocal(input).local();
2858        }
2859    }
2860
2861    function getDateOffset (m) {
2862        // On Firefox.24 Date#getTimezoneOffset returns a floating point.
2863        // https://github.com/moment/moment/pull/1871
2864        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;
2865    }
2866
2867    // HOOKS
2868
2869    // This function will be called whenever a moment is mutated.
2870    // It is intended to keep the offset in sync with the timezone.
2871    hooks.updateOffset = function () {};
2872
2873    // MOMENTS
2874
2875    // keepLocalTime = true means only change the timezone, without
2876    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
2877    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
2878    // +0200, so we adjust the time as needed, to be valid.
2879    //
2880    // Keeping the time actually adds/subtracts (one hour)
2881    // from the actual represented time. That is why we call updateOffset
2882    // a second time. In case it wants us to change the offset again
2883    // _changeInProgress == true case, then we have to adjust, because
2884    // there is no such time in the given timezone.
2885    function getSetOffset (input, keepLocalTime, keepMinutes) {
2886        var offset = this._offset || 0,
2887            localAdjust;
2888        if (!this.isValid()) {
2889            return input != null ? this : NaN;
2890        }
2891        if (input != null) {
2892            if (typeof input === 'string') {
2893                input = offsetFromString(matchShortOffset, input);
2894                if (input === null) {
2895                    return this;
2896                }
2897            } else if (Math.abs(input) < 16 && !keepMinutes) {
2898                input = input * 60;
2899            }
2900            if (!this._isUTC && keepLocalTime) {
2901                localAdjust = getDateOffset(this);
2902            }
2903            this._offset = input;
2904            this._isUTC = true;
2905            if (localAdjust != null) {
2906                this.add(localAdjust, 'm');
2907            }
2908            if (offset !== input) {
2909                if (!keepLocalTime || this._changeInProgress) {
2910                    addSubtract(this, createDuration(input - offset, 'm'), 1, false);
2911                } else if (!this._changeInProgress) {
2912                    this._changeInProgress = true;
2913                    hooks.updateOffset(this, true);
2914                    this._changeInProgress = null;
2915                }
2916            }
2917            return this;
2918        } else {
2919            return this._isUTC ? offset : getDateOffset(this);
2920        }
2921    }
2922
2923    function getSetZone (input, keepLocalTime) {
2924        if (input != null) {
2925            if (typeof input !== 'string') {
2926                input = -input;
2927            }
2928
2929            this.utcOffset(input, keepLocalTime);
2930
2931            return this;
2932        } else {
2933            return -this.utcOffset();
2934        }
2935    }
2936
2937    function setOffsetToUTC (keepLocalTime) {
2938        return this.utcOffset(0, keepLocalTime);
2939    }
2940
2941    function setOffsetToLocal (keepLocalTime) {
2942        if (this._isUTC) {
2943            this.utcOffset(0, keepLocalTime);
2944            this._isUTC = false;
2945
2946            if (keepLocalTime) {
2947                this.subtract(getDateOffset(this), 'm');
2948            }
2949        }
2950        return this;
2951    }
2952
2953    function setOffsetToParsedOffset () {
2954        if (this._tzm != null) {
2955            this.utcOffset(this._tzm, false, true);
2956        } else if (typeof this._i === 'string') {
2957            var tZone = offsetFromString(matchOffset, this._i);
2958            if (tZone != null) {
2959                this.utcOffset(tZone);
2960            }
2961            else {
2962                this.utcOffset(0, true);
2963            }
2964        }
2965        return this;
2966    }
2967
2968    function hasAlignedHourOffset (input) {
2969        if (!this.isValid()) {
2970            return false;
2971        }
2972        input = input ? createLocal(input).utcOffset() : 0;
2973
2974        return (this.utcOffset() - input) % 60 === 0;
2975    }
2976
2977    function isDaylightSavingTime () {
2978        return (
2979            this.utcOffset() > this.clone().month(0).utcOffset() ||
2980            this.utcOffset() > this.clone().month(5).utcOffset()
2981        );
2982    }
2983
2984    function isDaylightSavingTimeShifted () {
2985        if (!isUndefined(this._isDSTShifted)) {
2986            return this._isDSTShifted;
2987        }
2988
2989        var c = {};
2990
2991        copyConfig(c, this);
2992        c = prepareConfig(c);
2993
2994        if (c._a) {
2995            var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
2996            this._isDSTShifted = this.isValid() &&
2997                compareArrays(c._a, other.toArray()) > 0;
2998        } else {
2999            this._isDSTShifted = false;
3000        }
3001
3002        return this._isDSTShifted;
3003    }
3004
3005    function isLocal () {
3006        return this.isValid() ? !this._isUTC : false;
3007    }
3008
3009    function isUtcOffset () {
3010        return this.isValid() ? this._isUTC : false;
3011    }
3012
3013    function isUtc () {
3014        return this.isValid() ? this._isUTC && this._offset === 0 : false;
3015    }
3016
3017    // ASP.NET json date format regex
3018    var aspNetRegex = /^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;
3019
3020    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
3021    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
3022    // and further modified to allow for strings containing both week and day
3023    var isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
3024
3025    function createDuration (input, key) {
3026        var duration = input,
3027            // matching against regexp is expensive, do it on demand
3028            match = null,
3029            sign,
3030            ret,
3031            diffRes;
3032
3033        if (isDuration(input)) {
3034            duration = {
3035                ms : input._milliseconds,
3036                d  : input._days,
3037                M  : input._months
3038            };
3039        } else if (isNumber(input)) {
3040            duration = {};
3041            if (key) {
3042                duration[key] = input;
3043            } else {
3044                duration.milliseconds = input;
3045            }
3046        } else if (!!(match = aspNetRegex.exec(input))) {
3047            sign = (match[1] === '-') ? -1 : 1;
3048            duration = {
3049                y  : 0,
3050                d  : toInt(match[DATE])                         * sign,
3051                h  : toInt(match[HOUR])                         * sign,
3052                m  : toInt(match[MINUTE])                       * sign,
3053                s  : toInt(match[SECOND])                       * sign,
3054                ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match
3055            };
3056        } else if (!!(match = isoRegex.exec(input))) {
3057            sign = (match[1] === '-') ? -1 : 1;
3058            duration = {
3059                y : parseIso(match[2], sign),
3060                M : parseIso(match[3], sign),
3061                w : parseIso(match[4], sign),
3062                d : parseIso(match[5], sign),
3063                h : parseIso(match[6], sign),
3064                m : parseIso(match[7], sign),
3065                s : parseIso(match[8], sign)
3066            };
3067        } else if (duration == null) {// checks for null or undefined
3068            duration = {};
3069        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {
3070            diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
3071
3072            duration = {};
3073            duration.ms = diffRes.milliseconds;
3074            duration.M = diffRes.months;
3075        }
3076
3077        ret = new Duration(duration);
3078
3079        if (isDuration(input) && hasOwnProp(input, '_locale')) {
3080            ret._locale = input._locale;
3081        }
3082
3083        return ret;
3084    }
3085
3086    createDuration.fn = Duration.prototype;
3087    createDuration.invalid = createInvalid$1;
3088
3089    function parseIso (inp, sign) {
3090        // We'd normally use ~~inp for this, but unfortunately it also
3091        // converts floats to ints.
3092        // inp may be undefined, so careful calling replace on it.
3093        var res = inp && parseFloat(inp.replace(',', '.'));
3094        // apply sign while we're at it
3095        return (isNaN(res) ? 0 : res) * sign;
3096    }
3097
3098    function positiveMomentsDifference(base, other) {
3099        var res = {};
3100
3101        res.months = other.month() - base.month() +
3102            (other.year() - base.year()) * 12;
3103        if (base.clone().add(res.months, 'M').isAfter(other)) {
3104            --res.months;
3105        }
3106
3107        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
3108
3109        return res;
3110    }
3111
3112    function momentsDifference(base, other) {
3113        var res;
3114        if (!(base.isValid() && other.isValid())) {
3115            return {milliseconds: 0, months: 0};
3116        }
3117
3118        other = cloneWithOffset(other, base);
3119        if (base.isBefore(other)) {
3120            res = positiveMomentsDifference(base, other);
3121        } else {
3122            res = positiveMomentsDifference(other, base);
3123            res.milliseconds = -res.milliseconds;
3124            res.months = -res.months;
3125        }
3126
3127        return res;
3128    }
3129
3130    // TODO: remove 'name' arg after deprecation is removed
3131    function createAdder(direction, name) {
3132        return function (val, period) {
3133            var dur, tmp;
3134            //invert the arguments, but complain about it
3135            if (period !== null && !isNaN(+period)) {
3136                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
3137                'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
3138                tmp = val; val = period; period = tmp;
3139            }
3140
3141            val = typeof val === 'string' ? +val : val;
3142            dur = createDuration(val, period);
3143            addSubtract(this, dur, direction);
3144            return this;
3145        };
3146    }
3147
3148    function addSubtract (mom, duration, isAdding, updateOffset) {
3149        var milliseconds = duration._milliseconds,
3150            days = absRound(duration._days),
3151            months = absRound(duration._months);
3152
3153        if (!mom.isValid()) {
3154            // No op
3155            return;
3156        }
3157
3158        updateOffset = updateOffset == null ? true : updateOffset;
3159
3160        if (months) {
3161            setMonth(mom, get(mom, 'Month') + months * isAdding);
3162        }
3163        if (days) {
3164            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
3165        }
3166        if (milliseconds) {
3167            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
3168        }
3169        if (updateOffset) {
3170            hooks.updateOffset(mom, days || months);
3171        }
3172    }
3173
3174    var add      = createAdder(1, 'add');
3175    var subtract = createAdder(-1, 'subtract');
3176
3177    function getCalendarFormat(myMoment, now) {
3178        var diff = myMoment.diff(now, 'days', true);
3179        return diff < -6 ? 'sameElse' :
3180                diff < -1 ? 'lastWeek' :
3181                diff < 0 ? 'lastDay' :
3182                diff < 1 ? 'sameDay' :
3183                diff < 2 ? 'nextDay' :
3184                diff < 7 ? 'nextWeek' : 'sameElse';
3185    }
3186
3187    function calendar$1 (time, formats) {
3188        // We want to compare the start of today, vs this.
3189        // Getting start-of-today depends on whether we're local/utc/offset or not.
3190        var now = time || createLocal(),
3191            sod = cloneWithOffset(now, this).startOf('day'),
3192            format = hooks.calendarFormat(this, sod) || 'sameElse';
3193
3194        var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
3195
3196        return this.format(output || this.localeData().calendar(format, this, createLocal(now)));
3197    }
3198
3199    function clone () {
3200        return new Moment(this);
3201    }
3202
3203    function isAfter (input, units) {
3204        var localInput = isMoment(input) ? input : createLocal(input);
3205        if (!(this.isValid() && localInput.isValid())) {
3206            return false;
3207        }
3208        units = normalizeUnits(units) || 'millisecond';
3209        if (units === 'millisecond') {
3210            return this.valueOf() > localInput.valueOf();
3211        } else {
3212            return localInput.valueOf() < this.clone().startOf(units).valueOf();
3213        }
3214    }
3215
3216    function isBefore (input, units) {
3217        var localInput = isMoment(input) ? input : createLocal(input);
3218        if (!(this.isValid() && localInput.isValid())) {
3219            return false;
3220        }
3221        units = normalizeUnits(units) || 'millisecond';
3222        if (units === 'millisecond') {
3223            return this.valueOf() < localInput.valueOf();
3224        } else {
3225            return this.clone().endOf(units).valueOf() < localInput.valueOf();
3226        }
3227    }
3228
3229    function isBetween (from, to, units, inclusivity) {
3230        var localFrom = isMoment(from) ? from : createLocal(from),
3231            localTo = isMoment(to) ? to : createLocal(to);
3232        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
3233            return false;
3234        }
3235        inclusivity = inclusivity || '()';
3236        return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) &&
3237            (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));
3238    }
3239
3240    function isSame (input, units) {
3241        var localInput = isMoment(input) ? input : createLocal(input),
3242            inputMs;
3243        if (!(this.isValid() && localInput.isValid())) {
3244            return false;
3245        }
3246        units = normalizeUnits(units) || 'millisecond';
3247        if (units === 'millisecond') {
3248            return this.valueOf() === localInput.valueOf();
3249        } else {
3250            inputMs = localInput.valueOf();
3251            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
3252        }
3253    }
3254
3255    function isSameOrAfter (input, units) {
3256        return this.isSame(input, units) || this.isAfter(input, units);
3257    }
3258
3259    function isSameOrBefore (input, units) {
3260        return this.isSame(input, units) || this.isBefore(input, units);
3261    }
3262
3263    function diff (input, units, asFloat) {
3264        var that,
3265            zoneDelta,
3266            output;
3267
3268        if (!this.isValid()) {
3269            return NaN;
3270        }
3271
3272        that = cloneWithOffset(input, this);
3273
3274        if (!that.isValid()) {
3275            return NaN;
3276        }
3277
3278        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
3279
3280        units = normalizeUnits(units);
3281
3282        switch (units) {
3283            case 'year': output = monthDiff(this, that) / 12; break;
3284            case 'month': output = monthDiff(this, that); break;
3285            case 'quarter': output = monthDiff(this, that) / 3; break;
3286            case 'second': output = (this - that) / 1e3; break; // 1000
3287            case 'minute': output = (this - that) / 6e4; break; // 1000 * 60
3288            case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60
3289            case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst
3290            case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst
3291            default: output = this - that;
3292        }
3293
3294        return asFloat ? output : absFloor(output);
3295    }
3296
3297    function monthDiff (a, b) {
3298        // difference in months
3299        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),
3300            // b is in (anchor - 1 month, anchor + 1 month)
3301            anchor = a.clone().add(wholeMonthDiff, 'months'),
3302            anchor2, adjust;
3303
3304        if (b - anchor < 0) {
3305            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
3306            // linear across the month
3307            adjust = (b - anchor) / (anchor - anchor2);
3308        } else {
3309            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
3310            // linear across the month
3311            adjust = (b - anchor) / (anchor2 - anchor);
3312        }
3313
3314        //check for negative zero, return zero if negative zero
3315        return -(wholeMonthDiff + adjust) || 0;
3316    }
3317
3318    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
3319    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
3320
3321    function toString () {
3322        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
3323    }
3324
3325    function toISOString(keepOffset) {
3326        if (!this.isValid()) {
3327            return null;
3328        }
3329        var utc = keepOffset !== true;
3330        var m = utc ? this.clone().utc() : this;
3331        if (m.year() < 0 || m.year() > 9999) {
3332            return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');
3333        }
3334        if (isFunction(Date.prototype.toISOString)) {
3335            // native implementation is ~50x faster, use it when we can
3336            if (utc) {
3337                return this.toDate().toISOString();
3338            } else {
3339                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));
3340            }
3341        }
3342        return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');
3343    }
3344
3345    /**
3346     * Return a human readable representation of a moment that can
3347     * also be evaluated to get a new moment which is the same
3348     *
3349     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
3350     */
3351    function inspect () {
3352        if (!this.isValid()) {
3353            return 'moment.invalid(/* ' + this._i + ' */)';
3354        }
3355        var func = 'moment';
3356        var zone = '';
3357        if (!this.isLocal()) {
3358            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
3359            zone = 'Z';
3360        }
3361        var prefix = '[' + func + '("]';
3362        var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';
3363        var datetime = '-MM-DD[T]HH:mm:ss.SSS';
3364        var suffix = zone + '[")]';
3365
3366        return this.format(prefix + year + datetime + suffix);
3367    }
3368
3369    function format (inputString) {
3370        if (!inputString) {
3371            inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
3372        }
3373        var output = formatMoment(this, inputString);
3374        return this.localeData().postformat(output);
3375    }
3376
3377    function from (time, withoutSuffix) {
3378        if (this.isValid() &&
3379                ((isMoment(time) && time.isValid()) ||
3380                 createLocal(time).isValid())) {
3381            return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
3382        } else {
3383            return this.localeData().invalidDate();
3384        }
3385    }
3386
3387    function fromNow (withoutSuffix) {
3388        return this.from(createLocal(), withoutSuffix);
3389    }
3390
3391    function to (time, withoutSuffix) {
3392        if (this.isValid() &&
3393                ((isMoment(time) && time.isValid()) ||
3394                 createLocal(time).isValid())) {
3395            return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
3396        } else {
3397            return this.localeData().invalidDate();
3398        }
3399    }
3400
3401    function toNow (withoutSuffix) {
3402        return this.to(createLocal(), withoutSuffix);
3403    }
3404
3405    // If passed a locale key, it will set the locale for this
3406    // instance.  Otherwise, it will return the locale configuration
3407    // variables for this instance.
3408    function locale (key) {
3409        var newLocaleData;
3410
3411        if (key === undefined) {
3412            return this._locale._abbr;
3413        } else {
3414            newLocaleData = getLocale(key);
3415            if (newLocaleData != null) {
3416                this._locale = newLocaleData;
3417            }
3418            return this;
3419        }
3420    }
3421
3422    var lang = deprecate(
3423        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
3424        function (key) {
3425            if (key === undefined) {
3426                return this.localeData();
3427            } else {
3428                return this.locale(key);
3429            }
3430        }
3431    );
3432
3433    function localeData () {
3434        return this._locale;
3435    }
3436
3437    var MS_PER_SECOND = 1000;
3438    var MS_PER_MINUTE = 60 * MS_PER_SECOND;
3439    var MS_PER_HOUR = 60 * MS_PER_MINUTE;
3440    var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
3441
3442    // actual modulo - handles negative numbers (for dates before 1970):
3443    function mod$1(dividend, divisor) {
3444        return (dividend % divisor + divisor) % divisor;
3445    }
3446
3447    function localStartOfDate(y, m, d) {
3448        // the date constructor remaps years 0-99 to 1900-1999
3449        if (y < 100 && y >= 0) {
3450            // preserve leap years using a full 400 year cycle, then reset
3451            return new Date(y + 400, m, d) - MS_PER_400_YEARS;
3452        } else {
3453            return new Date(y, m, d).valueOf();
3454        }
3455    }
3456
3457    function utcStartOfDate(y, m, d) {
3458        // Date.UTC remaps years 0-99 to 1900-1999
3459        if (y < 100 && y >= 0) {
3460            // preserve leap years using a full 400 year cycle, then reset
3461            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
3462        } else {
3463            return Date.UTC(y, m, d);
3464        }
3465    }
3466
3467    function startOf (units) {
3468        var time;
3469        units = normalizeUnits(units);
3470        if (units === undefined || units === 'millisecond' || !this.isValid()) {
3471            return this;
3472        }
3473
3474        var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
3475
3476        switch (units) {
3477            case 'year':
3478                time = startOfDate(this.year(), 0, 1);
3479                break;
3480            case 'quarter':
3481                time = startOfDate(this.year(), this.month() - this.month() % 3, 1);
3482                break;
3483            case 'month':
3484                time = startOfDate(this.year(), this.month(), 1);
3485                break;
3486            case 'week':
3487                time = startOfDate(this.year(), this.month(), this.date() - this.weekday());
3488                break;
3489            case 'isoWeek':
3490                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));
3491                break;
3492            case 'day':
3493            case 'date':
3494                time = startOfDate(this.year(), this.month(), this.date());
3495                break;
3496            case 'hour':
3497                time = this._d.valueOf();
3498                time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);
3499                break;
3500            case 'minute':
3501                time = this._d.valueOf();
3502                time -= mod$1(time, MS_PER_MINUTE);
3503                break;
3504            case 'second':
3505                time = this._d.valueOf();
3506                time -= mod$1(time, MS_PER_SECOND);
3507                break;
3508        }
3509
3510        this._d.setTime(time);
3511        hooks.updateOffset(this, true);
3512        return this;
3513    }
3514
3515    function endOf (units) {
3516        var time;
3517        units = normalizeUnits(units);
3518        if (units === undefined || units === 'millisecond' || !this.isValid()) {
3519            return this;
3520        }
3521
3522        var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
3523
3524        switch (units) {
3525            case 'year':
3526                time = startOfDate(this.year() + 1, 0, 1) - 1;
3527                break;
3528            case 'quarter':
3529                time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;
3530                break;
3531            case 'month':
3532                time = startOfDate(this.year(), this.month() + 1, 1) - 1;
3533                break;
3534            case 'week':
3535                time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;
3536                break;
3537            case 'isoWeek':
3538                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;
3539                break;
3540            case 'day':
3541            case 'date':
3542                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
3543                break;
3544            case 'hour':
3545                time = this._d.valueOf();
3546                time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;
3547                break;
3548            case 'minute':
3549                time = this._d.valueOf();
3550                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
3551                break;
3552            case 'second':
3553                time = this._d.valueOf();
3554                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
3555                break;
3556        }
3557
3558        this._d.setTime(time);
3559        hooks.updateOffset(this, true);
3560        return this;
3561    }
3562
3563    function valueOf () {
3564        return this._d.valueOf() - ((this._offset || 0) * 60000);
3565    }
3566
3567    function unix () {
3568        return Math.floor(this.valueOf() / 1000);
3569    }
3570
3571    function toDate () {
3572        return new Date(this.valueOf());
3573    }
3574
3575    function toArray () {
3576        var m = this;
3577        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
3578    }
3579
3580    function toObject () {
3581        var m = this;
3582        return {
3583            years: m.year(),
3584            months: m.month(),
3585            date: m.date(),
3586            hours: m.hours(),
3587            minutes: m.minutes(),
3588            seconds: m.seconds(),
3589            milliseconds: m.milliseconds()
3590        };
3591    }
3592
3593    function toJSON () {
3594        // new Date(NaN).toJSON() === null
3595        return this.isValid() ? this.toISOString() : null;
3596    }
3597
3598    function isValid$2 () {
3599        return isValid(this);
3600    }
3601
3602    function parsingFlags () {
3603        return extend({}, getParsingFlags(this));
3604    }
3605
3606    function invalidAt () {
3607        return getParsingFlags(this).overflow;
3608    }
3609
3610    function creationData() {
3611        return {
3612            input: this._i,
3613            format: this._f,
3614            locale: this._locale,
3615            isUTC: this._isUTC,
3616            strict: this._strict
3617        };
3618    }
3619
3620    // FORMATTING
3621
3622    addFormatToken(0, ['gg', 2], 0, function () {
3623        return this.weekYear() % 100;
3624    });
3625
3626    addFormatToken(0, ['GG', 2], 0, function () {
3627        return this.isoWeekYear() % 100;
3628    });
3629
3630    function addWeekYearFormatToken (token, getter) {
3631        addFormatToken(0, [token, token.length], 0, getter);
3632    }
3633
3634    addWeekYearFormatToken('gggg',     'weekYear');
3635    addWeekYearFormatToken('ggggg',    'weekYear');
3636    addWeekYearFormatToken('GGGG',  'isoWeekYear');
3637    addWeekYearFormatToken('GGGGG', 'isoWeekYear');
3638
3639    // ALIASES
3640
3641    addUnitAlias('weekYear', 'gg');
3642    addUnitAlias('isoWeekYear', 'GG');
3643
3644    // PRIORITY
3645
3646    addUnitPriority('weekYear', 1);
3647    addUnitPriority('isoWeekYear', 1);
3648
3649
3650    // PARSING
3651
3652    addRegexToken('G',      matchSigned);
3653    addRegexToken('g',      matchSigned);
3654    addRegexToken('GG',     match1to2, match2);
3655    addRegexToken('gg',     match1to2, match2);
3656    addRegexToken('GGGG',   match1to4, match4);
3657    addRegexToken('gggg',   match1to4, match4);
3658    addRegexToken('GGGGG',  match1to6, match6);
3659    addRegexToken('ggggg',  match1to6, match6);
3660
3661    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
3662        week[token.substr(0, 2)] = toInt(input);
3663    });
3664
3665    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
3666        week[token] = hooks.parseTwoDigitYear(input);
3667    });
3668
3669    // MOMENTS
3670
3671    function getSetWeekYear (input) {
3672        return getSetWeekYearHelper.call(this,
3673                input,
3674                this.week(),
3675                this.weekday(),
3676                this.localeData()._week.dow,
3677                this.localeData()._week.doy);
3678    }
3679
3680    function getSetISOWeekYear (input) {
3681        return getSetWeekYearHelper.call(this,
3682                input, this.isoWeek(), this.isoWeekday(), 1, 4);
3683    }
3684
3685    function getISOWeeksInYear () {
3686        return weeksInYear(this.year(), 1, 4);
3687    }
3688
3689    function getWeeksInYear () {
3690        var weekInfo = this.localeData()._week;
3691        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
3692    }
3693
3694    function getSetWeekYearHelper(input, week, weekday, dow, doy) {
3695        var weeksTarget;
3696        if (input == null) {
3697            return weekOfYear(this, dow, doy).year;
3698        } else {
3699            weeksTarget = weeksInYear(input, dow, doy);
3700            if (week > weeksTarget) {
3701                week = weeksTarget;
3702            }
3703            return setWeekAll.call(this, input, week, weekday, dow, doy);
3704        }
3705    }
3706
3707    function setWeekAll(weekYear, week, weekday, dow, doy) {
3708        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
3709            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
3710
3711        this.year(date.getUTCFullYear());
3712        this.month(date.getUTCMonth());
3713        this.date(date.getUTCDate());
3714        return this;
3715    }
3716
3717    // FORMATTING
3718
3719    addFormatToken('Q', 0, 'Qo', 'quarter');
3720
3721    // ALIASES
3722
3723    addUnitAlias('quarter', 'Q');
3724
3725    // PRIORITY
3726
3727    addUnitPriority('quarter', 7);
3728
3729    // PARSING
3730
3731    addRegexToken('Q', match1);
3732    addParseToken('Q', function (input, array) {
3733        array[MONTH] = (toInt(input) - 1) * 3;
3734    });
3735
3736    // MOMENTS
3737
3738    function getSetQuarter (input) {
3739        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
3740    }
3741
3742    // FORMATTING
3743
3744    addFormatToken('D', ['DD', 2], 'Do', 'date');
3745
3746    // ALIASES
3747
3748    addUnitAlias('date', 'D');
3749
3750    // PRIORITY
3751    addUnitPriority('date', 9);
3752
3753    // PARSING
3754
3755    addRegexToken('D',  match1to2);
3756    addRegexToken('DD', match1to2, match2);
3757    addRegexToken('Do', function (isStrict, locale) {
3758        // TODO: Remove "ordinalParse" fallback in next major release.
3759        return isStrict ?
3760          (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :
3761          locale._dayOfMonthOrdinalParseLenient;
3762    });
3763
3764    addParseToken(['D', 'DD'], DATE);
3765    addParseToken('Do', function (input, array) {
3766        array[DATE] = toInt(input.match(match1to2)[0]);
3767    });
3768
3769    // MOMENTS
3770
3771    var getSetDayOfMonth = makeGetSet('Date', true);
3772
3773    // FORMATTING
3774
3775    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
3776
3777    // ALIASES
3778
3779    addUnitAlias('dayOfYear', 'DDD');
3780
3781    // PRIORITY
3782    addUnitPriority('dayOfYear', 4);
3783
3784    // PARSING
3785
3786    addRegexToken('DDD',  match1to3);
3787    addRegexToken('DDDD', match3);
3788    addParseToken(['DDD', 'DDDD'], function (input, array, config) {
3789        config._dayOfYear = toInt(input);
3790    });
3791
3792    // HELPERS
3793
3794    // MOMENTS
3795
3796    function getSetDayOfYear (input) {
3797        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
3798        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
3799    }
3800
3801    // FORMATTING
3802
3803    addFormatToken('m', ['mm', 2], 0, 'minute');
3804
3805    // ALIASES
3806
3807    addUnitAlias('minute', 'm');
3808
3809    // PRIORITY
3810
3811    addUnitPriority('minute', 14);
3812
3813    // PARSING
3814
3815    addRegexToken('m',  match1to2);
3816    addRegexToken('mm', match1to2, match2);
3817    addParseToken(['m', 'mm'], MINUTE);
3818
3819    // MOMENTS
3820
3821    var getSetMinute = makeGetSet('Minutes', false);
3822
3823    // FORMATTING
3824
3825    addFormatToken('s', ['ss', 2], 0, 'second');
3826
3827    // ALIASES
3828
3829    addUnitAlias('second', 's');
3830
3831    // PRIORITY
3832
3833    addUnitPriority('second', 15);
3834
3835    // PARSING
3836
3837    addRegexToken('s',  match1to2);
3838    addRegexToken('ss', match1to2, match2);
3839    addParseToken(['s', 'ss'], SECOND);
3840
3841    // MOMENTS
3842
3843    var getSetSecond = makeGetSet('Seconds', false);
3844
3845    // FORMATTING
3846
3847    addFormatToken('S', 0, 0, function () {
3848        return ~~(this.millisecond() / 100);
3849    });
3850
3851    addFormatToken(0, ['SS', 2], 0, function () {
3852        return ~~(this.millisecond() / 10);
3853    });
3854
3855    addFormatToken(0, ['SSS', 3], 0, 'millisecond');
3856    addFormatToken(0, ['SSSS', 4], 0, function () {
3857        return this.millisecond() * 10;
3858    });
3859    addFormatToken(0, ['SSSSS', 5], 0, function () {
3860        return this.millisecond() * 100;
3861    });
3862    addFormatToken(0, ['SSSSSS', 6], 0, function () {
3863        return this.millisecond() * 1000;
3864    });
3865    addFormatToken(0, ['SSSSSSS', 7], 0, function () {
3866        return this.millisecond() * 10000;
3867    });
3868    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
3869        return this.millisecond() * 100000;
3870    });
3871    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
3872        return this.millisecond() * 1000000;
3873    });
3874
3875
3876    // ALIASES
3877
3878    addUnitAlias('millisecond', 'ms');
3879
3880    // PRIORITY
3881
3882    addUnitPriority('millisecond', 16);
3883
3884    // PARSING
3885
3886    addRegexToken('S',    match1to3, match1);
3887    addRegexToken('SS',   match1to3, match2);
3888    addRegexToken('SSS',  match1to3, match3);
3889
3890    var token;
3891    for (token = 'SSSS'; token.length <= 9; token += 'S') {
3892        addRegexToken(token, matchUnsigned);
3893    }
3894
3895    function parseMs(input, array) {
3896        array[MILLISECOND] = toInt(('0.' + input) * 1000);
3897    }
3898
3899    for (token = 'S'; token.length <= 9; token += 'S') {
3900        addParseToken(token, parseMs);
3901    }
3902    // MOMENTS
3903
3904    var getSetMillisecond = makeGetSet('Milliseconds', false);
3905
3906    // FORMATTING
3907
3908    addFormatToken('z',  0, 0, 'zoneAbbr');
3909    addFormatToken('zz', 0, 0, 'zoneName');
3910
3911    // MOMENTS
3912
3913    function getZoneAbbr () {
3914        return this._isUTC ? 'UTC' : '';
3915    }
3916
3917    function getZoneName () {
3918        return this._isUTC ? 'Coordinated Universal Time' : '';
3919    }
3920
3921    var proto = Moment.prototype;
3922
3923    proto.add               = add;
3924    proto.calendar          = calendar$1;
3925    proto.clone             = clone;
3926    proto.diff              = diff;
3927    proto.endOf             = endOf;
3928    proto.format            = format;
3929    proto.from              = from;
3930    proto.fromNow           = fromNow;
3931    proto.to                = to;
3932    proto.toNow             = toNow;
3933    proto.get               = stringGet;
3934    proto.invalidAt         = invalidAt;
3935    proto.isAfter           = isAfter;
3936    proto.isBefore          = isBefore;
3937    proto.isBetween         = isBetween;
3938    proto.isSame            = isSame;
3939    proto.isSameOrAfter     = isSameOrAfter;
3940    proto.isSameOrBefore    = isSameOrBefore;
3941    proto.isValid           = isValid$2;
3942    proto.lang              = lang;
3943    proto.locale            = locale;
3944    proto.localeData        = localeData;
3945    proto.max               = prototypeMax;
3946    proto.min               = prototypeMin;
3947    proto.parsingFlags      = parsingFlags;
3948    proto.set               = stringSet;
3949    proto.startOf           = startOf;
3950    proto.subtract          = subtract;
3951    proto.toArray           = toArray;
3952    proto.toObject          = toObject;
3953    proto.toDate            = toDate;
3954    proto.toISOString       = toISOString;
3955    proto.inspect           = inspect;
3956    proto.toJSON            = toJSON;
3957    proto.toString          = toString;
3958    proto.unix              = unix;
3959    proto.valueOf           = valueOf;
3960    proto.creationData      = creationData;
3961    proto.year       = getSetYear;
3962    proto.isLeapYear = getIsLeapYear;
3963    proto.weekYear    = getSetWeekYear;
3964    proto.isoWeekYear = getSetISOWeekYear;
3965    proto.quarter = proto.quarters = getSetQuarter;
3966    proto.month       = getSetMonth;
3967    proto.daysInMonth = getDaysInMonth;
3968    proto.week           = proto.weeks        = getSetWeek;
3969    proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;
3970    proto.weeksInYear    = getWeeksInYear;
3971    proto.isoWeeksInYear = getISOWeeksInYear;
3972    proto.date       = getSetDayOfMonth;
3973    proto.day        = proto.days             = getSetDayOfWeek;
3974    proto.weekday    = getSetLocaleDayOfWeek;
3975    proto.isoWeekday = getSetISODayOfWeek;
3976    proto.dayOfYear  = getSetDayOfYear;
3977    proto.hour = proto.hours = getSetHour;
3978    proto.minute = proto.minutes = getSetMinute;
3979    proto.second = proto.seconds = getSetSecond;
3980    proto.millisecond = proto.milliseconds = getSetMillisecond;
3981    proto.utcOffset            = getSetOffset;
3982    proto.utc                  = setOffsetToUTC;
3983    proto.local                = setOffsetToLocal;
3984    proto.parseZone            = setOffsetToParsedOffset;
3985    proto.hasAlignedHourOffset = hasAlignedHourOffset;
3986    proto.isDST                = isDaylightSavingTime;
3987    proto.isLocal              = isLocal;
3988    proto.isUtcOffset          = isUtcOffset;
3989    proto.isUtc                = isUtc;
3990    proto.isUTC                = isUtc;
3991    proto.zoneAbbr = getZoneAbbr;
3992    proto.zoneName = getZoneName;
3993    proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
3994    proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
3995    proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);
3996    proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
3997    proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
3998
3999    function createUnix (input) {
4000        return createLocal(input * 1000);
4001    }
4002
4003    function createInZone () {
4004        return createLocal.apply(null, arguments).parseZone();
4005    }
4006
4007    function preParsePostFormat (string) {
4008        return string;
4009    }
4010
4011    var proto$1 = Locale.prototype;
4012
4013    proto$1.calendar        = calendar;
4014    proto$1.longDateFormat  = longDateFormat;
4015    proto$1.invalidDate     = invalidDate;
4016    proto$1.ordinal         = ordinal;
4017    proto$1.preparse        = preParsePostFormat;
4018    proto$1.postformat      = preParsePostFormat;
4019    proto$1.relativeTime    = relativeTime;
4020    proto$1.pastFuture      = pastFuture;
4021    proto$1.set             = set;
4022
4023    proto$1.months            =        localeMonths;
4024    proto$1.monthsShort       =        localeMonthsShort;
4025    proto$1.monthsParse       =        localeMonthsParse;
4026    proto$1.monthsRegex       = monthsRegex;
4027    proto$1.monthsShortRegex  = monthsShortRegex;
4028    proto$1.week = localeWeek;
4029    proto$1.firstDayOfYear = localeFirstDayOfYear;
4030    proto$1.firstDayOfWeek = localeFirstDayOfWeek;
4031
4032    proto$1.weekdays       =        localeWeekdays;
4033    proto$1.weekdaysMin    =        localeWeekdaysMin;
4034    proto$1.weekdaysShort  =        localeWeekdaysShort;
4035    proto$1.weekdaysParse  =        localeWeekdaysParse;
4036
4037    proto$1.weekdaysRegex       =        weekdaysRegex;
4038    proto$1.weekdaysShortRegex  =        weekdaysShortRegex;
4039    proto$1.weekdaysMinRegex    =        weekdaysMinRegex;
4040
4041    proto$1.isPM = localeIsPM;
4042    proto$1.meridiem = localeMeridiem;
4043
4044    function get$1 (format, index, field, setter) {
4045        var locale = getLocale();
4046        var utc = createUTC().set(setter, index);
4047        return locale[field](utc, format);
4048    }
4049
4050    function listMonthsImpl (format, index, field) {
4051        if (isNumber(format)) {
4052            index = format;
4053            format = undefined;
4054        }
4055
4056        format = format || '';
4057
4058        if (index != null) {
4059            return get$1(format, index, field, 'month');
4060        }
4061
4062        var i;
4063        var out = [];
4064        for (i = 0; i < 12; i++) {
4065            out[i] = get$1(format, i, field, 'month');
4066        }
4067        return out;
4068    }
4069
4070    // ()
4071    // (5)
4072    // (fmt, 5)
4073    // (fmt)
4074    // (true)
4075    // (true, 5)
4076    // (true, fmt, 5)
4077    // (true, fmt)
4078    function listWeekdaysImpl (localeSorted, format, index, field) {
4079        if (typeof localeSorted === 'boolean') {
4080            if (isNumber(format)) {
4081                index = format;
4082                format = undefined;
4083            }
4084
4085            format = format || '';
4086        } else {
4087            format = localeSorted;
4088            index = format;
4089            localeSorted = false;
4090
4091            if (isNumber(format)) {
4092                index = format;
4093                format = undefined;
4094            }
4095
4096            format = format || '';
4097        }
4098
4099        var locale = getLocale(),
4100            shift = localeSorted ? locale._week.dow : 0;
4101
4102        if (index != null) {
4103            return get$1(format, (index + shift) % 7, field, 'day');
4104        }
4105
4106        var i;
4107        var out = [];
4108        for (i = 0; i < 7; i++) {
4109            out[i] = get$1(format, (i + shift) % 7, field, 'day');
4110        }
4111        return out;
4112    }
4113
4114    function listMonths (format, index) {
4115        return listMonthsImpl(format, index, 'months');
4116    }
4117
4118    function listMonthsShort (format, index) {
4119        return listMonthsImpl(format, index, 'monthsShort');
4120    }
4121
4122    function listWeekdays (localeSorted, format, index) {
4123        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
4124    }
4125
4126    function listWeekdaysShort (localeSorted, format, index) {
4127        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
4128    }
4129
4130    function listWeekdaysMin (localeSorted, format, index) {
4131        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
4132    }
4133
4134    getSetGlobalLocale('en', {
4135        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
4136        ordinal : function (number) {
4137            var b = number % 10,
4138                output = (toInt(number % 100 / 10) === 1) ? 'th' :
4139                (b === 1) ? 'st' :
4140                (b === 2) ? 'nd' :
4141                (b === 3) ? 'rd' : 'th';
4142            return number + output;
4143        }
4144    });
4145
4146    // Side effect imports
4147
4148    hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);
4149    hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);
4150
4151    var mathAbs = Math.abs;
4152
4153    function abs () {
4154        var data           = this._data;
4155
4156        this._milliseconds = mathAbs(this._milliseconds);
4157        this._days         = mathAbs(this._days);
4158        this._months       = mathAbs(this._months);
4159
4160        data.milliseconds  = mathAbs(data.milliseconds);
4161        data.seconds       = mathAbs(data.seconds);
4162        data.minutes       = mathAbs(data.minutes);
4163        data.hours         = mathAbs(data.hours);
4164        data.months        = mathAbs(data.months);
4165        data.years         = mathAbs(data.years);
4166
4167        return this;
4168    }
4169
4170    function addSubtract$1 (duration, input, value, direction) {
4171        var other = createDuration(input, value);
4172
4173        duration._milliseconds += direction * other._milliseconds;
4174        duration._days         += direction * other._days;
4175        duration._months       += direction * other._months;
4176
4177        return duration._bubble();
4178    }
4179
4180    // supports only 2.0-style add(1, 's') or add(duration)
4181    function add$1 (input, value) {
4182        return addSubtract$1(this, input, value, 1);
4183    }
4184
4185    // supports only 2.0-style subtract(1, 's') or subtract(duration)
4186    function subtract$1 (input, value) {
4187        return addSubtract$1(this, input, value, -1);
4188    }
4189
4190    function absCeil (number) {
4191        if (number < 0) {
4192            return Math.floor(number);
4193        } else {
4194            return Math.ceil(number);
4195        }
4196    }
4197
4198    function bubble () {
4199        var milliseconds = this._milliseconds;
4200        var days         = this._days;
4201        var months       = this._months;
4202        var data         = this._data;
4203        var seconds, minutes, hours, years, monthsFromDays;
4204
4205        // if we have a mix of positive and negative values, bubble down first
4206        // check: https://github.com/moment/moment/issues/2166
4207        if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
4208                (milliseconds <= 0 && days <= 0 && months <= 0))) {
4209            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
4210            days = 0;
4211            months = 0;
4212        }
4213
4214        // The following code bubbles up values, see the tests for
4215        // examples of what that means.
4216        data.milliseconds = milliseconds % 1000;
4217
4218        seconds           = absFloor(milliseconds / 1000);
4219        data.seconds      = seconds % 60;
4220
4221        minutes           = absFloor(seconds / 60);
4222        data.minutes      = minutes % 60;
4223
4224        hours             = absFloor(minutes / 60);
4225        data.hours        = hours % 24;
4226
4227        days += absFloor(hours / 24);
4228
4229        // convert days to months
4230        monthsFromDays = absFloor(daysToMonths(days));
4231        months += monthsFromDays;
4232        days -= absCeil(monthsToDays(monthsFromDays));
4233
4234        // 12 months -> 1 year
4235        years = absFloor(months / 12);
4236        months %= 12;
4237
4238        data.days   = days;
4239        data.months = months;
4240        data.years  = years;
4241
4242        return this;
4243    }
4244
4245    function daysToMonths (days) {
4246        // 400 years have 146097 days (taking into account leap year rules)
4247        // 400 years have 12 months === 4800
4248        return days * 4800 / 146097;
4249    }
4250
4251    function monthsToDays (months) {
4252        // the reverse of daysToMonths
4253        return months * 146097 / 4800;
4254    }
4255
4256    function as (units) {
4257        if (!this.isValid()) {
4258            return NaN;
4259        }
4260        var days;
4261        var months;
4262        var milliseconds = this._milliseconds;
4263
4264        units = normalizeUnits(units);
4265
4266        if (units === 'month' || units === 'quarter' || units === 'year') {
4267            days = this._days + milliseconds / 864e5;
4268            months = this._months + daysToMonths(days);
4269            switch (units) {
4270                case 'month':   return months;
4271                case 'quarter': return months / 3;
4272                case 'year':    return months / 12;
4273            }
4274        } else {
4275            // handle milliseconds separately because of floating point math errors (issue #1867)
4276            days = this._days + Math.round(monthsToDays(this._months));
4277            switch (units) {
4278                case 'week'   : return days / 7     + milliseconds / 6048e5;
4279                case 'day'    : return days         + milliseconds / 864e5;
4280                case 'hour'   : return days * 24    + milliseconds / 36e5;
4281                case 'minute' : return days * 1440  + milliseconds / 6e4;
4282                case 'second' : return days * 86400 + milliseconds / 1000;
4283                // Math.floor prevents floating point math errors here
4284                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
4285                default: throw new Error('Unknown unit ' + units);
4286            }
4287        }
4288    }
4289
4290    // TODO: Use this.as('ms')?
4291    function valueOf$1 () {
4292        if (!this.isValid()) {
4293            return NaN;
4294        }
4295        return (
4296            this._milliseconds +
4297            this._days * 864e5 +
4298            (this._months % 12) * 2592e6 +
4299            toInt(this._months / 12) * 31536e6
4300        );
4301    }
4302
4303    function makeAs (alias) {
4304        return function () {
4305            return this.as(alias);
4306        };
4307    }
4308
4309    var asMilliseconds = makeAs('ms');
4310    var asSeconds      = makeAs('s');
4311    var asMinutes      = makeAs('m');
4312    var asHours        = makeAs('h');
4313    var asDays         = makeAs('d');
4314    var asWeeks        = makeAs('w');
4315    var asMonths       = makeAs('M');
4316    var asQuarters     = makeAs('Q');
4317    var asYears        = makeAs('y');
4318
4319    function clone$1 () {
4320        return createDuration(this);
4321    }
4322
4323    function get$2 (units) {
4324        units = normalizeUnits(units);
4325        return this.isValid() ? this[units + 's']() : NaN;
4326    }
4327
4328    function makeGetter(name) {
4329        return function () {
4330            return this.isValid() ? this._data[name] : NaN;
4331        };
4332    }
4333
4334    var milliseconds = makeGetter('milliseconds');
4335    var seconds      = makeGetter('seconds');
4336    var minutes      = makeGetter('minutes');
4337    var hours        = makeGetter('hours');
4338    var days         = makeGetter('days');
4339    var months       = makeGetter('months');
4340    var years        = makeGetter('years');
4341
4342    function weeks () {
4343        return absFloor(this.days() / 7);
4344    }
4345
4346    var round = Math.round;
4347    var thresholds = {
4348        ss: 44,         // a few seconds to seconds
4349        s : 45,         // seconds to minute
4350        m : 45,         // minutes to hour
4351        h : 22,         // hours to day
4352        d : 26,         // days to month
4353        M : 11          // months to year
4354    };
4355
4356    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
4357    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
4358        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
4359    }
4360
4361    function relativeTime$1 (posNegDuration, withoutSuffix, locale) {
4362        var duration = createDuration(posNegDuration).abs();
4363        var seconds  = round(duration.as('s'));
4364        var minutes  = round(duration.as('m'));
4365        var hours    = round(duration.as('h'));
4366        var days     = round(duration.as('d'));
4367        var months   = round(duration.as('M'));
4368        var years    = round(duration.as('y'));
4369
4370        var a = seconds <= thresholds.ss && ['s', seconds]  ||
4371                seconds < thresholds.s   && ['ss', seconds] ||
4372                minutes <= 1             && ['m']           ||
4373                minutes < thresholds.m   && ['mm', minutes] ||
4374                hours   <= 1             && ['h']           ||
4375                hours   < thresholds.h   && ['hh', hours]   ||
4376                days    <= 1             && ['d']           ||
4377                days    < thresholds.d   && ['dd', days]    ||
4378                months  <= 1             && ['M']           ||
4379                months  < thresholds.M   && ['MM', months]  ||
4380                years   <= 1             && ['y']           || ['yy', years];
4381
4382        a[2] = withoutSuffix;
4383        a[3] = +posNegDuration > 0;
4384        a[4] = locale;
4385        return substituteTimeAgo.apply(null, a);
4386    }
4387
4388    // This function allows you to set the rounding function for relative time strings
4389    function getSetRelativeTimeRounding (roundingFunction) {
4390        if (roundingFunction === undefined) {
4391            return round;
4392        }
4393        if (typeof(roundingFunction) === 'function') {
4394            round = roundingFunction;
4395            return true;
4396        }
4397        return false;
4398    }
4399
4400    // This function allows you to set a threshold for relative time strings
4401    function getSetRelativeTimeThreshold (threshold, limit) {
4402        if (thresholds[threshold] === undefined) {
4403            return false;
4404        }
4405        if (limit === undefined) {
4406            return thresholds[threshold];
4407        }
4408        thresholds[threshold] = limit;
4409        if (threshold === 's') {
4410            thresholds.ss = limit - 1;
4411        }
4412        return true;
4413    }
4414
4415    function humanize (withSuffix) {
4416        if (!this.isValid()) {
4417            return this.localeData().invalidDate();
4418        }
4419
4420        var locale = this.localeData();
4421        var output = relativeTime$1(this, !withSuffix, locale);
4422
4423        if (withSuffix) {
4424            output = locale.pastFuture(+this, output);
4425        }
4426
4427        return locale.postformat(output);
4428    }
4429
4430    var abs$1 = Math.abs;
4431
4432    function sign(x) {
4433        return ((x > 0) - (x < 0)) || +x;
4434    }
4435
4436    function toISOString$1() {
4437        // for ISO strings we do not use the normal bubbling rules:
4438        //  * milliseconds bubble up until they become hours
4439        //  * days do not bubble at all
4440        //  * months bubble up until they become years
4441        // This is because there is no context-free conversion between hours and days
4442        // (think of clock changes)
4443        // and also not between days and months (28-31 days per month)
4444        if (!this.isValid()) {
4445            return this.localeData().invalidDate();
4446        }
4447
4448        var seconds = abs$1(this._milliseconds) / 1000;
4449        var days         = abs$1(this._days);
4450        var months       = abs$1(this._months);
4451        var minutes, hours, years;
4452
4453        // 3600 seconds -> 60 minutes -> 1 hour
4454        minutes           = absFloor(seconds / 60);
4455        hours             = absFloor(minutes / 60);
4456        seconds %= 60;
4457        minutes %= 60;
4458
4459        // 12 months -> 1 year
4460        years  = absFloor(months / 12);
4461        months %= 12;
4462
4463
4464        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
4465        var Y = years;
4466        var M = months;
4467        var D = days;
4468        var h = hours;
4469        var m = minutes;
4470        var s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
4471        var total = this.asSeconds();
4472
4473        if (!total) {
4474            // this is the same as C#'s (Noda) and python (isodate)...
4475            // but not other JS (goog.date)
4476            return 'P0D';
4477        }
4478
4479        var totalSign = total < 0 ? '-' : '';
4480        var ymSign = sign(this._months) !== sign(total) ? '-' : '';
4481        var daysSign = sign(this._days) !== sign(total) ? '-' : '';
4482        var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
4483
4484        return totalSign + 'P' +
4485            (Y ? ymSign + Y + 'Y' : '') +
4486            (M ? ymSign + M + 'M' : '') +
4487            (D ? daysSign + D + 'D' : '') +
4488            ((h || m || s) ? 'T' : '') +
4489            (h ? hmsSign + h + 'H' : '') +
4490            (m ? hmsSign + m + 'M' : '') +
4491            (s ? hmsSign + s + 'S' : '');
4492    }
4493
4494    var proto$2 = Duration.prototype;
4495
4496    proto$2.isValid        = isValid$1;
4497    proto$2.abs            = abs;
4498    proto$2.add            = add$1;
4499    proto$2.subtract       = subtract$1;
4500    proto$2.as             = as;
4501    proto$2.asMilliseconds = asMilliseconds;
4502    proto$2.asSeconds      = asSeconds;
4503    proto$2.asMinutes      = asMinutes;
4504    proto$2.asHours        = asHours;
4505    proto$2.asDays         = asDays;
4506    proto$2.asWeeks        = asWeeks;
4507    proto$2.asMonths       = asMonths;
4508    proto$2.asQuarters     = asQuarters;
4509    proto$2.asYears        = asYears;
4510    proto$2.valueOf        = valueOf$1;
4511    proto$2._bubble        = bubble;
4512    proto$2.clone          = clone$1;
4513    proto$2.get            = get$2;
4514    proto$2.milliseconds   = milliseconds;
4515    proto$2.seconds        = seconds;
4516    proto$2.minutes        = minutes;
4517    proto$2.hours          = hours;
4518    proto$2.days           = days;
4519    proto$2.weeks          = weeks;
4520    proto$2.months         = months;
4521    proto$2.years          = years;
4522    proto$2.humanize       = humanize;
4523    proto$2.toISOString    = toISOString$1;
4524    proto$2.toString       = toISOString$1;
4525    proto$2.toJSON         = toISOString$1;
4526    proto$2.locale         = locale;
4527    proto$2.localeData     = localeData;
4528
4529    proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);
4530    proto$2.lang = lang;
4531
4532    // Side effect imports
4533
4534    // FORMATTING
4535
4536    addFormatToken('X', 0, 0, 'unix');
4537    addFormatToken('x', 0, 0, 'valueOf');
4538
4539    // PARSING
4540
4541    addRegexToken('x', matchSigned);
4542    addRegexToken('X', matchTimestamp);
4543    addParseToken('X', function (input, array, config) {
4544        config._d = new Date(parseFloat(input, 10) * 1000);
4545    });
4546    addParseToken('x', function (input, array, config) {
4547        config._d = new Date(toInt(input));
4548    });
4549
4550    // Side effect imports
4551
4552    //! moment.js
4553
4554    hooks.version = '2.24.0';
4555
4556    setHookCallback(createLocal);
4557
4558    hooks.fn                    = proto;
4559    hooks.min                   = min;
4560    hooks.max                   = max;
4561    hooks.now                   = now;
4562    hooks.utc                   = createUTC;
4563    hooks.unix                  = createUnix;
4564    hooks.months                = listMonths;
4565    hooks.isDate                = isDate;
4566    hooks.locale                = getSetGlobalLocale;
4567    hooks.invalid               = createInvalid;
4568    hooks.duration              = createDuration;
4569    hooks.isMoment              = isMoment;
4570    hooks.weekdays              = listWeekdays;
4571    hooks.parseZone             = createInZone;
4572    hooks.localeData            = getLocale;
4573    hooks.isDuration            = isDuration;
4574    hooks.monthsShort           = listMonthsShort;
4575    hooks.weekdaysMin           = listWeekdaysMin;
4576    hooks.defineLocale          = defineLocale;
4577    hooks.updateLocale          = updateLocale;
4578    hooks.locales               = listLocales;
4579    hooks.weekdaysShort         = listWeekdaysShort;
4580    hooks.normalizeUnits        = normalizeUnits;
4581    hooks.relativeTimeRounding  = getSetRelativeTimeRounding;
4582    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
4583    hooks.calendarFormat        = getCalendarFormat;
4584    hooks.prototype             = proto;
4585
4586    // currently HTML5 input type only supports 24-hour formats
4587    hooks.HTML5_FMT = {
4588        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',             // <input type="datetime-local" />
4589        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',  // <input type="datetime-local" step="1" />
4590        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',   // <input type="datetime-local" step="0.001" />
4591        DATE: 'YYYY-MM-DD',                             // <input type="date" />
4592        TIME: 'HH:mm',                                  // <input type="time" />
4593        TIME_SECONDS: 'HH:mm:ss',                       // <input type="time" step="1" />
4594        TIME_MS: 'HH:mm:ss.SSS',                        // <input type="time" step="0.001" />
4595        WEEK: 'GGGG-[W]WW',                             // <input type="week" />
4596        MONTH: 'YYYY-MM'                                // <input type="month" />
4597    };
4598
4599    //! moment.js locale configuration
4600
4601    hooks.defineLocale('af', {
4602        months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),
4603        monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
4604        weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),
4605        weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
4606        weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
4607        meridiemParse: /vm|nm/i,
4608        isPM : function (input) {
4609            return /^nm$/i.test(input);
4610        },
4611        meridiem : function (hours, minutes, isLower) {
4612            if (hours < 12) {
4613                return isLower ? 'vm' : 'VM';
4614            } else {
4615                return isLower ? 'nm' : 'NM';
4616            }
4617        },
4618        longDateFormat : {
4619            LT : 'HH:mm',
4620            LTS : 'HH:mm:ss',
4621            L : 'DD/MM/YYYY',
4622            LL : 'D MMMM YYYY',
4623            LLL : 'D MMMM YYYY HH:mm',
4624            LLLL : 'dddd, D MMMM YYYY HH:mm'
4625        },
4626        calendar : {
4627            sameDay : '[Vandag om] LT',
4628            nextDay : '[Môre om] LT',
4629            nextWeek : 'dddd [om] LT',
4630            lastDay : '[Gister om] LT',
4631            lastWeek : '[Laas] dddd [om] LT',
4632            sameElse : 'L'
4633        },
4634        relativeTime : {
vendor: 61,842 bytes, lines 4635-6220
4635            future : 'oor %s',
4636            past : '%s gelede',
4637            s : '\'n paar sekondes',
4638            ss : '%d sekondes',
4639            m : '\'n minuut',
4640            mm : '%d minute',
4641            h : '\'n uur',
4642            hh : '%d ure',
4643            d : '\'n dag',
4644            dd : '%d dae',
4645            M : '\'n maand',
4646            MM : '%d maande',
4647            y : '\'n jaar',
4648            yy : '%d jaar'
4649        },
4650        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
4651        ordinal : function (number) {
4652            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter
4653        },
4654        week : {
4655            dow : 1, // Maandag is die eerste dag van die week.
4656            doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
4657        }
4658    });
4659
4660    //! moment.js locale configuration
4661
4662    hooks.defineLocale('ar-dz', {
4663        months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
4664        monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
4665        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
4666        weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
4667        weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),
4668        weekdaysParseExact : true,
4669        longDateFormat : {
4670            LT : 'HH:mm',
4671            LTS : 'HH:mm:ss',
4672            L : 'DD/MM/YYYY',
4673            LL : 'D MMMM YYYY',
4674            LLL : 'D MMMM YYYY HH:mm',
4675            LLLL : 'dddd D MMMM YYYY HH:mm'
4676        },
4677        calendar : {
4678            sameDay: '[اليوم على الساعة] LT',
4679            nextDay: '[غدا على الساعة] LT',
4680            nextWeek: 'dddd [على الساعة] LT',
4681            lastDay: '[أمس على الساعة] LT',
4682            lastWeek: 'dddd [على الساعة] LT',
4683            sameElse: 'L'
4684        },
4685        relativeTime : {
4686            future : 'في %s',
4687            past : 'منذ %s',
4688            s : 'ثوان',
4689            ss : '%d ثانية',
4690            m : 'دقيقة',
4691            mm : '%d دقائق',
4692            h : 'ساعة',
4693            hh : '%d ساعات',
4694            d : 'يوم',
4695            dd : '%d أيام',
4696            M : 'شهر',
4697            MM : '%d أشهر',
4698            y : 'سنة',
4699            yy : '%d سنوات'
4700        },
4701        week : {
4702            dow : 0, // Sunday is the first day of the week.
4703            doy : 4  // The week that contains Jan 4th is the first week of the year.
4704        }
4705    });
4706
4707    //! moment.js locale configuration
4708
4709    hooks.defineLocale('ar-kw', {
4710        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
4711        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
4712        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
4713        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
4714        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
4715        weekdaysParseExact : true,
4716        longDateFormat : {
4717            LT : 'HH:mm',
4718            LTS : 'HH:mm:ss',
4719            L : 'DD/MM/YYYY',
4720            LL : 'D MMMM YYYY',
4721            LLL : 'D MMMM YYYY HH:mm',
4722            LLLL : 'dddd D MMMM YYYY HH:mm'
4723        },
4724        calendar : {
4725            sameDay: '[اليوم على الساعة] LT',
4726            nextDay: '[غدا على الساعة] LT',
4727            nextWeek: 'dddd [على الساعة] LT',
4728            lastDay: '[أمس على الساعة] LT',
4729            lastWeek: 'dddd [على الساعة] LT',
4730            sameElse: 'L'
4731        },
4732        relativeTime : {
4733            future : 'في %s',
4734            past : 'منذ %s',
4735            s : 'ثوان',
4736            ss : '%d ثانية',
4737            m : 'دقيقة',
4738            mm : '%d دقائق',
4739            h : 'ساعة',
4740            hh : '%d ساعات',
4741            d : 'يوم',
4742            dd : '%d أيام',
4743            M : 'شهر',
4744            MM : '%d أشهر',
4745            y : 'سنة',
4746            yy : '%d سنوات'
4747        },
4748        week : {
4749            dow : 0, // Sunday is the first day of the week.
4750            doy : 12  // The week that contains Jan 12th is the first week of the year.
4751        }
4752    });
4753
4754    //! moment.js locale configuration
4755
4756    var symbolMap = {
4757        '1': '1',
4758        '2': '2',
4759        '3': '3',
4760        '4': '4',
4761        '5': '5',
4762        '6': '6',
4763        '7': '7',
4764        '8': '8',
4765        '9': '9',
4766        '0': '0'
4767    }, pluralForm = function (n) {
4768        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
4769    }, plurals = {
4770        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
4771        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
4772        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
4773        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
4774        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
4775        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
4776    }, pluralize = function (u) {
4777        return function (number, withoutSuffix, string, isFuture) {
4778            var f = pluralForm(number),
4779                str = plurals[u][pluralForm(number)];
4780            if (f === 2) {
4781                str = str[withoutSuffix ? 0 : 1];
4782            }
4783            return str.replace(/%d/i, number);
4784        };
4785    }, months$1 = [
4786        'يناير',
4787        'فبراير',
4788        'مارس',
4789        'أبريل',
4790        'مايو',
4791        'يونيو',
4792        'يوليو',
4793        'أغسطس',
4794        'سبتمبر',
4795        'أكتوبر',
4796        'نوفمبر',
4797        'ديسمبر'
4798    ];
4799
4800    hooks.defineLocale('ar-ly', {
4801        months : months$1,
4802        monthsShort : months$1,
4803        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
4804        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
4805        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
4806        weekdaysParseExact : true,
4807        longDateFormat : {
4808            LT : 'HH:mm',
4809            LTS : 'HH:mm:ss',
4810            L : 'D/\u200FM/\u200FYYYY',
4811            LL : 'D MMMM YYYY',
4812            LLL : 'D MMMM YYYY HH:mm',
4813            LLLL : 'dddd D MMMM YYYY HH:mm'
4814        },
4815        meridiemParse: /ص|م/,
4816        isPM : function (input) {
4817            return 'م' === input;
4818        },
4819        meridiem : function (hour, minute, isLower) {
4820            if (hour < 12) {
4821                return 'ص';
4822            } else {
4823                return 'م';
4824            }
4825        },
4826        calendar : {
4827            sameDay: '[اليوم عند الساعة] LT',
4828            nextDay: '[غدًا عند الساعة] LT',
4829            nextWeek: 'dddd [عند الساعة] LT',
4830            lastDay: '[أمس عند الساعة] LT',
4831            lastWeek: 'dddd [عند الساعة] LT',
4832            sameElse: 'L'
4833        },
4834        relativeTime : {
4835            future : 'بعد %s',
4836            past : 'منذ %s',
4837            s : pluralize('s'),
4838            ss : pluralize('s'),
4839            m : pluralize('m'),
4840            mm : pluralize('m'),
4841            h : pluralize('h'),
4842            hh : pluralize('h'),
4843            d : pluralize('d'),
4844            dd : pluralize('d'),
4845            M : pluralize('M'),
4846            MM : pluralize('M'),
4847            y : pluralize('y'),
4848            yy : pluralize('y')
4849        },
4850        preparse: function (string) {
4851            return string.replace(/،/g, ',');
4852        },
4853        postformat: function (string) {
4854            return string.replace(/\d/g, function (match) {
4855                return symbolMap[match];
4856            }).replace(/,/g, '،');
4857        },
4858        week : {
4859            dow : 6, // Saturday is the first day of the week.
4860            doy : 12  // The week that contains Jan 12th is the first week of the year.
4861        }
4862    });
4863
4864    //! moment.js locale configuration
4865
4866    hooks.defineLocale('ar-ma', {
4867        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
4868        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
4869        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
4870        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
4871        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
4872        weekdaysParseExact : true,
4873        longDateFormat : {
4874            LT : 'HH:mm',
4875            LTS : 'HH:mm:ss',
4876            L : 'DD/MM/YYYY',
4877            LL : 'D MMMM YYYY',
4878            LLL : 'D MMMM YYYY HH:mm',
4879            LLLL : 'dddd D MMMM YYYY HH:mm'
4880        },
4881        calendar : {
4882            sameDay: '[اليوم على الساعة] LT',
4883            nextDay: '[غدا على الساعة] LT',
4884            nextWeek: 'dddd [على الساعة] LT',
4885            lastDay: '[أمس على الساعة] LT',
4886            lastWeek: 'dddd [على الساعة] LT',
4887            sameElse: 'L'
4888        },
4889        relativeTime : {
4890            future : 'في %s',
4891            past : 'منذ %s',
4892            s : 'ثوان',
4893            ss : '%d ثانية',
4894            m : 'دقيقة',
4895            mm : '%d دقائق',
4896            h : 'ساعة',
4897            hh : '%d ساعات',
4898            d : 'يوم',
4899            dd : '%d أيام',
4900            M : 'شهر',
4901            MM : '%d أشهر',
4902            y : 'سنة',
4903            yy : '%d سنوات'
4904        },
4905        week : {
4906            dow : 6, // Saturday is the first day of the week.
4907            doy : 12  // The week that contains Jan 12th is the first week of the year.
4908        }
4909    });
4910
4911    //! moment.js locale configuration
4912
4913    var symbolMap$1 = {
4914        '1': 'Ù¡',
4915        '2': 'Ù¢',
4916        '3': 'Ù£',
4917        '4': 'Ù¤',
4918        '5': 'Ù¥',
4919        '6': 'Ù¦',
4920        '7': 'Ù§',
4921        '8': 'Ù¨',
4922        '9': 'Ù©',
4923        '0': 'Ù '
4924    }, numberMap = {
4925        'Ù¡': '1',
4926        'Ù¢': '2',
4927        'Ù£': '3',
4928        'Ù¤': '4',
4929        'Ù¥': '5',
4930        'Ù¦': '6',
4931        'Ù§': '7',
4932        'Ù¨': '8',
4933        'Ù©': '9',
4934        'Ù ': '0'
4935    };
4936
4937    hooks.defineLocale('ar-sa', {
4938        months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
4939        monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
4940        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
4941        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
4942        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
4943        weekdaysParseExact : true,
4944        longDateFormat : {
4945            LT : 'HH:mm',
4946            LTS : 'HH:mm:ss',
4947            L : 'DD/MM/YYYY',
4948            LL : 'D MMMM YYYY',
4949            LLL : 'D MMMM YYYY HH:mm',
4950            LLLL : 'dddd D MMMM YYYY HH:mm'
4951        },
4952        meridiemParse: /ص|م/,
4953        isPM : function (input) {
4954            return 'م' === input;
4955        },
4956        meridiem : function (hour, minute, isLower) {
4957            if (hour < 12) {
4958                return 'ص';
4959            } else {
4960                return 'م';
4961            }
4962        },
4963        calendar : {
4964            sameDay: '[اليوم على الساعة] LT',
4965            nextDay: '[غدا على الساعة] LT',
4966            nextWeek: 'dddd [على الساعة] LT',
4967            lastDay: '[أمس على الساعة] LT',
4968            lastWeek: 'dddd [على الساعة] LT',
4969            sameElse: 'L'
4970        },
4971        relativeTime : {
4972            future : 'في %s',
4973            past : 'منذ %s',
4974            s : 'ثوان',
4975            ss : '%d ثانية',
4976            m : 'دقيقة',
4977            mm : '%d دقائق',
4978            h : 'ساعة',
4979            hh : '%d ساعات',
4980            d : 'يوم',
4981            dd : '%d أيام',
4982            M : 'شهر',
4983            MM : '%d أشهر',
4984            y : 'سنة',
4985            yy : '%d سنوات'
4986        },
4987        preparse: function (string) {
4988            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
4989                return numberMap[match];
4990            }).replace(/،/g, ',');
4991        },
4992        postformat: function (string) {
4993            return string.replace(/\d/g, function (match) {
4994                return symbolMap$1[match];
4995            }).replace(/,/g, '،');
4996        },
4997        week : {
4998            dow : 0, // Sunday is the first day of the week.
4999            doy : 6  // The week that contains Jan 6th is the first week of the year.
5000        }
5001    });
5002
5003    //! moment.js locale configuration
5004
5005    hooks.defineLocale('ar-tn', {
5006        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
5007        monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
5008        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
5009        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
5010        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
5011        weekdaysParseExact : true,
5012        longDateFormat: {
5013            LT: 'HH:mm',
5014            LTS: 'HH:mm:ss',
5015            L: 'DD/MM/YYYY',
5016            LL: 'D MMMM YYYY',
5017            LLL: 'D MMMM YYYY HH:mm',
5018            LLLL: 'dddd D MMMM YYYY HH:mm'
5019        },
5020        calendar: {
5021            sameDay: '[اليوم على الساعة] LT',
5022            nextDay: '[غدا على الساعة] LT',
5023            nextWeek: 'dddd [على الساعة] LT',
5024            lastDay: '[أمس على الساعة] LT',
5025            lastWeek: 'dddd [على الساعة] LT',
5026            sameElse: 'L'
5027        },
5028        relativeTime: {
5029            future: 'في %s',
5030            past: 'منذ %s',
5031            s: 'ثوان',
5032            ss : '%d ثانية',
5033            m: 'دقيقة',
5034            mm: '%d دقائق',
5035            h: 'ساعة',
5036            hh: '%d ساعات',
5037            d: 'يوم',
5038            dd: '%d أيام',
5039            M: 'شهر',
5040            MM: '%d أشهر',
5041            y: 'سنة',
5042            yy: '%d سنوات'
5043        },
5044        week: {
5045            dow: 1, // Monday is the first day of the week.
5046            doy: 4 // The week that contains Jan 4th is the first week of the year.
5047        }
5048    });
5049
5050    //! moment.js locale configuration
5051
5052    var symbolMap$2 = {
5053        '1': 'Ù¡',
5054        '2': 'Ù¢',
5055        '3': 'Ù£',
5056        '4': 'Ù¤',
5057        '5': 'Ù¥',
5058        '6': 'Ù¦',
5059        '7': 'Ù§',
5060        '8': 'Ù¨',
5061        '9': 'Ù©',
5062        '0': 'Ù '
5063    }, numberMap$1 = {
5064        'Ù¡': '1',
5065        'Ù¢': '2',
5066        'Ù£': '3',
5067        'Ù¤': '4',
5068        'Ù¥': '5',
5069        'Ù¦': '6',
5070        'Ù§': '7',
5071        'Ù¨': '8',
5072        'Ù©': '9',
5073        'Ù ': '0'
5074    }, pluralForm$1 = function (n) {
5075        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
5076    }, plurals$1 = {
5077        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
5078        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
5079        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
5080        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
5081        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
5082        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
5083    }, pluralize$1 = function (u) {
5084        return function (number, withoutSuffix, string, isFuture) {
5085            var f = pluralForm$1(number),
5086                str = plurals$1[u][pluralForm$1(number)];
5087            if (f === 2) {
5088                str = str[withoutSuffix ? 0 : 1];
5089            }
5090            return str.replace(/%d/i, number);
5091        };
5092    }, months$2 = [
5093        'يناير',
5094        'فبراير',
5095        'مارس',
5096        'أبريل',
5097        'مايو',
5098        'يونيو',
5099        'يوليو',
5100        'أغسطس',
5101        'سبتمبر',
5102        'أكتوبر',
5103        'نوفمبر',
5104        'ديسمبر'
5105    ];
5106
5107    hooks.defineLocale('ar', {
5108        months : months$2,
5109        monthsShort : months$2,
5110        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
5111        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
5112        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
5113        weekdaysParseExact : true,
5114        longDateFormat : {
5115            LT : 'HH:mm',
5116            LTS : 'HH:mm:ss',
5117            L : 'D/\u200FM/\u200FYYYY',
5118            LL : 'D MMMM YYYY',
5119            LLL : 'D MMMM YYYY HH:mm',
5120            LLLL : 'dddd D MMMM YYYY HH:mm'
5121        },
5122        meridiemParse: /ص|م/,
5123        isPM : function (input) {
5124            return 'م' === input;
5125        },
5126        meridiem : function (hour, minute, isLower) {
5127            if (hour < 12) {
5128                return 'ص';
5129            } else {
5130                return 'م';
5131            }
5132        },
5133        calendar : {
5134            sameDay: '[اليوم عند الساعة] LT',
5135            nextDay: '[غدًا عند الساعة] LT',
5136            nextWeek: 'dddd [عند الساعة] LT',
5137            lastDay: '[أمس عند الساعة] LT',
5138            lastWeek: 'dddd [عند الساعة] LT',
5139            sameElse: 'L'
5140        },
5141        relativeTime : {
5142            future : 'بعد %s',
5143            past : 'منذ %s',
5144            s : pluralize$1('s'),
5145            ss : pluralize$1('s'),
5146            m : pluralize$1('m'),
5147            mm : pluralize$1('m'),
5148            h : pluralize$1('h'),
5149            hh : pluralize$1('h'),
5150            d : pluralize$1('d'),
5151            dd : pluralize$1('d'),
5152            M : pluralize$1('M'),
5153            MM : pluralize$1('M'),
5154            y : pluralize$1('y'),
5155            yy : pluralize$1('y')
5156        },
5157        preparse: function (string) {
5158            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
5159                return numberMap$1[match];
5160            }).replace(/،/g, ',');
5161        },
5162        postformat: function (string) {
5163            return string.replace(/\d/g, function (match) {
5164                return symbolMap$2[match];
5165            }).replace(/,/g, '،');
5166        },
5167        week : {
5168            dow : 6, // Saturday is the first day of the week.
5169            doy : 12  // The week that contains Jan 12th is the first week of the year.
5170        }
5171    });
5172
5173    //! moment.js locale configuration
5174
5175    var suffixes = {
5176        1: '-inci',
5177        5: '-inci',
5178        8: '-inci',
5179        70: '-inci',
5180        80: '-inci',
5181        2: '-nci',
5182        7: '-nci',
5183        20: '-nci',
5184        50: '-nci',
5185        3: '-üncü',
5186        4: '-üncü',
5187        100: '-üncü',
5188        6: '-ncı',
5189        9: '-uncu',
5190        10: '-uncu',
5191        30: '-uncu',
5192        60: '-ıncı',
5193        90: '-ıncı'
5194    };
5195
5196    hooks.defineLocale('az', {
5197        months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),
5198        monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
5199        weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),
5200        weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
5201        weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
5202        weekdaysParseExact : true,
5203        longDateFormat : {
5204            LT : 'HH:mm',
5205            LTS : 'HH:mm:ss',
5206            L : 'DD.MM.YYYY',
5207            LL : 'D MMMM YYYY',
5208            LLL : 'D MMMM YYYY HH:mm',
5209            LLLL : 'dddd, D MMMM YYYY HH:mm'
5210        },
5211        calendar : {
5212            sameDay : '[bugün saat] LT',
5213            nextDay : '[sabah saat] LT',
5214            nextWeek : '[gələn həftə] dddd [saat] LT',
5215            lastDay : '[dünən] LT',
5216            lastWeek : '[keçən həftə] dddd [saat] LT',
5217            sameElse : 'L'
5218        },
5219        relativeTime : {
5220            future : '%s sonra',
5221            past : '%s əvvəl',
5222            s : 'birneçə saniyə',
5223            ss : '%d saniyə',
5224            m : 'bir dəqiqə',
5225            mm : '%d dəqiqə',
5226            h : 'bir saat',
5227            hh : '%d saat',
5228            d : 'bir gün',
5229            dd : '%d gün',
5230            M : 'bir ay',
5231            MM : '%d ay',
5232            y : 'bir il',
5233            yy : '%d il'
5234        },
5235        meridiemParse: /gecə|səhər|gündüz|axşam/,
5236        isPM : function (input) {
5237            return /^(gündüz|axşam)$/.test(input);
5238        },
5239        meridiem : function (hour, minute, isLower) {
5240            if (hour < 4) {
5241                return 'gecə';
5242            } else if (hour < 12) {
5243                return 'səhər';
5244            } else if (hour < 17) {
5245                return 'gündüz';
5246            } else {
5247                return 'axşam';
5248            }
5249        },
5250        dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
5251        ordinal : function (number) {
5252            if (number === 0) {  // special case for zero
5253                return number + '-ıncı';
5254            }
5255            var a = number % 10,
5256                b = number % 100 - a,
5257                c = number >= 100 ? 100 : null;
5258            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
5259        },
5260        week : {
5261            dow : 1, // Monday is the first day of the week.
5262            doy : 7  // The week that contains Jan 7th is the first week of the year.
5263        }
5264    });
5265
5266    //! moment.js locale configuration
5267
5268    function plural(word, num) {
5269        var forms = word.split('_');
5270        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
5271    }
5272    function relativeTimeWithPlural(number, withoutSuffix, key) {
5273        var format = {
5274            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
5275            'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
5276            'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
5277            'dd': 'дзень_дні_дзён',
5278            'MM': 'месяц_месяцы_месяцаў',
5279            'yy': 'год_гады_гадоў'
5280        };
5281        if (key === 'm') {
5282            return withoutSuffix ? 'хвіліна' : 'хвіліну';
5283        }
5284        else if (key === 'h') {
5285            return withoutSuffix ? 'гадзіна' : 'гадзіну';
5286        }
5287        else {
5288            return number + ' ' + plural(format[key], +number);
5289        }
5290    }
5291
5292    hooks.defineLocale('be', {
5293        months : {
5294            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),
5295            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')
5296        },
5297        monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
5298        weekdays : {
5299            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),
5300            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
5301            isFormat: /\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/
5302        },
5303        weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
5304        weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
5305        longDateFormat : {
5306            LT : 'HH:mm',
5307            LTS : 'HH:mm:ss',
5308            L : 'DD.MM.YYYY',
5309            LL : 'D MMMM YYYY г.',
5310            LLL : 'D MMMM YYYY г., HH:mm',
5311            LLLL : 'dddd, D MMMM YYYY г., HH:mm'
5312        },
5313        calendar : {
5314            sameDay: '[Сёння ў] LT',
5315            nextDay: '[Заўтра ў] LT',
5316            lastDay: '[Учора ў] LT',
5317            nextWeek: function () {
5318                return '[У] dddd [ў] LT';
5319            },
5320            lastWeek: function () {
5321                switch (this.day()) {
5322                    case 0:
5323                    case 3:
5324                    case 5:
5325                    case 6:
5326                        return '[У мінулую] dddd [ў] LT';
5327                    case 1:
5328                    case 2:
5329                    case 4:
5330                        return '[У мінулы] dddd [ў] LT';
5331                }
5332            },
5333            sameElse: 'L'
5334        },
5335        relativeTime : {
5336            future : 'праз %s',
5337            past : '%s таму',
5338            s : 'некалькі секунд',
5339            m : relativeTimeWithPlural,
5340            mm : relativeTimeWithPlural,
5341            h : relativeTimeWithPlural,
5342            hh : relativeTimeWithPlural,
5343            d : 'дзень',
5344            dd : relativeTimeWithPlural,
5345            M : 'месяц',
5346            MM : relativeTimeWithPlural,
5347            y : 'год',
5348            yy : relativeTimeWithPlural
5349        },
5350        meridiemParse: /ночы|раніцы|дня|вечара/,
5351        isPM : function (input) {
5352            return /^(дня|вечара)$/.test(input);
5353        },
5354        meridiem : function (hour, minute, isLower) {
5355            if (hour < 4) {
5356                return 'ночы';
5357            } else if (hour < 12) {
5358                return 'раніцы';
5359            } else if (hour < 17) {
5360                return 'дня';
5361            } else {
5362                return 'вечара';
5363            }
5364        },
5365        dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/,
5366        ordinal: function (number, period) {
5367            switch (period) {
5368                case 'M':
5369                case 'd':
5370                case 'DDD':
5371                case 'w':
5372                case 'W':
5373                    return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';
5374                case 'D':
5375                    return number + '-га';
5376                default:
5377                    return number;
5378            }
5379        },
5380        week : {
5381            dow : 1, // Monday is the first day of the week.
5382            doy : 7  // The week that contains Jan 7th is the first week of the year.
5383        }
5384    });
5385
5386    //! moment.js locale configuration
5387
5388    hooks.defineLocale('bg', {
5389        months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),
5390        monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
5391        weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),
5392        weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
5393        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
5394        longDateFormat : {
5395            LT : 'H:mm',
5396            LTS : 'H:mm:ss',
5397            L : 'D.MM.YYYY',
5398            LL : 'D MMMM YYYY',
5399            LLL : 'D MMMM YYYY H:mm',
5400            LLLL : 'dddd, D MMMM YYYY H:mm'
5401        },
5402        calendar : {
5403            sameDay : '[Днес в] LT',
5404            nextDay : '[Утре в] LT',
5405            nextWeek : 'dddd [в] LT',
5406            lastDay : '[Вчера в] LT',
5407            lastWeek : function () {
5408                switch (this.day()) {
5409                    case 0:
5410                    case 3:
5411                    case 6:
5412                        return '[В изминалата] dddd [в] LT';
5413                    case 1:
5414                    case 2:
5415                    case 4:
5416                    case 5:
5417                        return '[В изминалия] dddd [в] LT';
5418                }
5419            },
5420            sameElse : 'L'
5421        },
5422        relativeTime : {
5423            future : 'след %s',
5424            past : 'преди %s',
5425            s : 'няколко секунди',
5426            ss : '%d секунди',
5427            m : 'минута',
5428            mm : '%d минути',
5429            h : 'час',
5430            hh : '%d часа',
5431            d : 'ден',
5432            dd : '%d дни',
5433            M : 'месец',
5434            MM : '%d месеца',
5435            y : 'година',
5436            yy : '%d години'
5437        },
5438        dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
5439        ordinal : function (number) {
5440            var lastDigit = number % 10,
5441                last2Digits = number % 100;
5442            if (number === 0) {
5443                return number + '-ев';
5444            } else if (last2Digits === 0) {
5445                return number + '-ен';
5446            } else if (last2Digits > 10 && last2Digits < 20) {
5447                return number + '-ти';
5448            } else if (lastDigit === 1) {
5449                return number + '-ви';
5450            } else if (lastDigit === 2) {
5451                return number + '-ри';
5452            } else if (lastDigit === 7 || lastDigit === 8) {
5453                return number + '-ми';
5454            } else {
5455                return number + '-ти';
5456            }
5457        },
5458        week : {
5459            dow : 1, // Monday is the first day of the week.
5460            doy : 7  // The week that contains Jan 7th is the first week of the year.
5461        }
5462    });
5463
5464    //! moment.js locale configuration
5465
5466    hooks.defineLocale('bm', {
5467        months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),
5468        monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),
5469        weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
5470        weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),
5471        weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
5472        longDateFormat : {
5473            LT : 'HH:mm',
5474            LTS : 'HH:mm:ss',
5475            L : 'DD/MM/YYYY',
5476            LL : 'MMMM [tile] D [san] YYYY',
5477            LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
5478            LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'
5479        },
5480        calendar : {
5481            sameDay : '[Bi lɛrɛ] LT',
5482            nextDay : '[Sini lɛrɛ] LT',
5483            nextWeek : 'dddd [don lɛrɛ] LT',
5484            lastDay : '[Kunu lɛrɛ] LT',
5485            lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT',
5486            sameElse : 'L'
5487        },
5488        relativeTime : {
5489            future : '%s kɔnɔ',
5490            past : 'a bɛ %s bɔ',
5491            s : 'sanga dama dama',
5492            ss : 'sekondi %d',
5493            m : 'miniti kelen',
5494            mm : 'miniti %d',
5495            h : 'lɛrɛ kelen',
5496            hh : 'lɛrɛ %d',
5497            d : 'tile kelen',
5498            dd : 'tile %d',
5499            M : 'kalo kelen',
5500            MM : 'kalo %d',
5501            y : 'san kelen',
5502            yy : 'san %d'
5503        },
5504        week : {
5505            dow : 1, // Monday is the first day of the week.
5506            doy : 4  // The week that contains Jan 4th is the first week of the year.
5507        }
5508    });
5509
5510    //! moment.js locale configuration
5511
5512    var symbolMap$3 = {
5513        '1': 'à§§',
5514        '2': '২',
5515        '3': 'à§©',
5516        '4': '৪',
5517        '5': 'à§«',
5518        '6': '৬',
5519        '7': 'à§­',
5520        '8': 'à§®',
5521        '9': '৯',
5522        '0': '০'
5523    },
5524    numberMap$2 = {
5525        'à§§': '1',
5526        '২': '2',
5527        'à§©': '3',
5528        '৪': '4',
5529        'à§«': '5',
5530        '৬': '6',
5531        'à§­': '7',
5532        'à§®': '8',
5533        '৯': '9',
5534        '০': '0'
5535    };
5536
5537    hooks.defineLocale('bn', {
5538        months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
5539        monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
5540        weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
5541        weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
5542        weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),
5543        longDateFormat : {
5544            LT : 'A h:mm সময়',
5545            LTS : 'A h:mm:ss সময়',
5546            L : 'DD/MM/YYYY',
5547            LL : 'D MMMM YYYY',
5548            LLL : 'D MMMM YYYY, A h:mm সময়',
5549            LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'
5550        },
5551        calendar : {
5552            sameDay : '[আজ] LT',
5553            nextDay : '[আগামীকাল] LT',
5554            nextWeek : 'dddd, LT',
5555            lastDay : '[গতকাল] LT',
5556            lastWeek : '[গত] dddd, LT',
5557            sameElse : 'L'
5558        },
5559        relativeTime : {
5560            future : '%s পরে',
5561            past : '%s আগে',
5562            s : 'কয়েক সেকেন্ড',
5563            ss : '%d সেকেন্ড',
5564            m : 'এক মিনিট',
5565            mm : '%d মিনিট',
5566            h : 'এক ঘন্টা',
5567            hh : '%d ঘন্টা',
5568            d : 'এক দিন',
5569            dd : '%d দিন',
5570            M : 'এক মাস',
5571            MM : '%d মাস',
5572            y : 'এক বছর',
5573            yy : '%d বছর'
5574        },
5575        preparse: function (string) {
5576            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
5577                return numberMap$2[match];
5578            });
5579        },
5580        postformat: function (string) {
5581            return string.replace(/\d/g, function (match) {
5582                return symbolMap$3[match];
5583            });
5584        },
5585        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
5586        meridiemHour : function (hour, meridiem) {
5587            if (hour === 12) {
5588                hour = 0;
5589            }
5590            if ((meridiem === 'রাত' && hour >= 4) ||
5591                    (meridiem === 'দুপুর' && hour < 5) ||
5592                    meridiem === 'বিকাল') {
5593                return hour + 12;
5594            } else {
5595                return hour;
5596            }
5597        },
5598        meridiem : function (hour, minute, isLower) {
5599            if (hour < 4) {
5600                return 'রাত';
5601            } else if (hour < 10) {
5602                return 'সকাল';
5603            } else if (hour < 17) {
5604                return 'দুপুর';
5605            } else if (hour < 20) {
5606                return 'বিকাল';
5607            } else {
5608                return 'রাত';
5609            }
5610        },
5611        week : {
5612            dow : 0, // Sunday is the first day of the week.
5613            doy : 6  // The week that contains Jan 6th is the first week of the year.
5614        }
5615    });
5616
5617    //! moment.js locale configuration
5618
5619    var symbolMap$4 = {
5620        '1': '༡',
5621        '2': '༢',
5622        '3': '༣',
5623        '4': '༤',
5624        '5': '༥',
5625        '6': '༦',
5626        '7': '༧',
5627        '8': '༨',
5628        '9': '༩',
5629        '0': '༠'
5630    },
5631    numberMap$3 = {
5632        '༡': '1',
5633        '༢': '2',
5634        '༣': '3',
5635        '༤': '4',
5636        '༥': '5',
5637        '༦': '6',
5638        '༧': '7',
5639        '༨': '8',
5640        '༩': '9',
5641        '༠': '0'
5642    };
5643
5644    hooks.defineLocale('bo', {
5645        months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
5646        monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
5647        weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),
5648        weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
5649        weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
5650        longDateFormat : {
5651            LT : 'A h:mm',
5652            LTS : 'A h:mm:ss',
5653            L : 'DD/MM/YYYY',
5654            LL : 'D MMMM YYYY',
5655            LLL : 'D MMMM YYYY, A h:mm',
5656            LLLL : 'dddd, D MMMM YYYY, A h:mm'
5657        },
5658        calendar : {
5659            sameDay : '[དི་རིང] LT',
5660            nextDay : '[སང་ཉིན] LT',
5661            nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',
5662            lastDay : '[ཁ་སང] LT',
5663            lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
5664            sameElse : 'L'
5665        },
5666        relativeTime : {
5667            future : '%s ལ་',
5668            past : '%s སྔན་ལ',
5669            s : 'ལམ་སང',
5670            ss : '%d སྐར་ཆ།',
5671            m : 'སྐར་མ་གཅིག',
5672            mm : '%d སྐར་མ',
5673            h : 'ཆུ་ཚོད་གཅིག',
5674            hh : '%d ཆུ་ཚོད',
5675            d : 'ཉིན་གཅིག',
5676            dd : '%d ཉིན་',
5677            M : 'ཟླ་བ་གཅིག',
5678            MM : '%d ཟླ་བ',
5679            y : 'ལོ་གཅིག',
5680            yy : '%d ལོ'
5681        },
5682        preparse: function (string) {
5683            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
5684                return numberMap$3[match];
5685            });
5686        },
5687        postformat: function (string) {
5688            return string.replace(/\d/g, function (match) {
5689                return symbolMap$4[match];
5690            });
5691        },
5692        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
5693        meridiemHour : function (hour, meridiem) {
5694            if (hour === 12) {
5695                hour = 0;
5696            }
5697            if ((meridiem === 'མཚན་མོ' && hour >= 4) ||
5698                    (meridiem === 'ཉིན་གུང' && hour < 5) ||
5699                    meridiem === 'དགོང་དག') {
5700                return hour + 12;
5701            } else {
5702                return hour;
5703            }
5704        },
5705        meridiem : function (hour, minute, isLower) {
5706            if (hour < 4) {
5707                return 'མཚན་མོ';
5708            } else if (hour < 10) {
5709                return 'ཞོགས་ཀས';
5710            } else if (hour < 17) {
5711                return 'ཉིན་གུང';
5712            } else if (hour < 20) {
5713                return 'དགོང་དག';
5714            } else {
5715                return 'མཚན་མོ';
5716            }
5717        },
5718        week : {
5719            dow : 0, // Sunday is the first day of the week.
5720            doy : 6  // The week that contains Jan 6th is the first week of the year.
5721        }
5722    });
5723
5724    //! moment.js locale configuration
5725
5726    function relativeTimeWithMutation(number, withoutSuffix, key) {
5727        var format = {
5728            'mm': 'munutenn',
5729            'MM': 'miz',
5730            'dd': 'devezh'
5731        };
5732        return number + ' ' + mutation(format[key], number);
5733    }
5734    function specialMutationForYears(number) {
5735        switch (lastNumber(number)) {
5736            case 1:
5737            case 3:
5738            case 4:
5739            case 5:
5740            case 9:
5741                return number + ' bloaz';
5742            default:
5743                return number + ' vloaz';
5744        }
5745    }
5746    function lastNumber(number) {
5747        if (number > 9) {
5748            return lastNumber(number % 10);
5749        }
5750        return number;
5751    }
5752    function mutation(text, number) {
5753        if (number === 2) {
5754            return softMutation(text);
5755        }
5756        return text;
5757    }
5758    function softMutation(text) {
5759        var mutationTable = {
5760            'm': 'v',
5761            'b': 'v',
5762            'd': 'z'
5763        };
5764        if (mutationTable[text.charAt(0)] === undefined) {
5765            return text;
5766        }
5767        return mutationTable[text.charAt(0)] + text.substring(1);
5768    }
5769
5770    hooks.defineLocale('br', {
5771        months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
5772        monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
5773        weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'),
5774        weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
5775        weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
5776        weekdaysParseExact : true,
5777        longDateFormat : {
5778            LT : 'h[e]mm A',
5779            LTS : 'h[e]mm:ss A',
5780            L : 'DD/MM/YYYY',
5781            LL : 'D [a viz] MMMM YYYY',
5782            LLL : 'D [a viz] MMMM YYYY h[e]mm A',
5783            LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'
5784        },
5785        calendar : {
5786            sameDay : '[Hiziv da] LT',
5787            nextDay : '[Warc\'hoazh da] LT',
5788            nextWeek : 'dddd [da] LT',
5789            lastDay : '[Dec\'h da] LT',
5790            lastWeek : 'dddd [paset da] LT',
5791            sameElse : 'L'
5792        },
5793        relativeTime : {
5794            future : 'a-benn %s',
5795            past : '%s \'zo',
5796            s : 'un nebeud segondennoù',
5797            ss : '%d eilenn',
5798            m : 'ur vunutenn',
5799            mm : relativeTimeWithMutation,
5800            h : 'un eur',
5801            hh : '%d eur',
5802            d : 'un devezh',
5803            dd : relativeTimeWithMutation,
5804            M : 'ur miz',
5805            MM : relativeTimeWithMutation,
5806            y : 'ur bloaz',
5807            yy : specialMutationForYears
5808        },
5809        dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/,
5810        ordinal : function (number) {
5811            var output = (number === 1) ? 'añ' : 'vet';
5812            return number + output;
5813        },
5814        week : {
5815            dow : 1, // Monday is the first day of the week.
5816            doy : 4  // The week that contains Jan 4th is the first week of the year.
5817        }
5818    });
5819
5820    //! moment.js locale configuration
5821
5822    function translate(number, withoutSuffix, key) {
5823        var result = number + ' ';
5824        switch (key) {
5825            case 'ss':
5826                if (number === 1) {
5827                    result += 'sekunda';
5828                } else if (number === 2 || number === 3 || number === 4) {
5829                    result += 'sekunde';
5830                } else {
5831                    result += 'sekundi';
5832                }
5833                return result;
5834            case 'm':
5835                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
5836            case 'mm':
5837                if (number === 1) {
5838                    result += 'minuta';
5839                } else if (number === 2 || number === 3 || number === 4) {
5840                    result += 'minute';
5841                } else {
5842                    result += 'minuta';
5843                }
5844                return result;
5845            case 'h':
5846                return withoutSuffix ? 'jedan sat' : 'jednog sata';
5847            case 'hh':
5848                if (number === 1) {
5849                    result += 'sat';
5850                } else if (number === 2 || number === 3 || number === 4) {
5851                    result += 'sata';
5852                } else {
5853                    result += 'sati';
5854                }
5855                return result;
5856            case 'dd':
5857                if (number === 1) {
5858                    result += 'dan';
5859                } else {
5860                    result += 'dana';
5861                }
5862                return result;
5863            case 'MM':
5864                if (number === 1) {
5865                    result += 'mjesec';
5866                } else if (number === 2 || number === 3 || number === 4) {
5867                    result += 'mjeseca';
5868                } else {
5869                    result += 'mjeseci';
5870                }
5871                return result;
5872            case 'yy':
5873                if (number === 1) {
5874                    result += 'godina';
5875                } else if (number === 2 || number === 3 || number === 4) {
5876                    result += 'godine';
5877                } else {
5878                    result += 'godina';
5879                }
5880                return result;
5881        }
5882    }
5883
5884    hooks.defineLocale('bs', {
5885        months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),
5886        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),
5887        monthsParseExact: true,
5888        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
5889        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
5890        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
5891        weekdaysParseExact : true,
5892        longDateFormat : {
5893            LT : 'H:mm',
5894            LTS : 'H:mm:ss',
5895            L : 'DD.MM.YYYY',
5896            LL : 'D. MMMM YYYY',
5897            LLL : 'D. MMMM YYYY H:mm',
5898            LLLL : 'dddd, D. MMMM YYYY H:mm'
5899        },
5900        calendar : {
5901            sameDay  : '[danas u] LT',
5902            nextDay  : '[sutra u] LT',
5903            nextWeek : function () {
5904                switch (this.day()) {
5905                    case 0:
5906                        return '[u] [nedjelju] [u] LT';
5907                    case 3:
5908                        return '[u] [srijedu] [u] LT';
5909                    case 6:
5910                        return '[u] [subotu] [u] LT';
5911                    case 1:
5912                    case 2:
5913                    case 4:
5914                    case 5:
5915                        return '[u] dddd [u] LT';
5916                }
5917            },
5918            lastDay  : '[jučer u] LT',
5919            lastWeek : function () {
5920                switch (this.day()) {
5921                    case 0:
5922                    case 3:
5923                        return '[prošlu] dddd [u] LT';
5924                    case 6:
5925                        return '[prošle] [subote] [u] LT';
5926                    case 1:
5927                    case 2:
5928                    case 4:
5929                    case 5:
5930                        return '[prošli] dddd [u] LT';
5931                }
5932            },
5933            sameElse : 'L'
5934        },
5935        relativeTime : {
5936            future : 'za %s',
5937            past   : 'prije %s',
5938            s      : 'par sekundi',
5939            ss     : translate,
5940            m      : translate,
5941            mm     : translate,
5942            h      : translate,
5943            hh     : translate,
5944            d      : 'dan',
5945            dd     : translate,
5946            M      : 'mjesec',
5947            MM     : translate,
5948            y      : 'godinu',
5949            yy     : translate
5950        },
5951        dayOfMonthOrdinalParse: /\d{1,2}\./,
5952        ordinal : '%d.',
5953        week : {
5954            dow : 1, // Monday is the first day of the week.
5955            doy : 7  // The week that contains Jan 7th is the first week of the year.
5956        }
5957    });
5958
5959    //! moment.js locale configuration
5960
5961    hooks.defineLocale('ca', {
5962        months : {
5963            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),
5964            format: 'de gener_de febrer_de març_d\'abril_de maig_de juny_de juliol_d\'agost_de setembre_d\'octubre_de novembre_de desembre'.split('_'),
5965            isFormat: /D[oD]?(\s)+MMMM/
5966        },
5967        monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),
5968        monthsParseExact : true,
5969        weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),
5970        weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
5971        weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'),
5972        weekdaysParseExact : true,
5973        longDateFormat : {
5974            LT : 'H:mm',
5975            LTS : 'H:mm:ss',
5976            L : 'DD/MM/YYYY',
5977            LL : 'D MMMM [de] YYYY',
5978            ll : 'D MMM YYYY',
5979            LLL : 'D MMMM [de] YYYY [a les] H:mm',
5980            lll : 'D MMM YYYY, H:mm',
5981            LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm',
5982            llll : 'ddd D MMM YYYY, H:mm'
5983        },
5984        calendar : {
5985            sameDay : function () {
5986                return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
5987            },
5988            nextDay : function () {
5989                return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
5990            },
5991            nextWeek : function () {
5992                return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
5993            },
5994            lastDay : function () {
5995                return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
5996            },
5997            lastWeek : function () {
5998                return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
5999            },
6000            sameElse : 'L'
6001        },
6002        relativeTime : {
6003            future : 'd\'aquí %s',
6004            past : 'fa %s',
6005            s : 'uns segons',
6006            ss : '%d segons',
6007            m : 'un minut',
6008            mm : '%d minuts',
6009            h : 'una hora',
6010            hh : '%d hores',
6011            d : 'un dia',
6012            dd : '%d dies',
6013            M : 'un mes',
6014            MM : '%d mesos',
6015            y : 'un any',
6016            yy : '%d anys'
6017        },
6018        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
6019        ordinal : function (number, period) {
6020            var output = (number === 1) ? 'r' :
6021                (number === 2) ? 'n' :
6022                (number === 3) ? 'r' :
6023                (number === 4) ? 't' : 'è';
6024            if (period === 'w' || period === 'W') {
6025                output = 'a';
6026            }
6027            return number + output;
6028        },
6029        week : {
6030            dow : 1, // Monday is the first day of the week.
6031            doy : 4  // The week that contains Jan 4th is the first week of the year.
6032        }
6033    });
6034
6035    //! moment.js locale configuration
6036
6037    var months$3 = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),
6038        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');
6039
6040    var monthsParse = [/^led/i, /^úno/i, /^bře/i, /^dub/i, /^kvě/i, /^(čvn|červen$|června)/i, /^(čvc|červenec|července)/i, /^srp/i, /^zář/i, /^říj/i, /^lis/i, /^pro/i];
6041    // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
6042    // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
6043    var monthsRegex$1 = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;
6044
6045    function plural$1(n) {
6046        return (n > 1) && (n < 5) && (~~(n / 10) !== 1);
6047    }
6048    function translate$1(number, withoutSuffix, key, isFuture) {
6049        var result = number + ' ';
6050        switch (key) {
6051            case 's':  // a few seconds / in a few seconds / a few seconds ago
6052                return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';
6053            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
6054                if (withoutSuffix || isFuture) {
6055                    return result + (plural$1(number) ? 'sekundy' : 'sekund');
6056                } else {
6057                    return result + 'sekundami';
6058                }
6059                break;
6060            case 'm':  // a minute / in a minute / a minute ago
6061                return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
6062            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
6063                if (withoutSuffix || isFuture) {
6064                    return result + (plural$1(number) ? 'minuty' : 'minut');
6065                } else {
6066                    return result + 'minutami';
6067                }
6068                break;
6069            case 'h':  // an hour / in an hour / an hour ago
6070                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
6071            case 'hh': // 9 hours / in 9 hours / 9 hours ago
6072                if (withoutSuffix || isFuture) {
6073                    return result + (plural$1(number) ? 'hodiny' : 'hodin');
6074                } else {
6075                    return result + 'hodinami';
6076                }
6077                break;
6078            case 'd':  // a day / in a day / a day ago
6079                return (withoutSuffix || isFuture) ? 'den' : 'dnem';
6080            case 'dd': // 9 days / in 9 days / 9 days ago
6081                if (withoutSuffix || isFuture) {
6082                    return result + (plural$1(number) ? 'dny' : 'dní');
6083                } else {
6084                    return result + 'dny';
6085                }
6086                break;
6087            case 'M':  // a month / in a month / a month ago
6088                return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
6089            case 'MM': // 9 months / in 9 months / 9 months ago
6090                if (withoutSuffix || isFuture) {
6091                    return result + (plural$1(number) ? 'měsíce' : 'měsíců');
6092                } else {
6093                    return result + 'měsíci';
6094                }
6095                break;
6096            case 'y':  // a year / in a year / a year ago
6097                return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
6098            case 'yy': // 9 years / in 9 years / 9 years ago
6099                if (withoutSuffix || isFuture) {
6100                    return result + (plural$1(number) ? 'roky' : 'let');
6101                } else {
6102                    return result + 'lety';
6103                }
6104                break;
6105        }
6106    }
6107
6108    hooks.defineLocale('cs', {
6109        months : months$3,
6110        monthsShort : monthsShort,
6111        monthsRegex : monthsRegex$1,
6112        monthsShortRegex : monthsRegex$1,
6113        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
6114        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
6115        monthsStrictRegex : /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,
6116        monthsShortStrictRegex : /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,
6117        monthsParse : monthsParse,
6118        longMonthsParse : monthsParse,
6119        shortMonthsParse : monthsParse,
6120        weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
6121        weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),
6122        weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),
6123        longDateFormat : {
6124            LT: 'H:mm',
6125            LTS : 'H:mm:ss',
6126            L : 'DD.MM.YYYY',
6127            LL : 'D. MMMM YYYY',
6128            LLL : 'D. MMMM YYYY H:mm',
6129            LLLL : 'dddd D. MMMM YYYY H:mm',
6130            l : 'D. M. YYYY'
6131        },
6132        calendar : {
6133            sameDay: '[dnes v] LT',
6134            nextDay: '[zítra v] LT',
6135            nextWeek: function () {
6136                switch (this.day()) {
6137                    case 0:
6138                        return '[v neděli v] LT';
6139                    case 1:
6140                    case 2:
6141                        return '[v] dddd [v] LT';
6142                    case 3:
6143                        return '[ve středu v] LT';
6144                    case 4:
6145                        return '[ve čtvrtek v] LT';
6146                    case 5:
6147                        return '[v pátek v] LT';
6148                    case 6:
6149                        return '[v sobotu v] LT';
6150                }
6151            },
6152            lastDay: '[včera v] LT',
6153            lastWeek: function () {
6154                switch (this.day()) {
6155                    case 0:
6156                        return '[minulou neděli v] LT';
6157                    case 1:
6158                    case 2:
6159                        return '[minulé] dddd [v] LT';
6160                    case 3:
6161                        return '[minulou středu v] LT';
6162                    case 4:
6163                    case 5:
6164                        return '[minulý] dddd [v] LT';
6165                    case 6:
6166                        return '[minulou sobotu v] LT';
6167                }
6168            },
6169            sameElse: 'L'
6170        },
6171        relativeTime : {
6172            future : 'za %s',
6173            past : 'před %s',
6174            s : translate$1,
6175            ss : translate$1,
6176            m : translate$1,
6177            mm : translate$1,
6178            h : translate$1,
6179            hh : translate$1,
6180            d : translate$1,
6181            dd : translate$1,
6182            M : translate$1,
6183            MM : translate$1,
6184            y : translate$1,
6185            yy : translate$1
6186        },
6187        dayOfMonthOrdinalParse : /\d{1,2}\./,
6188        ordinal : '%d.',
6189        week : {
6190            dow : 1, // Monday is the first day of the week.
6191            doy : 4  // The week that contains Jan 4th is the first week of the year.
6192        }
6193    });
6194
6195    //! moment.js locale configuration
6196
6197    hooks.defineLocale('cv', {
6198        months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),
6199        monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
6200        weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),
6201        weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
6202        weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
6203        longDateFormat : {
6204            LT : 'HH:mm',
6205            LTS : 'HH:mm:ss',
6206            L : 'DD-MM-YYYY',
6207            LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
6208            LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
6209            LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'
6210        },
6211        calendar : {
6212            sameDay: '[Паян] LT [сехетре]',
6213            nextDay: '[Ыран] LT [сехетре]',
6214            lastDay: '[Ӗнер] LT [сехетре]',
6215            nextWeek: '[Ҫитес] dddd LT [сехетре]',
6216            lastWeek: '[Иртнӗ] dddd LT [сехетре]',
6217            sameElse: 'L'
6218        },
6219        relativeTime : {
6220            future : function (output) {
vendor: 2,677 bytes, lines 6221-6293
6221                var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';
6222                return output + affix;
6223            },
6224            past : '%s каялла',
6225            s : 'пӗр-ик ҫеккунт',
6226            ss : '%d ҫеккунт',
6227            m : 'пӗр минут',
6228            mm : '%d минут',
6229            h : 'пӗр сехет',
6230            hh : '%d сехет',
6231            d : 'пӗр кун',
6232            dd : '%d кун',
6233            M : 'пӗр уйӑх',
6234            MM : '%d уйӑх',
6235            y : 'пӗр ҫул',
6236            yy : '%d ҫул'
6237        },
6238        dayOfMonthOrdinalParse: /\d{1,2}-мӗш/,
6239        ordinal : '%d-мӗш',
6240        week : {
6241            dow : 1, // Monday is the first day of the week.
6242            doy : 7  // The week that contains Jan 7th is the first week of the year.
6243        }
6244    });
6245
6246    //! moment.js locale configuration
6247
6248    hooks.defineLocale('cy', {
6249        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),
6250        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),
6251        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),
6252        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
6253        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
6254        weekdaysParseExact : true,
6255        // time formats are the same as en-gb
6256        longDateFormat: {
6257            LT: 'HH:mm',
6258            LTS : 'HH:mm:ss',
6259            L: 'DD/MM/YYYY',
6260            LL: 'D MMMM YYYY',
6261            LLL: 'D MMMM YYYY HH:mm',
6262            LLLL: 'dddd, D MMMM YYYY HH:mm'
6263        },
6264        calendar: {
6265            sameDay: '[Heddiw am] LT',
6266            nextDay: '[Yfory am] LT',
6267            nextWeek: 'dddd [am] LT',
6268            lastDay: '[Ddoe am] LT',
6269            lastWeek: 'dddd [diwethaf am] LT',
6270            sameElse: 'L'
6271        },
6272        relativeTime: {
6273            future: 'mewn %s',
6274            past: '%s yn ôl',
6275            s: 'ychydig eiliadau',
6276            ss: '%d eiliad',
6277            m: 'munud',
6278            mm: '%d munud',
6279            h: 'awr',
6280            hh: '%d awr',
6281            d: 'diwrnod',
6282            dd: '%d diwrnod',
6283            M: 'mis',
6284            MM: '%d mis',
6285            y: 'blwyddyn',
6286            yy: '%d flynedd'
6287        },
6288        dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
6289        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
6290        ordinal: function (number) {
6291            var b = number,
6292                output = '',
6293                lookup = [
vendor: 64,190 bytes, lines 6294-7992
6294                    '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed
6295                    'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed
6296                ];
6297            if (b > 20) {
6298                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
6299                    output = 'fed'; // not 30ain, 70ain or 90ain
6300                } else {
6301                    output = 'ain';
6302                }
6303            } else if (b > 0) {
6304                output = lookup[b];
6305            }
6306            return number + output;
6307        },
6308        week : {
6309            dow : 1, // Monday is the first day of the week.
6310            doy : 4  // The week that contains Jan 4th is the first week of the year.
6311        }
6312    });
6313
6314    //! moment.js locale configuration
6315
6316    hooks.defineLocale('da', {
6317        months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),
6318        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
6319        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
6320        weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),
6321        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
6322        longDateFormat : {
6323            LT : 'HH:mm',
6324            LTS : 'HH:mm:ss',
6325            L : 'DD.MM.YYYY',
6326            LL : 'D. MMMM YYYY',
6327            LLL : 'D. MMMM YYYY HH:mm',
6328            LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'
6329        },
6330        calendar : {
6331            sameDay : '[i dag kl.] LT',
6332            nextDay : '[i morgen kl.] LT',
6333            nextWeek : 'på dddd [kl.] LT',
6334            lastDay : '[i går kl.] LT',
6335            lastWeek : '[i] dddd[s kl.] LT',
6336            sameElse : 'L'
6337        },
6338        relativeTime : {
6339            future : 'om %s',
6340            past : '%s siden',
6341            s : 'få sekunder',
6342            ss : '%d sekunder',
6343            m : 'et minut',
6344            mm : '%d minutter',
6345            h : 'en time',
6346            hh : '%d timer',
6347            d : 'en dag',
6348            dd : '%d dage',
6349            M : 'en måned',
6350            MM : '%d måneder',
6351            y : 'et år',
6352            yy : '%d år'
6353        },
6354        dayOfMonthOrdinalParse: /\d{1,2}\./,
6355        ordinal : '%d.',
6356        week : {
6357            dow : 1, // Monday is the first day of the week.
6358            doy : 4  // The week that contains Jan 4th is the first week of the year.
6359        }
6360    });
6361
6362    //! moment.js locale configuration
6363
6364    function processRelativeTime(number, withoutSuffix, key, isFuture) {
6365        var format = {
6366            'm': ['eine Minute', 'einer Minute'],
6367            'h': ['eine Stunde', 'einer Stunde'],
6368            'd': ['ein Tag', 'einem Tag'],
6369            'dd': [number + ' Tage', number + ' Tagen'],
6370            'M': ['ein Monat', 'einem Monat'],
6371            'MM': [number + ' Monate', number + ' Monaten'],
6372            'y': ['ein Jahr', 'einem Jahr'],
6373            'yy': [number + ' Jahre', number + ' Jahren']
6374        };
6375        return withoutSuffix ? format[key][0] : format[key][1];
6376    }
6377
6378    hooks.defineLocale('de-at', {
6379        months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
6380        monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
6381        monthsParseExact : true,
6382        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
6383        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
6384        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
6385        weekdaysParseExact : true,
6386        longDateFormat : {
6387            LT: 'HH:mm',
6388            LTS: 'HH:mm:ss',
6389            L : 'DD.MM.YYYY',
6390            LL : 'D. MMMM YYYY',
6391            LLL : 'D. MMMM YYYY HH:mm',
6392            LLLL : 'dddd, D. MMMM YYYY HH:mm'
6393        },
6394        calendar : {
6395            sameDay: '[heute um] LT [Uhr]',
6396            sameElse: 'L',
6397            nextDay: '[morgen um] LT [Uhr]',
6398            nextWeek: 'dddd [um] LT [Uhr]',
6399            lastDay: '[gestern um] LT [Uhr]',
6400            lastWeek: '[letzten] dddd [um] LT [Uhr]'
6401        },
6402        relativeTime : {
6403            future : 'in %s',
6404            past : 'vor %s',
6405            s : 'ein paar Sekunden',
6406            ss : '%d Sekunden',
6407            m : processRelativeTime,
6408            mm : '%d Minuten',
6409            h : processRelativeTime,
6410            hh : '%d Stunden',
6411            d : processRelativeTime,
6412            dd : processRelativeTime,
6413            M : processRelativeTime,
6414            MM : processRelativeTime,
6415            y : processRelativeTime,
6416            yy : processRelativeTime
6417        },
6418        dayOfMonthOrdinalParse: /\d{1,2}\./,
6419        ordinal : '%d.',
6420        week : {
6421            dow : 1, // Monday is the first day of the week.
6422            doy : 4  // The week that contains Jan 4th is the first week of the year.
6423        }
6424    });
6425
6426    //! moment.js locale configuration
6427
6428    function processRelativeTime$1(number, withoutSuffix, key, isFuture) {
6429        var format = {
6430            'm': ['eine Minute', 'einer Minute'],
6431            'h': ['eine Stunde', 'einer Stunde'],
6432            'd': ['ein Tag', 'einem Tag'],
6433            'dd': [number + ' Tage', number + ' Tagen'],
6434            'M': ['ein Monat', 'einem Monat'],
6435            'MM': [number + ' Monate', number + ' Monaten'],
6436            'y': ['ein Jahr', 'einem Jahr'],
6437            'yy': [number + ' Jahre', number + ' Jahren']
6438        };
6439        return withoutSuffix ? format[key][0] : format[key][1];
6440    }
6441
6442    hooks.defineLocale('de-ch', {
6443        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
6444        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
6445        monthsParseExact : true,
6446        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
6447        weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
6448        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
6449        weekdaysParseExact : true,
6450        longDateFormat : {
6451            LT: 'HH:mm',
6452            LTS: 'HH:mm:ss',
6453            L : 'DD.MM.YYYY',
6454            LL : 'D. MMMM YYYY',
6455            LLL : 'D. MMMM YYYY HH:mm',
6456            LLLL : 'dddd, D. MMMM YYYY HH:mm'
6457        },
6458        calendar : {
6459            sameDay: '[heute um] LT [Uhr]',
6460            sameElse: 'L',
6461            nextDay: '[morgen um] LT [Uhr]',
6462            nextWeek: 'dddd [um] LT [Uhr]',
6463            lastDay: '[gestern um] LT [Uhr]',
6464            lastWeek: '[letzten] dddd [um] LT [Uhr]'
6465        },
6466        relativeTime : {
6467            future : 'in %s',
6468            past : 'vor %s',
6469            s : 'ein paar Sekunden',
6470            ss : '%d Sekunden',
6471            m : processRelativeTime$1,
6472            mm : '%d Minuten',
6473            h : processRelativeTime$1,
6474            hh : '%d Stunden',
6475            d : processRelativeTime$1,
6476            dd : processRelativeTime$1,
6477            M : processRelativeTime$1,
6478            MM : processRelativeTime$1,
6479            y : processRelativeTime$1,
6480            yy : processRelativeTime$1
6481        },
6482        dayOfMonthOrdinalParse: /\d{1,2}\./,
6483        ordinal : '%d.',
6484        week : {
6485            dow : 1, // Monday is the first day of the week.
6486            doy : 4  // The week that contains Jan 4th is the first week of the year.
6487        }
6488    });
6489
6490    //! moment.js locale configuration
6491
6492    function processRelativeTime$2(number, withoutSuffix, key, isFuture) {
6493        var format = {
6494            'm': ['eine Minute', 'einer Minute'],
6495            'h': ['eine Stunde', 'einer Stunde'],
6496            'd': ['ein Tag', 'einem Tag'],
6497            'dd': [number + ' Tage', number + ' Tagen'],
6498            'M': ['ein Monat', 'einem Monat'],
6499            'MM': [number + ' Monate', number + ' Monaten'],
6500            'y': ['ein Jahr', 'einem Jahr'],
6501            'yy': [number + ' Jahre', number + ' Jahren']
6502        };
6503        return withoutSuffix ? format[key][0] : format[key][1];
6504    }
6505
6506    hooks.defineLocale('de', {
6507        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
6508        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
6509        monthsParseExact : true,
6510        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
6511        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
6512        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
6513        weekdaysParseExact : true,
6514        longDateFormat : {
6515            LT: 'HH:mm',
6516            LTS: 'HH:mm:ss',
6517            L : 'DD.MM.YYYY',
6518            LL : 'D. MMMM YYYY',
6519            LLL : 'D. MMMM YYYY HH:mm',
6520            LLLL : 'dddd, D. MMMM YYYY HH:mm'
6521        },
6522        calendar : {
6523            sameDay: '[heute um] LT [Uhr]',
6524            sameElse: 'L',
6525            nextDay: '[morgen um] LT [Uhr]',
6526            nextWeek: 'dddd [um] LT [Uhr]',
6527            lastDay: '[gestern um] LT [Uhr]',
6528            lastWeek: '[letzten] dddd [um] LT [Uhr]'
6529        },
6530        relativeTime : {
6531            future : 'in %s',
6532            past : 'vor %s',
6533            s : 'ein paar Sekunden',
6534            ss : '%d Sekunden',
6535            m : processRelativeTime$2,
6536            mm : '%d Minuten',
6537            h : processRelativeTime$2,
6538            hh : '%d Stunden',
6539            d : processRelativeTime$2,
6540            dd : processRelativeTime$2,
6541            M : processRelativeTime$2,
6542            MM : processRelativeTime$2,
6543            y : processRelativeTime$2,
6544            yy : processRelativeTime$2
6545        },
6546        dayOfMonthOrdinalParse: /\d{1,2}\./,
6547        ordinal : '%d.',
6548        week : {
6549            dow : 1, // Monday is the first day of the week.
6550            doy : 4  // The week that contains Jan 4th is the first week of the year.
6551        }
6552    });
6553
6554    //! moment.js locale configuration
6555
6556    var months$4 = [
6557        'ޖެނުއަރީ',
6558        'ފެބްރުއަރީ',
6559        'މާރިޗު',
6560        'އޭޕްރީލު',
6561        'މޭ',
6562        'ޖޫން',
6563        'ޖުލައި',
6564        'އޯގަސްޓު',
6565        'ސެޕްޓެމްބަރު',
6566        'އޮކްޓޯބަރު',
6567        'ނޮވެމްބަރު',
6568        'ޑިސެމްބަރު'
6569    ], weekdays = [
6570        'އާދިއްތަ',
6571        'ހޯމަ',
6572        'އަންގާރަ',
6573        'ބުދަ',
6574        'ބުރާސްފަތި',
6575        'ހުކުރު',
6576        'ހޮނިހިރު'
6577    ];
6578
6579    hooks.defineLocale('dv', {
6580        months : months$4,
6581        monthsShort : months$4,
6582        weekdays : weekdays,
6583        weekdaysShort : weekdays,
6584        weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
6585        longDateFormat : {
6586
6587            LT : 'HH:mm',
6588            LTS : 'HH:mm:ss',
6589            L : 'D/M/YYYY',
6590            LL : 'D MMMM YYYY',
6591            LLL : 'D MMMM YYYY HH:mm',
6592            LLLL : 'dddd D MMMM YYYY HH:mm'
6593        },
6594        meridiemParse: /މކ|މފ/,
6595        isPM : function (input) {
6596            return 'މފ' === input;
6597        },
6598        meridiem : function (hour, minute, isLower) {
6599            if (hour < 12) {
6600                return 'މކ';
6601            } else {
6602                return 'މފ';
6603            }
6604        },
6605        calendar : {
6606            sameDay : '[މިއަދު] LT',
6607            nextDay : '[މާދަމާ] LT',
6608            nextWeek : 'dddd LT',
6609            lastDay : '[އިއްޔެ] LT',
6610            lastWeek : '[ފާއިތުވި] dddd LT',
6611            sameElse : 'L'
6612        },
6613        relativeTime : {
6614            future : 'ތެރޭގައި %s',
6615            past : 'ކުރިން %s',
6616            s : 'ސިކުންތުކޮޅެއް',
6617            ss : 'd% ސިކުންތު',
6618            m : 'މިނިޓެއް',
6619            mm : 'މިނިޓު %d',
6620            h : 'ގަޑިއިރެއް',
6621            hh : 'ގަޑިއިރު %d',
6622            d : 'ދުވަހެއް',
6623            dd : 'ދުވަސް %d',
6624            M : 'މަހެއް',
6625            MM : 'މަސް %d',
6626            y : 'އަހަރެއް',
6627            yy : 'އަހަރު %d'
6628        },
6629        preparse: function (string) {
6630            return string.replace(/،/g, ',');
6631        },
6632        postformat: function (string) {
6633            return string.replace(/,/g, '،');
6634        },
6635        week : {
6636            dow : 7,  // Sunday is the first day of the week.
6637            doy : 12  // The week that contains Jan 12th is the first week of the year.
6638        }
6639    });
6640
6641    //! moment.js locale configuration
6642
6643    hooks.defineLocale('el', {
6644        monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),
6645        monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),
6646        months : function (momentToFormat, format) {
6647            if (!momentToFormat) {
6648                return this._monthsNominativeEl;
6649            } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'
6650                return this._monthsGenitiveEl[momentToFormat.month()];
6651            } else {
6652                return this._monthsNominativeEl[momentToFormat.month()];
6653            }
6654        },
6655        monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
6656        weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),
6657        weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
6658        weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
6659        meridiem : function (hours, minutes, isLower) {
6660            if (hours > 11) {
6661                return isLower ? 'μμ' : 'ΜΜ';
6662            } else {
6663                return isLower ? 'πμ' : 'ΠΜ';
6664            }
6665        },
6666        isPM : function (input) {
6667            return ((input + '').toLowerCase()[0] === 'μ');
6668        },
6669        meridiemParse : /[ΠΜ]\.?Μ?\.?/i,
6670        longDateFormat : {
6671            LT : 'h:mm A',
6672            LTS : 'h:mm:ss A',
6673            L : 'DD/MM/YYYY',
6674            LL : 'D MMMM YYYY',
6675            LLL : 'D MMMM YYYY h:mm A',
6676            LLLL : 'dddd, D MMMM YYYY h:mm A'
6677        },
6678        calendarEl : {
6679            sameDay : '[Σήμερα {}] LT',
6680            nextDay : '[Αύριο {}] LT',
6681            nextWeek : 'dddd [{}] LT',
6682            lastDay : '[Χθες {}] LT',
6683            lastWeek : function () {
6684                switch (this.day()) {
6685                    case 6:
6686                        return '[το προηγούμενο] dddd [{}] LT';
6687                    default:
6688                        return '[την προηγούμενη] dddd [{}] LT';
6689                }
6690            },
6691            sameElse : 'L'
6692        },
6693        calendar : function (key, mom) {
6694            var output = this._calendarEl[key],
6695                hours = mom && mom.hours();
6696            if (isFunction(output)) {
6697                output = output.apply(mom);
6698            }
6699            return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));
6700        },
6701        relativeTime : {
6702            future : 'σε %s',
6703            past : '%s πριν',
6704            s : 'λίγα δευτερόλεπτα',
6705            ss : '%d δευτερόλεπτα',
6706            m : 'ένα λεπτό',
6707            mm : '%d λεπτά',
6708            h : 'μία ώρα',
6709            hh : '%d ώρες',
6710            d : 'μία μέρα',
6711            dd : '%d μέρες',
6712            M : 'ένας μήνας',
6713            MM : '%d μήνες',
6714            y : 'ένας χρόνος',
6715            yy : '%d χρόνια'
6716        },
6717        dayOfMonthOrdinalParse: /\d{1,2}η/,
6718        ordinal: '%dη',
6719        week : {
6720            dow : 1, // Monday is the first day of the week.
6721            doy : 4  // The week that contains Jan 4st is the first week of the year.
6722        }
6723    });
6724
6725    //! moment.js locale configuration
6726
6727    hooks.defineLocale('en-SG', {
6728        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
6729        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
6730        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
6731        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
6732        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
6733        longDateFormat : {
6734            LT : 'HH:mm',
6735            LTS : 'HH:mm:ss',
6736            L : 'DD/MM/YYYY',
6737            LL : 'D MMMM YYYY',
6738            LLL : 'D MMMM YYYY HH:mm',
6739            LLLL : 'dddd, D MMMM YYYY HH:mm'
6740        },
6741        calendar : {
6742            sameDay : '[Today at] LT',
6743            nextDay : '[Tomorrow at] LT',
6744            nextWeek : 'dddd [at] LT',
6745            lastDay : '[Yesterday at] LT',
6746            lastWeek : '[Last] dddd [at] LT',
6747            sameElse : 'L'
6748        },
6749        relativeTime : {
6750            future : 'in %s',
6751            past : '%s ago',
6752            s : 'a few seconds',
6753            ss : '%d seconds',
6754            m : 'a minute',
6755            mm : '%d minutes',
6756            h : 'an hour',
6757            hh : '%d hours',
6758            d : 'a day',
6759            dd : '%d days',
6760            M : 'a month',
6761            MM : '%d months',
6762            y : 'a year',
6763            yy : '%d years'
6764        },
6765        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
6766        ordinal : function (number) {
6767            var b = number % 10,
6768                output = (~~(number % 100 / 10) === 1) ? 'th' :
6769                (b === 1) ? 'st' :
6770                (b === 2) ? 'nd' :
6771                (b === 3) ? 'rd' : 'th';
6772            return number + output;
6773        },
6774        week : {
6775            dow : 1, // Monday is the first day of the week.
6776            doy : 4  // The week that contains Jan 4th is the first week of the year.
6777        }
6778    });
6779
6780    //! moment.js locale configuration
6781
6782    hooks.defineLocale('en-au', {
6783        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
6784        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
6785        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
6786        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
6787        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
6788        longDateFormat : {
6789            LT : 'h:mm A',
6790            LTS : 'h:mm:ss A',
6791            L : 'DD/MM/YYYY',
6792            LL : 'D MMMM YYYY',
6793            LLL : 'D MMMM YYYY h:mm A',
6794            LLLL : 'dddd, D MMMM YYYY h:mm A'
6795        },
6796        calendar : {
6797            sameDay : '[Today at] LT',
6798            nextDay : '[Tomorrow at] LT',
6799            nextWeek : 'dddd [at] LT',
6800            lastDay : '[Yesterday at] LT',
6801            lastWeek : '[Last] dddd [at] LT',
6802            sameElse : 'L'
6803        },
6804        relativeTime : {
6805            future : 'in %s',
6806            past : '%s ago',
6807            s : 'a few seconds',
6808            ss : '%d seconds',
6809            m : 'a minute',
6810            mm : '%d minutes',
6811            h : 'an hour',
6812            hh : '%d hours',
6813            d : 'a day',
6814            dd : '%d days',
6815            M : 'a month',
6816            MM : '%d months',
6817            y : 'a year',
6818            yy : '%d years'
6819        },
6820        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
6821        ordinal : function (number) {
6822            var b = number % 10,
6823                output = (~~(number % 100 / 10) === 1) ? 'th' :
6824                (b === 1) ? 'st' :
6825                (b === 2) ? 'nd' :
6826                (b === 3) ? 'rd' : 'th';
6827            return number + output;
6828        },
6829        week : {
6830            dow : 1, // Monday is the first day of the week.
6831            doy : 4  // The week that contains Jan 4th is the first week of the year.
6832        }
6833    });
6834
6835    //! moment.js locale configuration
6836
6837    hooks.defineLocale('en-ca', {
6838        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
6839        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
6840        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
6841        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
6842        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
6843        longDateFormat : {
6844            LT : 'h:mm A',
6845            LTS : 'h:mm:ss A',
6846            L : 'YYYY-MM-DD',
6847            LL : 'MMMM D, YYYY',
6848            LLL : 'MMMM D, YYYY h:mm A',
6849            LLLL : 'dddd, MMMM D, YYYY h:mm A'
6850        },
6851        calendar : {
6852            sameDay : '[Today at] LT',
6853            nextDay : '[Tomorrow at] LT',
6854            nextWeek : 'dddd [at] LT',
6855            lastDay : '[Yesterday at] LT',
6856            lastWeek : '[Last] dddd [at] LT',
6857            sameElse : 'L'
6858        },
6859        relativeTime : {
6860            future : 'in %s',
6861            past : '%s ago',
6862            s : 'a few seconds',
6863            ss : '%d seconds',
6864            m : 'a minute',
6865            mm : '%d minutes',
6866            h : 'an hour',
6867            hh : '%d hours',
6868            d : 'a day',
6869            dd : '%d days',
6870            M : 'a month',
6871            MM : '%d months',
6872            y : 'a year',
6873            yy : '%d years'
6874        },
6875        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
6876        ordinal : function (number) {
6877            var b = number % 10,
6878                output = (~~(number % 100 / 10) === 1) ? 'th' :
6879                (b === 1) ? 'st' :
6880                (b === 2) ? 'nd' :
6881                (b === 3) ? 'rd' : 'th';
6882            return number + output;
6883        }
6884    });
6885
6886    //! moment.js locale configuration
6887
6888    hooks.defineLocale('en-gb', {
6889        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
6890        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
6891        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
6892        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
6893        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
6894        longDateFormat : {
6895            LT : 'HH:mm',
6896            LTS : 'HH:mm:ss',
6897            L : 'DD/MM/YYYY',
6898            LL : 'D MMMM YYYY',
6899            LLL : 'D MMMM YYYY HH:mm',
6900            LLLL : 'dddd, D MMMM YYYY HH:mm'
6901        },
6902        calendar : {
6903            sameDay : '[Today at] LT',
6904            nextDay : '[Tomorrow at] LT',
6905            nextWeek : 'dddd [at] LT',
6906            lastDay : '[Yesterday at] LT',
6907            lastWeek : '[Last] dddd [at] LT',
6908            sameElse : 'L'
6909        },
6910        relativeTime : {
6911            future : 'in %s',
6912            past : '%s ago',
6913            s : 'a few seconds',
6914            ss : '%d seconds',
6915            m : 'a minute',
6916            mm : '%d minutes',
6917            h : 'an hour',
6918            hh : '%d hours',
6919            d : 'a day',
6920            dd : '%d days',
6921            M : 'a month',
6922            MM : '%d months',
6923            y : 'a year',
6924            yy : '%d years'
6925        },
6926        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
6927        ordinal : function (number) {
6928            var b = number % 10,
6929                output = (~~(number % 100 / 10) === 1) ? 'th' :
6930                (b === 1) ? 'st' :
6931                (b === 2) ? 'nd' :
6932                (b === 3) ? 'rd' : 'th';
6933            return number + output;
6934        },
6935        week : {
6936            dow : 1, // Monday is the first day of the week.
6937            doy : 4  // The week that contains Jan 4th is the first week of the year.
6938        }
6939    });
6940
6941    //! moment.js locale configuration
6942
6943    hooks.defineLocale('en-ie', {
6944        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
6945        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
6946        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
6947        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
6948        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
6949        longDateFormat : {
6950            LT : 'HH:mm',
6951            LTS : 'HH:mm:ss',
6952            L : 'DD/MM/YYYY',
6953            LL : 'D MMMM YYYY',
6954            LLL : 'D MMMM YYYY HH:mm',
6955            LLLL : 'dddd D MMMM YYYY HH:mm'
6956        },
6957        calendar : {
6958            sameDay : '[Today at] LT',
6959            nextDay : '[Tomorrow at] LT',
6960            nextWeek : 'dddd [at] LT',
6961            lastDay : '[Yesterday at] LT',
6962            lastWeek : '[Last] dddd [at] LT',
6963            sameElse : 'L'
6964        },
6965        relativeTime : {
6966            future : 'in %s',
6967            past : '%s ago',
6968            s : 'a few seconds',
6969            ss : '%d seconds',
6970            m : 'a minute',
6971            mm : '%d minutes',
6972            h : 'an hour',
6973            hh : '%d hours',
6974            d : 'a day',
6975            dd : '%d days',
6976            M : 'a month',
6977            MM : '%d months',
6978            y : 'a year',
6979            yy : '%d years'
6980        },
6981        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
6982        ordinal : function (number) {
6983            var b = number % 10,
6984                output = (~~(number % 100 / 10) === 1) ? 'th' :
6985                (b === 1) ? 'st' :
6986                (b === 2) ? 'nd' :
6987                (b === 3) ? 'rd' : 'th';
6988            return number + output;
6989        },
6990        week : {
6991            dow : 1, // Monday is the first day of the week.
6992            doy : 4  // The week that contains Jan 4th is the first week of the year.
6993        }
6994    });
6995
6996    //! moment.js locale configuration
6997
6998    hooks.defineLocale('en-il', {
6999        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
7000        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
7001        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
7002        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
7003        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
7004        longDateFormat : {
7005            LT : 'HH:mm',
7006            LTS : 'HH:mm:ss',
7007            L : 'DD/MM/YYYY',
7008            LL : 'D MMMM YYYY',
7009            LLL : 'D MMMM YYYY HH:mm',
7010            LLLL : 'dddd, D MMMM YYYY HH:mm'
7011        },
7012        calendar : {
7013            sameDay : '[Today at] LT',
7014            nextDay : '[Tomorrow at] LT',
7015            nextWeek : 'dddd [at] LT',
7016            lastDay : '[Yesterday at] LT',
7017            lastWeek : '[Last] dddd [at] LT',
7018            sameElse : 'L'
7019        },
7020        relativeTime : {
7021            future : 'in %s',
7022            past : '%s ago',
7023            s : 'a few seconds',
7024            m : 'a minute',
7025            mm : '%d minutes',
7026            h : 'an hour',
7027            hh : '%d hours',
7028            d : 'a day',
7029            dd : '%d days',
7030            M : 'a month',
7031            MM : '%d months',
7032            y : 'a year',
7033            yy : '%d years'
7034        },
7035        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
7036        ordinal : function (number) {
7037            var b = number % 10,
7038                output = (~~(number % 100 / 10) === 1) ? 'th' :
7039                (b === 1) ? 'st' :
7040                (b === 2) ? 'nd' :
7041                (b === 3) ? 'rd' : 'th';
7042            return number + output;
7043        }
7044    });
7045
7046    //! moment.js locale configuration
7047
7048    hooks.defineLocale('en-nz', {
7049        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
7050        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
7051        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
7052        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
7053        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
7054        longDateFormat : {
7055            LT : 'h:mm A',
7056            LTS : 'h:mm:ss A',
7057            L : 'DD/MM/YYYY',
7058            LL : 'D MMMM YYYY',
7059            LLL : 'D MMMM YYYY h:mm A',
7060            LLLL : 'dddd, D MMMM YYYY h:mm A'
7061        },
7062        calendar : {
7063            sameDay : '[Today at] LT',
7064            nextDay : '[Tomorrow at] LT',
7065            nextWeek : 'dddd [at] LT',
7066            lastDay : '[Yesterday at] LT',
7067            lastWeek : '[Last] dddd [at] LT',
7068            sameElse : 'L'
7069        },
7070        relativeTime : {
7071            future : 'in %s',
7072            past : '%s ago',
7073            s : 'a few seconds',
7074            ss : '%d seconds',
7075            m : 'a minute',
7076            mm : '%d minutes',
7077            h : 'an hour',
7078            hh : '%d hours',
7079            d : 'a day',
7080            dd : '%d days',
7081            M : 'a month',
7082            MM : '%d months',
7083            y : 'a year',
7084            yy : '%d years'
7085        },
7086        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
7087        ordinal : function (number) {
7088            var b = number % 10,
7089                output = (~~(number % 100 / 10) === 1) ? 'th' :
7090                (b === 1) ? 'st' :
7091                (b === 2) ? 'nd' :
7092                (b === 3) ? 'rd' : 'th';
7093            return number + output;
7094        },
7095        week : {
7096            dow : 1, // Monday is the first day of the week.
7097            doy : 4  // The week that contains Jan 4th is the first week of the year.
7098        }
7099    });
7100
7101    //! moment.js locale configuration
7102
7103    hooks.defineLocale('eo', {
7104        months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aÅ­gusto_septembro_oktobro_novembro_decembro'.split('_'),
7105        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aÅ­g_sep_okt_nov_dec'.split('_'),
7106        weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),
7107        weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),
7108        weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),
7109        longDateFormat : {
7110            LT : 'HH:mm',
7111            LTS : 'HH:mm:ss',
7112            L : 'YYYY-MM-DD',
7113            LL : 'D[-a de] MMMM, YYYY',
7114            LLL : 'D[-a de] MMMM, YYYY HH:mm',
7115            LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'
7116        },
7117        meridiemParse: /[ap]\.t\.m/i,
7118        isPM: function (input) {
7119            return input.charAt(0).toLowerCase() === 'p';
7120        },
7121        meridiem : function (hours, minutes, isLower) {
7122            if (hours > 11) {
7123                return isLower ? 'p.t.m.' : 'P.T.M.';
7124            } else {
7125                return isLower ? 'a.t.m.' : 'A.T.M.';
7126            }
7127        },
7128        calendar : {
7129            sameDay : '[HodiaÅ­ je] LT',
7130            nextDay : '[MorgaÅ­ je] LT',
7131            nextWeek : 'dddd [je] LT',
7132            lastDay : '[HieraÅ­ je] LT',
7133            lastWeek : '[pasinta] dddd [je] LT',
7134            sameElse : 'L'
7135        },
7136        relativeTime : {
7137            future : 'post %s',
7138            past : 'antaÅ­ %s',
7139            s : 'sekundoj',
7140            ss : '%d sekundoj',
7141            m : 'minuto',
7142            mm : '%d minutoj',
7143            h : 'horo',
7144            hh : '%d horoj',
7145            d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo
7146            dd : '%d tagoj',
7147            M : 'monato',
7148            MM : '%d monatoj',
7149            y : 'jaro',
7150            yy : '%d jaroj'
7151        },
7152        dayOfMonthOrdinalParse: /\d{1,2}a/,
7153        ordinal : '%da',
7154        week : {
7155            dow : 1, // Monday is the first day of the week.
7156            doy : 7  // The week that contains Jan 7th is the first week of the year.
7157        }
7158    });
7159
7160    //! moment.js locale configuration
7161
7162    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
7163        monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
7164
7165    var monthsParse$1 = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];
7166    var monthsRegex$2 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
7167
7168    hooks.defineLocale('es-do', {
7169        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
7170        monthsShort : function (m, format) {
7171            if (!m) {
7172                return monthsShortDot;
7173            } else if (/-MMM-/.test(format)) {
7174                return monthsShort$1[m.month()];
7175            } else {
7176                return monthsShortDot[m.month()];
7177            }
7178        },
7179        monthsRegex: monthsRegex$2,
7180        monthsShortRegex: monthsRegex$2,
7181        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
7182        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
7183        monthsParse: monthsParse$1,
7184        longMonthsParse: monthsParse$1,
7185        shortMonthsParse: monthsParse$1,
7186        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
7187        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
7188        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
7189        weekdaysParseExact : true,
7190        longDateFormat : {
7191            LT : 'h:mm A',
7192            LTS : 'h:mm:ss A',
7193            L : 'DD/MM/YYYY',
7194            LL : 'D [de] MMMM [de] YYYY',
7195            LLL : 'D [de] MMMM [de] YYYY h:mm A',
7196            LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'
7197        },
7198        calendar : {
7199            sameDay : function () {
7200                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7201            },
7202            nextDay : function () {
7203                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7204            },
7205            nextWeek : function () {
7206                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7207            },
7208            lastDay : function () {
7209                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7210            },
7211            lastWeek : function () {
7212                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7213            },
7214            sameElse : 'L'
7215        },
7216        relativeTime : {
7217            future : 'en %s',
7218            past : 'hace %s',
7219            s : 'unos segundos',
7220            ss : '%d segundos',
7221            m : 'un minuto',
7222            mm : '%d minutos',
7223            h : 'una hora',
7224            hh : '%d horas',
7225            d : 'un día',
7226            dd : '%d días',
7227            M : 'un mes',
7228            MM : '%d meses',
7229            y : 'un año',
7230            yy : '%d años'
7231        },
7232        dayOfMonthOrdinalParse : /\d{1,2}º/,
7233        ordinal : '%dº',
7234        week : {
7235            dow : 1, // Monday is the first day of the week.
7236            doy : 4  // The week that contains Jan 4th is the first week of the year.
7237        }
7238    });
7239
7240    //! moment.js locale configuration
7241
7242    var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
7243        monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
7244
7245    var monthsParse$2 = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];
7246    var monthsRegex$3 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
7247
7248    hooks.defineLocale('es-us', {
7249        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
7250        monthsShort : function (m, format) {
7251            if (!m) {
7252                return monthsShortDot$1;
7253            } else if (/-MMM-/.test(format)) {
7254                return monthsShort$2[m.month()];
7255            } else {
7256                return monthsShortDot$1[m.month()];
7257            }
7258        },
7259        monthsRegex: monthsRegex$3,
7260        monthsShortRegex: monthsRegex$3,
7261        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
7262        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
7263        monthsParse: monthsParse$2,
7264        longMonthsParse: monthsParse$2,
7265        shortMonthsParse: monthsParse$2,
7266        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
7267        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
7268        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
7269        weekdaysParseExact : true,
7270        longDateFormat : {
7271            LT : 'h:mm A',
7272            LTS : 'h:mm:ss A',
7273            L : 'MM/DD/YYYY',
7274            LL : 'D [de] MMMM [de] YYYY',
7275            LLL : 'D [de] MMMM [de] YYYY h:mm A',
7276            LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'
7277        },
7278        calendar : {
7279            sameDay : function () {
7280                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7281            },
7282            nextDay : function () {
7283                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7284            },
7285            nextWeek : function () {
7286                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7287            },
7288            lastDay : function () {
7289                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7290            },
7291            lastWeek : function () {
7292                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7293            },
7294            sameElse : 'L'
7295        },
7296        relativeTime : {
7297            future : 'en %s',
7298            past : 'hace %s',
7299            s : 'unos segundos',
7300            ss : '%d segundos',
7301            m : 'un minuto',
7302            mm : '%d minutos',
7303            h : 'una hora',
7304            hh : '%d horas',
7305            d : 'un día',
7306            dd : '%d días',
7307            M : 'un mes',
7308            MM : '%d meses',
7309            y : 'un año',
7310            yy : '%d años'
7311        },
7312        dayOfMonthOrdinalParse : /\d{1,2}º/,
7313        ordinal : '%dº',
7314        week : {
7315            dow : 0, // Sunday is the first day of the week.
7316            doy : 6  // The week that contains Jan 6th is the first week of the year.
7317        }
7318    });
7319
7320    //! moment.js locale configuration
7321
7322    var monthsShortDot$2 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
7323        monthsShort$3 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
7324
7325    var monthsParse$3 = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];
7326    var monthsRegex$4 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
7327
7328    hooks.defineLocale('es', {
7329        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
7330        monthsShort : function (m, format) {
7331            if (!m) {
7332                return monthsShortDot$2;
7333            } else if (/-MMM-/.test(format)) {
7334                return monthsShort$3[m.month()];
7335            } else {
7336                return monthsShortDot$2[m.month()];
7337            }
7338        },
7339        monthsRegex : monthsRegex$4,
7340        monthsShortRegex : monthsRegex$4,
7341        monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
7342        monthsShortStrictRegex : /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
7343        monthsParse : monthsParse$3,
7344        longMonthsParse : monthsParse$3,
7345        shortMonthsParse : monthsParse$3,
7346        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
7347        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
7348        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
7349        weekdaysParseExact : true,
7350        longDateFormat : {
7351            LT : 'H:mm',
7352            LTS : 'H:mm:ss',
7353            L : 'DD/MM/YYYY',
7354            LL : 'D [de] MMMM [de] YYYY',
7355            LLL : 'D [de] MMMM [de] YYYY H:mm',
7356            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
7357        },
7358        calendar : {
7359            sameDay : function () {
7360                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7361            },
7362            nextDay : function () {
7363                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7364            },
7365            nextWeek : function () {
7366                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7367            },
7368            lastDay : function () {
7369                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7370            },
7371            lastWeek : function () {
7372                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
7373            },
7374            sameElse : 'L'
7375        },
7376        relativeTime : {
7377            future : 'en %s',
7378            past : 'hace %s',
7379            s : 'unos segundos',
7380            ss : '%d segundos',
7381            m : 'un minuto',
7382            mm : '%d minutos',
7383            h : 'una hora',
7384            hh : '%d horas',
7385            d : 'un día',
7386            dd : '%d días',
7387            M : 'un mes',
7388            MM : '%d meses',
7389            y : 'un año',
7390            yy : '%d años'
7391        },
7392        dayOfMonthOrdinalParse : /\d{1,2}º/,
7393        ordinal : '%dº',
7394        week : {
7395            dow : 1, // Monday is the first day of the week.
7396            doy : 4  // The week that contains Jan 4th is the first week of the year.
7397        }
7398    });
7399
7400    //! moment.js locale configuration
7401
7402    function processRelativeTime$3(number, withoutSuffix, key, isFuture) {
7403        var format = {
7404            's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
7405            'ss': [number + 'sekundi', number + 'sekundit'],
7406            'm' : ['ühe minuti', 'üks minut'],
7407            'mm': [number + ' minuti', number + ' minutit'],
7408            'h' : ['ühe tunni', 'tund aega', 'üks tund'],
7409            'hh': [number + ' tunni', number + ' tundi'],
7410            'd' : ['ühe päeva', 'üks päev'],
7411            'M' : ['kuu aja', 'kuu aega', 'üks kuu'],
7412            'MM': [number + ' kuu', number + ' kuud'],
7413            'y' : ['ühe aasta', 'aasta', 'üks aasta'],
7414            'yy': [number + ' aasta', number + ' aastat']
7415        };
7416        if (withoutSuffix) {
7417            return format[key][2] ? format[key][2] : format[key][1];
7418        }
7419        return isFuture ? format[key][0] : format[key][1];
7420    }
7421
7422    hooks.defineLocale('et', {
7423        months        : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),
7424        monthsShort   : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),
7425        weekdays      : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),
7426        weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),
7427        weekdaysMin   : 'P_E_T_K_N_R_L'.split('_'),
7428        longDateFormat : {
7429            LT   : 'H:mm',
7430            LTS : 'H:mm:ss',
7431            L    : 'DD.MM.YYYY',
7432            LL   : 'D. MMMM YYYY',
7433            LLL  : 'D. MMMM YYYY H:mm',
7434            LLLL : 'dddd, D. MMMM YYYY H:mm'
7435        },
7436        calendar : {
7437            sameDay  : '[Täna,] LT',
7438            nextDay  : '[Homme,] LT',
7439            nextWeek : '[Järgmine] dddd LT',
7440            lastDay  : '[Eile,] LT',
7441            lastWeek : '[Eelmine] dddd LT',
7442            sameElse : 'L'
7443        },
7444        relativeTime : {
7445            future : '%s pärast',
7446            past   : '%s tagasi',
7447            s      : processRelativeTime$3,
7448            ss     : processRelativeTime$3,
7449            m      : processRelativeTime$3,
7450            mm     : processRelativeTime$3,
7451            h      : processRelativeTime$3,
7452            hh     : processRelativeTime$3,
7453            d      : processRelativeTime$3,
7454            dd     : '%d päeva',
7455            M      : processRelativeTime$3,
7456            MM     : processRelativeTime$3,
7457            y      : processRelativeTime$3,
7458            yy     : processRelativeTime$3
7459        },
7460        dayOfMonthOrdinalParse: /\d{1,2}\./,
7461        ordinal : '%d.',
7462        week : {
7463            dow : 1, // Monday is the first day of the week.
7464            doy : 4  // The week that contains Jan 4th is the first week of the year.
7465        }
7466    });
7467
7468    //! moment.js locale configuration
7469
7470    hooks.defineLocale('eu', {
7471        months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),
7472        monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),
7473        monthsParseExact : true,
7474        weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),
7475        weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),
7476        weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),
7477        weekdaysParseExact : true,
7478        longDateFormat : {
7479            LT : 'HH:mm',
7480            LTS : 'HH:mm:ss',
7481            L : 'YYYY-MM-DD',
7482            LL : 'YYYY[ko] MMMM[ren] D[a]',
7483            LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',
7484            LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
7485            l : 'YYYY-M-D',
7486            ll : 'YYYY[ko] MMM D[a]',
7487            lll : 'YYYY[ko] MMM D[a] HH:mm',
7488            llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'
7489        },
7490        calendar : {
7491            sameDay : '[gaur] LT[etan]',
7492            nextDay : '[bihar] LT[etan]',
7493            nextWeek : 'dddd LT[etan]',
7494            lastDay : '[atzo] LT[etan]',
7495            lastWeek : '[aurreko] dddd LT[etan]',
7496            sameElse : 'L'
7497        },
7498        relativeTime : {
7499            future : '%s barru',
7500            past : 'duela %s',
7501            s : 'segundo batzuk',
7502            ss : '%d segundo',
7503            m : 'minutu bat',
7504            mm : '%d minutu',
7505            h : 'ordu bat',
7506            hh : '%d ordu',
7507            d : 'egun bat',
7508            dd : '%d egun',
7509            M : 'hilabete bat',
7510            MM : '%d hilabete',
7511            y : 'urte bat',
7512            yy : '%d urte'
7513        },
7514        dayOfMonthOrdinalParse: /\d{1,2}\./,
7515        ordinal : '%d.',
7516        week : {
7517            dow : 1, // Monday is the first day of the week.
7518            doy : 7  // The week that contains Jan 7th is the first week of the year.
7519        }
7520    });
7521
7522    //! moment.js locale configuration
7523
7524    var symbolMap$5 = {
7525        '1': 'Û±',
7526        '2': 'Û²',
7527        '3': 'Û³',
7528        '4': 'Û´',
7529        '5': 'Ûµ',
7530        '6': 'Û¶',
7531        '7': 'Û·',
7532        '8': 'Û¸',
7533        '9': 'Û¹',
7534        '0': 'Û°'
7535    }, numberMap$4 = {
7536        'Û±': '1',
7537        'Û²': '2',
7538        'Û³': '3',
7539        'Û´': '4',
7540        'Ûµ': '5',
7541        'Û¶': '6',
7542        'Û·': '7',
7543        'Û¸': '8',
7544        'Û¹': '9',
7545        'Û°': '0'
7546    };
7547
7548    hooks.defineLocale('fa', {
7549        months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
7550        monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
7551        weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
7552        weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
7553        weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
7554        weekdaysParseExact : true,
7555        longDateFormat : {
7556            LT : 'HH:mm',
7557            LTS : 'HH:mm:ss',
7558            L : 'DD/MM/YYYY',
7559            LL : 'D MMMM YYYY',
7560            LLL : 'D MMMM YYYY HH:mm',
7561            LLLL : 'dddd, D MMMM YYYY HH:mm'
7562        },
7563        meridiemParse: /قبل از ظهر|بعد از ظهر/,
7564        isPM: function (input) {
7565            return /بعد از ظهر/.test(input);
7566        },
7567        meridiem : function (hour, minute, isLower) {
7568            if (hour < 12) {
7569                return 'قبل از ظهر';
7570            } else {
7571                return 'بعد از ظهر';
7572            }
7573        },
7574        calendar : {
7575            sameDay : '[امروز ساعت] LT',
7576            nextDay : '[فردا ساعت] LT',
7577            nextWeek : 'dddd [ساعت] LT',
7578            lastDay : '[دیروز ساعت] LT',
7579            lastWeek : 'dddd [پیش] [ساعت] LT',
7580            sameElse : 'L'
7581        },
7582        relativeTime : {
7583            future : 'در %s',
7584            past : '%s پیش',
7585            s : 'چند ثانیه',
7586            ss : 'ثانیه d%',
7587            m : 'یک دقیقه',
7588            mm : '%d دقیقه',
7589            h : 'یک ساعت',
7590            hh : '%d ساعت',
7591            d : 'یک روز',
7592            dd : '%d روز',
7593            M : 'یک ماه',
7594            MM : '%d ماه',
7595            y : 'یک سال',
7596            yy : '%d سال'
7597        },
7598        preparse: function (string) {
7599            return string.replace(/[Û°-Û¹]/g, function (match) {
7600                return numberMap$4[match];
7601            }).replace(/،/g, ',');
7602        },
7603        postformat: function (string) {
7604            return string.replace(/\d/g, function (match) {
7605                return symbolMap$5[match];
7606            }).replace(/,/g, '،');
7607        },
7608        dayOfMonthOrdinalParse: /\d{1,2}م/,
7609        ordinal : '%dم',
7610        week : {
7611            dow : 6, // Saturday is the first day of the week.
7612            doy : 12 // The week that contains Jan 12th is the first week of the year.
7613        }
7614    });
7615
7616    //! moment.js locale configuration
7617
7618    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),
7619        numbersFuture = [
7620            'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',
7621            numbersPast[7], numbersPast[8], numbersPast[9]
7622        ];
7623    function translate$2(number, withoutSuffix, key, isFuture) {
7624        var result = '';
7625        switch (key) {
7626            case 's':
7627                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
7628            case 'ss':
7629                return isFuture ? 'sekunnin' : 'sekuntia';
7630            case 'm':
7631                return isFuture ? 'minuutin' : 'minuutti';
7632            case 'mm':
7633                result = isFuture ? 'minuutin' : 'minuuttia';
7634                break;
7635            case 'h':
7636                return isFuture ? 'tunnin' : 'tunti';
7637            case 'hh':
7638                result = isFuture ? 'tunnin' : 'tuntia';
7639                break;
7640            case 'd':
7641                return isFuture ? 'päivän' : 'päivä';
7642            case 'dd':
7643                result = isFuture ? 'päivän' : 'päivää';
7644                break;
7645            case 'M':
7646                return isFuture ? 'kuukauden' : 'kuukausi';
7647            case 'MM':
7648                result = isFuture ? 'kuukauden' : 'kuukautta';
7649                break;
7650            case 'y':
7651                return isFuture ? 'vuoden' : 'vuosi';
7652            case 'yy':
7653                result = isFuture ? 'vuoden' : 'vuotta';
7654                break;
7655        }
7656        result = verbalNumber(number, isFuture) + ' ' + result;
7657        return result;
7658    }
7659    function verbalNumber(number, isFuture) {
7660        return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;
7661    }
7662
7663    hooks.defineLocale('fi', {
7664        months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),
7665        monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),
7666        weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),
7667        weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),
7668        weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),
7669        longDateFormat : {
7670            LT : 'HH.mm',
7671            LTS : 'HH.mm.ss',
7672            L : 'DD.MM.YYYY',
7673            LL : 'Do MMMM[ta] YYYY',
7674            LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',
7675            LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
7676            l : 'D.M.YYYY',
7677            ll : 'Do MMM YYYY',
7678            lll : 'Do MMM YYYY, [klo] HH.mm',
7679            llll : 'ddd, Do MMM YYYY, [klo] HH.mm'
7680        },
7681        calendar : {
7682            sameDay : '[tänään] [klo] LT',
7683            nextDay : '[huomenna] [klo] LT',
7684            nextWeek : 'dddd [klo] LT',
7685            lastDay : '[eilen] [klo] LT',
7686            lastWeek : '[viime] dddd[na] [klo] LT',
7687            sameElse : 'L'
7688        },
7689        relativeTime : {
7690            future : '%s päästä',
7691            past : '%s sitten',
7692            s : translate$2,
7693            ss : translate$2,
7694            m : translate$2,
7695            mm : translate$2,
7696            h : translate$2,
7697            hh : translate$2,
7698            d : translate$2,
7699            dd : translate$2,
7700            M : translate$2,
7701            MM : translate$2,
7702            y : translate$2,
7703            yy : translate$2
7704        },
7705        dayOfMonthOrdinalParse: /\d{1,2}\./,
7706        ordinal : '%d.',
7707        week : {
7708            dow : 1, // Monday is the first day of the week.
7709            doy : 4  // The week that contains Jan 4th is the first week of the year.
7710        }
7711    });
7712
7713    //! moment.js locale configuration
7714
7715    hooks.defineLocale('fo', {
7716        months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
7717        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
7718        weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),
7719        weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
7720        weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),
7721        longDateFormat : {
7722            LT : 'HH:mm',
7723            LTS : 'HH:mm:ss',
7724            L : 'DD/MM/YYYY',
7725            LL : 'D MMMM YYYY',
7726            LLL : 'D MMMM YYYY HH:mm',
7727            LLLL : 'dddd D. MMMM, YYYY HH:mm'
7728        },
7729        calendar : {
7730            sameDay : '[Í dag kl.] LT',
7731            nextDay : '[Í morgin kl.] LT',
7732            nextWeek : 'dddd [kl.] LT',
7733            lastDay : '[Í gjár kl.] LT',
7734            lastWeek : '[síðstu] dddd [kl] LT',
7735            sameElse : 'L'
7736        },
7737        relativeTime : {
7738            future : 'um %s',
7739            past : '%s síðani',
7740            s : 'fá sekund',
7741            ss : '%d sekundir',
7742            m : 'ein minuttur',
7743            mm : '%d minuttir',
7744            h : 'ein tími',
7745            hh : '%d tímar',
7746            d : 'ein dagur',
7747            dd : '%d dagar',
7748            M : 'ein mánaður',
7749            MM : '%d mánaðir',
7750            y : 'eitt ár',
7751            yy : '%d ár'
7752        },
7753        dayOfMonthOrdinalParse: /\d{1,2}\./,
7754        ordinal : '%d.',
7755        week : {
7756            dow : 1, // Monday is the first day of the week.
7757            doy : 4  // The week that contains Jan 4th is the first week of the year.
7758        }
7759    });
7760
7761    //! moment.js locale configuration
7762
7763    hooks.defineLocale('fr-ca', {
7764        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
7765        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
7766        monthsParseExact : true,
7767        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
7768        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
7769        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),
7770        weekdaysParseExact : true,
7771        longDateFormat : {
7772            LT : 'HH:mm',
7773            LTS : 'HH:mm:ss',
7774            L : 'YYYY-MM-DD',
7775            LL : 'D MMMM YYYY',
7776            LLL : 'D MMMM YYYY HH:mm',
7777            LLLL : 'dddd D MMMM YYYY HH:mm'
7778        },
7779        calendar : {
7780            sameDay : '[Aujourd’hui à] LT',
7781            nextDay : '[Demain à] LT',
7782            nextWeek : 'dddd [à] LT',
7783            lastDay : '[Hier à] LT',
7784            lastWeek : 'dddd [dernier à] LT',
7785            sameElse : 'L'
7786        },
7787        relativeTime : {
7788            future : 'dans %s',
7789            past : 'il y a %s',
7790            s : 'quelques secondes',
7791            ss : '%d secondes',
7792            m : 'une minute',
7793            mm : '%d minutes',
7794            h : 'une heure',
7795            hh : '%d heures',
7796            d : 'un jour',
7797            dd : '%d jours',
7798            M : 'un mois',
7799            MM : '%d mois',
7800            y : 'un an',
7801            yy : '%d ans'
7802        },
7803        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
7804        ordinal : function (number, period) {
7805            switch (period) {
7806                // Words with masculine grammatical gender: mois, trimestre, jour
7807                default:
7808                case 'M':
7809                case 'Q':
7810                case 'D':
7811                case 'DDD':
7812                case 'd':
7813                    return number + (number === 1 ? 'er' : 'e');
7814
7815                // Words with feminine grammatical gender: semaine
7816                case 'w':
7817                case 'W':
7818                    return number + (number === 1 ? 're' : 'e');
7819            }
7820        }
7821    });
7822
7823    //! moment.js locale configuration
7824
7825    hooks.defineLocale('fr-ch', {
7826        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
7827        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
7828        monthsParseExact : true,
7829        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
7830        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
7831        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),
7832        weekdaysParseExact : true,
7833        longDateFormat : {
7834            LT : 'HH:mm',
7835            LTS : 'HH:mm:ss',
7836            L : 'DD.MM.YYYY',
7837            LL : 'D MMMM YYYY',
7838            LLL : 'D MMMM YYYY HH:mm',
7839            LLLL : 'dddd D MMMM YYYY HH:mm'
7840        },
7841        calendar : {
7842            sameDay : '[Aujourd’hui à] LT',
7843            nextDay : '[Demain à] LT',
7844            nextWeek : 'dddd [à] LT',
7845            lastDay : '[Hier à] LT',
7846            lastWeek : 'dddd [dernier à] LT',
7847            sameElse : 'L'
7848        },
7849        relativeTime : {
7850            future : 'dans %s',
7851            past : 'il y a %s',
7852            s : 'quelques secondes',
7853            ss : '%d secondes',
7854            m : 'une minute',
7855            mm : '%d minutes',
7856            h : 'une heure',
7857            hh : '%d heures',
7858            d : 'un jour',
7859            dd : '%d jours',
7860            M : 'un mois',
7861            MM : '%d mois',
7862            y : 'un an',
7863            yy : '%d ans'
7864        },
7865        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
7866        ordinal : function (number, period) {
7867            switch (period) {
7868                // Words with masculine grammatical gender: mois, trimestre, jour
7869                default:
7870                case 'M':
7871                case 'Q':
7872                case 'D':
7873                case 'DDD':
7874                case 'd':
7875                    return number + (number === 1 ? 'er' : 'e');
7876
7877                // Words with feminine grammatical gender: semaine
7878                case 'w':
7879                case 'W':
7880                    return number + (number === 1 ? 're' : 'e');
7881            }
7882        },
7883        week : {
7884            dow : 1, // Monday is the first day of the week.
7885            doy : 4  // The week that contains Jan 4th is the first week of the year.
7886        }
7887    });
7888
7889    //! moment.js locale configuration
7890
7891    hooks.defineLocale('fr', {
7892        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
7893        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
7894        monthsParseExact : true,
7895        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
7896        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
7897        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),
7898        weekdaysParseExact : true,
7899        longDateFormat : {
7900            LT : 'HH:mm',
7901            LTS : 'HH:mm:ss',
7902            L : 'DD/MM/YYYY',
7903            LL : 'D MMMM YYYY',
7904            LLL : 'D MMMM YYYY HH:mm',
7905            LLLL : 'dddd D MMMM YYYY HH:mm'
7906        },
7907        calendar : {
7908            sameDay : '[Aujourd’hui à] LT',
7909            nextDay : '[Demain à] LT',
7910            nextWeek : 'dddd [à] LT',
7911            lastDay : '[Hier à] LT',
7912            lastWeek : 'dddd [dernier à] LT',
7913            sameElse : 'L'
7914        },
7915        relativeTime : {
7916            future : 'dans %s',
7917            past : 'il y a %s',
7918            s : 'quelques secondes',
7919            ss : '%d secondes',
7920            m : 'une minute',
7921            mm : '%d minutes',
7922            h : 'une heure',
7923            hh : '%d heures',
7924            d : 'un jour',
7925            dd : '%d jours',
7926            M : 'un mois',
7927            MM : '%d mois',
7928            y : 'un an',
7929            yy : '%d ans'
7930        },
7931        dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
7932        ordinal : function (number, period) {
7933            switch (period) {
7934                // TODO: Return 'e' when day of month > 1. Move this case inside
7935                // block for masculine words below.
7936                // See https://github.com/moment/moment/issues/3375
7937                case 'D':
7938                    return number + (number === 1 ? 'er' : '');
7939
7940                // Words with masculine grammatical gender: mois, trimestre, jour
7941                default:
7942                case 'M':
7943                case 'Q':
7944                case 'DDD':
7945                case 'd':
7946                    return number + (number === 1 ? 'er' : 'e');
7947
7948                // Words with feminine grammatical gender: semaine
7949                case 'w':
7950                case 'W':
7951                    return number + (number === 1 ? 're' : 'e');
7952            }
7953        },
7954        week : {
7955            dow : 1, // Monday is the first day of the week.
7956            doy : 4  // The week that contains Jan 4th is the first week of the year.
7957        }
7958    });
7959
7960    //! moment.js locale configuration
7961
7962    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),
7963        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');
7964
7965    hooks.defineLocale('fy', {
7966        months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),
7967        monthsShort : function (m, format) {
7968            if (!m) {
7969                return monthsShortWithDots;
7970            } else if (/-MMM-/.test(format)) {
7971                return monthsShortWithoutDots[m.month()];
7972            } else {
7973                return monthsShortWithDots[m.month()];
7974            }
7975        },
7976        monthsParseExact : true,
7977        weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),
7978        weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),
7979        weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
7980        weekdaysParseExact : true,
7981        longDateFormat : {
7982            LT : 'HH:mm',
7983            LTS : 'HH:mm:ss',
7984            L : 'DD-MM-YYYY',
7985            LL : 'D MMMM YYYY',
7986            LLL : 'D MMMM YYYY HH:mm',
7987            LLLL : 'dddd D MMMM YYYY HH:mm'
7988        },
7989        calendar : {
7990            sameDay: '[hjoed om] LT',
7991            nextDay: '[moarn om] LT',
7992     
7992       nextWeek: 'dddd [om] LT',
7993            lastDay: '[juster om] LT',
7994            lastWeek: '[ôfrûne] dddd [om] LT',
7995            sameElse: 'L'
7996        },
7997        relativeTime : {
7998            future : 'oer %s',
7999            past : '%s lyn',
8000            s : 'in pear sekonden',
8001            ss : '%d sekonden',
8002            m : 'ien minút',
8003            mm : '%d minuten',
8004            h : 'ien oere',
8005            hh : '%d oeren',
8006            d : 'ien dei',
8007            dd : '%d dagen',
8008            M : 'ien moanne',
8009            MM : '%d moannen',
8010            y : 'ien jier',
8011            yy : '%d jierren'
8012        },
8013        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
8014        ordinal : function (number) {
8015            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
8016        },
8017        week : {
8018            dow : 1, // Monday is the first day of the week.
8019            doy : 4  // The week that contains Jan 4th is the first week of the year.
8020        }
8021    });
8022
8023    //! moment.js locale configuration
8024
8025
8026    var months$5 = [
8027        'Eanáir', 'Feabhra', 'Márta', 'Aibreán', 'Bealtaine', 'Méitheamh', 'Iúil', 'Lúnasa', 'Meán Fómhair', 'Deaireadh Fómhair', 'Samhain', 'Nollaig'
8028    ];
8029
8030    var monthsShort$4 = ['Eaná', 'Feab', 'Márt', 'Aibr', 'Beal', 'Méit', 'Iúil', 'Lúna', 'Meán', 'Deai', 'Samh', 'Noll'];
8031
8032    var weekdays$1 = ['Dé Domhnaigh', 'Dé Luain', 'Dé Máirt', 'Dé Céadaoin', 'Déardaoin', 'Dé hAoine', 'Dé Satharn'];
8033
8034    var weekdaysShort = ['Dom', 'Lua', 'Mái', 'Céa', 'Déa', 'hAo', 'Sat'];
8035
8036    var weekdaysMin = ['Do', 'Lu', 'Má', 'Ce', 'Dé', 'hA', 'Sa'];
8037
8038    hooks.defineLocale('ga', {
8039        months: months$5,
8040        monthsShort: monthsShort$4,
8041        monthsParseExact: true,
8042        weekdays: weekdays$1,
8043        weekdaysShort: weekdaysShort,
8044        weekdaysMin: weekdaysMin,
8045        longDateFormat: {
8046            LT: 'HH:mm',
8047            LTS: 'HH:mm:ss',
8048            L: 'DD/MM/YYYY',
8049            LL: 'D MMMM YYYY',
8050            LLL: 'D MMMM YYYY HH:mm',
8051            LLLL: 'dddd, D MMMM YYYY HH:mm'
8052        },
8053        calendar: {
8054            sameDay: '[Inniu ag] LT',
8055            nextDay: '[Amárach ag] LT',
8056            nextWeek: 'dddd [ag] LT',
8057            lastDay: '[Inné aig] LT',
8058            lastWeek: 'dddd [seo caite] [ag] LT',
8059            sameElse: 'L'
8060        },
8061        relativeTime: {
8062            future: 'i %s',
8063            past: '%s ó shin',
8064            s: 'cúpla soicind',
8065            ss: '%d soicind',
8066            m: 'nóiméad',
8067            mm: '%d nóiméad',
8068            h: 'uair an chloig',
8069            hh: '%d uair an chloig',
8070            d: 'lá',
8071            dd: '%d lá',
8072            M: 'mí',
8073            MM: '%d mí',
8074            y: 'bliain',
8075            yy: '%d bliain'
8076        },
8077        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
8078        ordinal: function (number) {
8079            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
8080            return number + output;
8081        },
8082        week: {
8083            dow: 1, // Monday is the first day of the week.
8084            doy: 4  // The week that contains Jan 4th is the first week of the year.
8085        }
8086    });
8087
8088    //! moment.js locale configuration
8089
8090    var months$6 = [
8091        'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'
8092    ];
8093
8094    var monthsShort$5 = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];
8095
8096    var weekdays$2 = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];
8097
8098    var weekdaysShort$1 = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];
8099
8100    var weekdaysMin$1 = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
8101
8102    hooks.defineLocale('gd', {
8103        months : months$6,
8104        monthsShort : monthsShort$5,
8105        monthsParseExact : true,
8106        weekdays : weekdays$2,
8107        weekdaysShort : weekdaysShort$1,
8108        weekdaysMin : weekdaysMin$1,
8109        longDateFormat : {
8110            LT : 'HH:mm',
8111            LTS : 'HH:mm:ss',
8112            L : 'DD/MM/YYYY',
8113            LL : 'D MMMM YYYY',
8114            LLL : 'D MMMM YYYY HH:mm',
8115            LLLL : 'dddd, D MMMM YYYY HH:mm'
8116        },
8117        calendar : {
8118            sameDay : '[An-diugh aig] LT',
8119            nextDay : '[A-màireach aig] LT',
8120            nextWeek : 'dddd [aig] LT',
vendor: 112,567 bytes, lines 8121-11071
8121            lastDay : '[An-dè aig] LT',
8122            lastWeek : 'dddd [seo chaidh] [aig] LT',
8123            sameElse : 'L'
8124        },
8125        relativeTime : {
8126            future : 'ann an %s',
8127            past : 'bho chionn %s',
8128            s : 'beagan diogan',
8129            ss : '%d diogan',
8130            m : 'mionaid',
8131            mm : '%d mionaidean',
8132            h : 'uair',
8133            hh : '%d uairean',
8134            d : 'latha',
8135            dd : '%d latha',
8136            M : 'mìos',
8137            MM : '%d mìosan',
8138            y : 'bliadhna',
8139            yy : '%d bliadhna'
8140        },
8141        dayOfMonthOrdinalParse : /\d{1,2}(d|na|mh)/,
8142        ordinal : function (number) {
8143            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
8144            return number + output;
8145        },
8146        week : {
8147            dow : 1, // Monday is the first day of the week.
8148            doy : 4  // The week that contains Jan 4th is the first week of the year.
8149        }
8150    });
8151
8152    //! moment.js locale configuration
8153
8154    hooks.defineLocale('gl', {
8155        months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),
8156        monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),
8157        monthsParseExact: true,
8158        weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
8159        weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
8160        weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),
8161        weekdaysParseExact : true,
8162        longDateFormat : {
8163            LT : 'H:mm',
8164            LTS : 'H:mm:ss',
8165            L : 'DD/MM/YYYY',
8166            LL : 'D [de] MMMM [de] YYYY',
8167            LLL : 'D [de] MMMM [de] YYYY H:mm',
8168            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
8169        },
8170        calendar : {
8171            sameDay : function () {
8172                return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
8173            },
8174            nextDay : function () {
8175                return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
8176            },
8177            nextWeek : function () {
8178                return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
8179            },
8180            lastDay : function () {
8181                return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';
8182            },
8183            lastWeek : function () {
8184                return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
8185            },
8186            sameElse : 'L'
8187        },
8188        relativeTime : {
8189            future : function (str) {
8190                if (str.indexOf('un') === 0) {
8191                    return 'n' + str;
8192                }
8193                return 'en ' + str;
8194            },
8195            past : 'hai %s',
8196            s : 'uns segundos',
8197            ss : '%d segundos',
8198            m : 'un minuto',
8199            mm : '%d minutos',
8200            h : 'unha hora',
8201            hh : '%d horas',
8202            d : 'un día',
8203            dd : '%d días',
8204            M : 'un mes',
8205            MM : '%d meses',
8206            y : 'un ano',
8207            yy : '%d anos'
8208        },
8209        dayOfMonthOrdinalParse : /\d{1,2}º/,
8210        ordinal : '%dº',
8211        week : {
8212            dow : 1, // Monday is the first day of the week.
8213            doy : 4  // The week that contains Jan 4th is the first week of the year.
8214        }
8215    });
8216
8217    //! moment.js locale configuration
8218
8219    function processRelativeTime$4(number, withoutSuffix, key, isFuture) {
8220        var format = {
8221            's': ['thodde secondanim', 'thodde second'],
8222            'ss': [number + ' secondanim', number + ' second'],
8223            'm': ['eka mintan', 'ek minute'],
8224            'mm': [number + ' mintanim', number + ' mintam'],
8225            'h': ['eka voran', 'ek vor'],
8226            'hh': [number + ' voranim', number + ' voram'],
8227            'd': ['eka disan', 'ek dis'],
8228            'dd': [number + ' disanim', number + ' dis'],
8229            'M': ['eka mhoinean', 'ek mhoino'],
8230            'MM': [number + ' mhoineanim', number + ' mhoine'],
8231            'y': ['eka vorsan', 'ek voros'],
8232            'yy': [number + ' vorsanim', number + ' vorsam']
8233        };
8234        return withoutSuffix ? format[key][0] : format[key][1];
8235    }
8236
8237    hooks.defineLocale('gom-latn', {
8238        months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),
8239        monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),
8240        monthsParseExact : true,
8241        weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\'var'.split('_'),
8242        weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),
8243        weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),
8244        weekdaysParseExact : true,
8245        longDateFormat : {
8246            LT : 'A h:mm [vazta]',
8247            LTS : 'A h:mm:ss [vazta]',
8248            L : 'DD-MM-YYYY',
8249            LL : 'D MMMM YYYY',
8250            LLL : 'D MMMM YYYY A h:mm [vazta]',
8251            LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',
8252            llll: 'ddd, D MMM YYYY, A h:mm [vazta]'
8253        },
8254        calendar : {
8255            sameDay: '[Aiz] LT',
8256            nextDay: '[Faleam] LT',
8257            nextWeek: '[Ieta to] dddd[,] LT',
8258            lastDay: '[Kal] LT',
8259            lastWeek: '[Fatlo] dddd[,] LT',
8260            sameElse: 'L'
8261        },
8262        relativeTime : {
8263            future : '%s',
8264            past : '%s adim',
8265            s : processRelativeTime$4,
8266            ss : processRelativeTime$4,
8267            m : processRelativeTime$4,
8268            mm : processRelativeTime$4,
8269            h : processRelativeTime$4,
8270            hh : processRelativeTime$4,
8271            d : processRelativeTime$4,
8272            dd : processRelativeTime$4,
8273            M : processRelativeTime$4,
8274            MM : processRelativeTime$4,
8275            y : processRelativeTime$4,
8276            yy : processRelativeTime$4
8277        },
8278        dayOfMonthOrdinalParse : /\d{1,2}(er)/,
8279        ordinal : function (number, period) {
8280            switch (period) {
8281                // the ordinal 'er' only applies to day of the month
8282                case 'D':
8283                    return number + 'er';
8284                default:
8285                case 'M':
8286                case 'Q':
8287                case 'DDD':
8288                case 'd':
8289                case 'w':
8290                case 'W':
8291                    return number;
8292            }
8293        },
8294        week : {
8295            dow : 1, // Monday is the first day of the week.
8296            doy : 4  // The week that contains Jan 4th is the first week of the year.
8297        },
8298        meridiemParse: /rati|sokalli|donparam|sanje/,
8299        meridiemHour : function (hour, meridiem) {
8300            if (hour === 12) {
8301                hour = 0;
8302            }
8303            if (meridiem === 'rati') {
8304                return hour < 4 ? hour : hour + 12;
8305            } else if (meridiem === 'sokalli') {
8306                return hour;
8307            } else if (meridiem === 'donparam') {
8308                return hour > 12 ? hour : hour + 12;
8309            } else if (meridiem === 'sanje') {
8310                return hour + 12;
8311            }
8312        },
8313        meridiem : function (hour, minute, isLower) {
8314            if (hour < 4) {
8315                return 'rati';
8316            } else if (hour < 12) {
8317                return 'sokalli';
8318            } else if (hour < 16) {
8319                return 'donparam';
8320            } else if (hour < 20) {
8321                return 'sanje';
8322            } else {
8323                return 'rati';
8324            }
8325        }
8326    });
8327
8328    //! moment.js locale configuration
8329
8330    var symbolMap$6 = {
8331            '1': 'à«§',
8332            '2': '૨',
8333            '3': 'à«©',
8334            '4': '૪',
8335            '5': 'à««',
8336            '6': '૬',
8337            '7': 'à«­',
8338            '8': 'à«®',
8339            '9': '૯',
8340            '0': '૦'
8341        },
8342        numberMap$5 = {
8343            'à«§': '1',
8344            '૨': '2',
8345            'à«©': '3',
8346            '૪': '4',
8347            'à««': '5',
8348            '૬': '6',
8349            'à«­': '7',
8350            'à«®': '8',
8351            '૯': '9',
8352            '૦': '0'
8353        };
8354
8355    hooks.defineLocale('gu', {
8356        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),
8357        monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),
8358        monthsParseExact: true,
8359        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),
8360        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),
8361        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),
8362        longDateFormat: {
8363            LT: 'A h:mm વાગ્યે',
8364            LTS: 'A h:mm:ss વાગ્યે',
8365            L: 'DD/MM/YYYY',
8366            LL: 'D MMMM YYYY',
8367            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',
8368            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'
8369        },
8370        calendar: {
8371            sameDay: '[આજ] LT',
8372            nextDay: '[કાલે] LT',
8373            nextWeek: 'dddd, LT',
8374            lastDay: '[ગઇકાલે] LT',
8375            lastWeek: '[પાછલા] dddd, LT',
8376            sameElse: 'L'
8377        },
8378        relativeTime: {
8379            future: '%s મા',
8380            past: '%s પેહલા',
8381            s: 'અમુક પળો',
8382            ss: '%d સેકંડ',
8383            m: 'એક મિનિટ',
8384            mm: '%d મિનિટ',
8385            h: 'એક કલાક',
8386            hh: '%d કલાક',
8387            d: 'એક દિવસ',
8388            dd: '%d દિવસ',
8389            M: 'એક મહિનો',
8390            MM: '%d મહિનો',
8391            y: 'એક વર્ષ',
8392            yy: '%d વર્ષ'
8393        },
8394        preparse: function (string) {
8395            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {
8396                return numberMap$5[match];
8397            });
8398        },
8399        postformat: function (string) {
8400            return string.replace(/\d/g, function (match) {
8401                return symbolMap$6[match];
8402            });
8403        },
8404        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists
8405        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.
8406        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,
8407        meridiemHour: function (hour, meridiem) {
8408            if (hour === 12) {
8409                hour = 0;
8410            }
8411            if (meridiem === 'રાત') {
8412                return hour < 4 ? hour : hour + 12;
8413            } else if (meridiem === 'સવાર') {
8414                return hour;
8415            } else if (meridiem === 'બપોર') {
8416                return hour >= 10 ? hour : hour + 12;
8417            } else if (meridiem === 'સાંજ') {
8418                return hour + 12;
8419            }
8420        },
8421        meridiem: function (hour, minute, isLower) {
8422            if (hour < 4) {
8423                return 'રાત';
8424            } else if (hour < 10) {
8425                return 'સવાર';
8426            } else if (hour < 17) {
8427                return 'બપોર';
8428            } else if (hour < 20) {
8429                return 'સાંજ';
8430            } else {
8431                return 'રાત';
8432            }
8433        },
8434        week: {
8435            dow: 0, // Sunday is the first day of the week.
8436            doy: 6 // The week that contains Jan 6th is the first week of the year.
8437        }
8438    });
8439
8440    //! moment.js locale configuration
8441
8442    hooks.defineLocale('he', {
8443        months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),
8444        monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),
8445        weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
8446        weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
8447        weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),
8448        longDateFormat : {
8449            LT : 'HH:mm',
8450            LTS : 'HH:mm:ss',
8451            L : 'DD/MM/YYYY',
8452            LL : 'D [ב]MMMM YYYY',
8453            LLL : 'D [ב]MMMM YYYY HH:mm',
8454            LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',
8455            l : 'D/M/YYYY',
8456            ll : 'D MMM YYYY',
8457            lll : 'D MMM YYYY HH:mm',
8458            llll : 'ddd, D MMM YYYY HH:mm'
8459        },
8460        calendar : {
8461            sameDay : '[היום ב־]LT',
8462            nextDay : '[מחר ב־]LT',
8463            nextWeek : 'dddd [בשעה] LT',
8464            lastDay : '[אתמול ב־]LT',
8465            lastWeek : '[ביום] dddd [האחרון בשעה] LT',
8466            sameElse : 'L'
8467        },
8468        relativeTime : {
8469            future : 'בעוד %s',
8470            past : 'לפני %s',
8471            s : 'מספר שניות',
8472            ss : '%d שניות',
8473            m : 'דקה',
8474            mm : '%d דקות',
8475            h : 'שעה',
8476            hh : function (number) {
8477                if (number === 2) {
8478                    return 'שעתיים';
8479                }
8480                return number + ' שעות';
8481            },
8482            d : 'יום',
8483            dd : function (number) {
8484                if (number === 2) {
8485                    return 'יומיים';
8486                }
8487                return number + ' ימים';
8488            },
8489            M : 'חודש',
8490            MM : function (number) {
8491                if (number === 2) {
8492                    return 'חודשיים';
8493                }
8494                return number + ' חודשים';
8495            },
8496            y : 'שנה',
8497            yy : function (number) {
8498                if (number === 2) {
8499                    return 'שנתיים';
8500                } else if (number % 10 === 0 && number !== 10) {
8501                    return number + ' שנה';
8502                }
8503                return number + ' שנים';
8504            }
8505        },
8506        meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
8507        isPM : function (input) {
8508            return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
8509        },
8510        meridiem : function (hour, minute, isLower) {
8511            if (hour < 5) {
8512                return 'לפנות בוקר';
8513            } else if (hour < 10) {
8514                return 'בבוקר';
8515            } else if (hour < 12) {
8516                return isLower ? 'לפנה"צ' : 'לפני הצהריים';
8517            } else if (hour < 18) {
8518                return isLower ? 'אחה"צ' : 'אחרי הצהריים';
8519            } else {
8520                return 'בערב';
8521            }
8522        }
8523    });
8524
8525    //! moment.js locale configuration
8526
8527    var symbolMap$7 = {
8528        '1': '१',
8529        '2': '२',
8530        '3': '३',
8531        '4': '४',
8532        '5': '५',
8533        '6': '६',
8534        '7': '७',
8535        '8': '८',
8536        '9': '९',
8537        '0': '०'
8538    },
8539    numberMap$6 = {
8540        '१': '1',
8541        '२': '2',
8542        '३': '3',
8543        '४': '4',
8544        '५': '5',
8545        '६': '6',
8546        '७': '7',
8547        '८': '8',
8548        '९': '9',
8549        '०': '0'
8550    };
8551
8552    hooks.defineLocale('hi', {
8553        months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),
8554        monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),
8555        monthsParseExact: true,
8556        weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
8557        weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
8558        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
8559        longDateFormat : {
8560            LT : 'A h:mm बजे',
8561            LTS : 'A h:mm:ss बजे',
8562            L : 'DD/MM/YYYY',
8563            LL : 'D MMMM YYYY',
8564            LLL : 'D MMMM YYYY, A h:mm बजे',
8565            LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'
8566        },
8567        calendar : {
8568            sameDay : '[आज] LT',
8569            nextDay : '[कल] LT',
8570            nextWeek : 'dddd, LT',
8571            lastDay : '[कल] LT',
8572            lastWeek : '[पिछले] dddd, LT',
8573            sameElse : 'L'
8574        },
8575        relativeTime : {
8576            future : '%s में',
8577            past : '%s पहले',
8578            s : 'कुछ ही क्षण',
8579            ss : '%d सेकंड',
8580            m : 'एक मिनट',
8581            mm : '%d मिनट',
8582            h : 'एक घंटा',
8583            hh : '%d घंटे',
8584            d : 'एक दिन',
8585            dd : '%d दिन',
8586            M : 'एक महीने',
8587            MM : '%d महीने',
8588            y : 'एक वर्ष',
8589            yy : '%d वर्ष'
8590        },
8591        preparse: function (string) {
8592            return string.replace(/[१२३४५६७८९०]/g, function (match) {
8593                return numberMap$6[match];
8594            });
8595        },
8596        postformat: function (string) {
8597            return string.replace(/\d/g, function (match) {
8598                return symbolMap$7[match];
8599            });
8600        },
8601        // Hindi notation for meridiems are quite fuzzy in practice. While there exists
8602        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
8603        meridiemParse: /रात|सुबह|दोपहर|शाम/,
8604        meridiemHour : function (hour, meridiem) {
8605            if (hour === 12) {
8606                hour = 0;
8607            }
8608            if (meridiem === 'रात') {
8609                return hour < 4 ? hour : hour + 12;
8610            } else if (meridiem === 'सुबह') {
8611                return hour;
8612            } else if (meridiem === 'दोपहर') {
8613                return hour >= 10 ? hour : hour + 12;
8614            } else if (meridiem === 'शाम') {
8615                return hour + 12;
8616            }
8617        },
8618        meridiem : function (hour, minute, isLower) {
8619            if (hour < 4) {
8620                return 'रात';
8621            } else if (hour < 10) {
8622                return 'सुबह';
8623            } else if (hour < 17) {
8624                return 'दोपहर';
8625            } else if (hour < 20) {
8626                return 'शाम';
8627            } else {
8628                return 'रात';
8629            }
8630        },
8631        week : {
8632            dow : 0, // Sunday is the first day of the week.
8633            doy : 6  // The week that contains Jan 6th is the first week of the year.
8634        }
8635    });
8636
8637    //! moment.js locale configuration
8638
8639    function translate$3(number, withoutSuffix, key) {
8640        var result = number + ' ';
8641        switch (key) {
8642            case 'ss':
8643                if (number === 1) {
8644                    result += 'sekunda';
8645                } else if (number === 2 || number === 3 || number === 4) {
8646                    result += 'sekunde';
8647                } else {
8648                    result += 'sekundi';
8649                }
8650                return result;
8651            case 'm':
8652                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
8653            case 'mm':
8654                if (number === 1) {
8655                    result += 'minuta';
8656                } else if (number === 2 || number === 3 || number === 4) {
8657                    result += 'minute';
8658                } else {
8659                    result += 'minuta';
8660                }
8661                return result;
8662            case 'h':
8663                return withoutSuffix ? 'jedan sat' : 'jednog sata';
8664            case 'hh':
8665                if (number === 1) {
8666                    result += 'sat';
8667                } else if (number === 2 || number === 3 || number === 4) {
8668                    result += 'sata';
8669                } else {
8670                    result += 'sati';
8671                }
8672                return result;
8673            case 'dd':
8674                if (number === 1) {
8675                    result += 'dan';
8676                } else {
8677                    result += 'dana';
8678                }
8679                return result;
8680            case 'MM':
8681                if (number === 1) {
8682                    result += 'mjesec';
8683                } else if (number === 2 || number === 3 || number === 4) {
8684                    result += 'mjeseca';
8685                } else {
8686                    result += 'mjeseci';
8687                }
8688                return result;
8689            case 'yy':
8690                if (number === 1) {
8691                    result += 'godina';
8692                } else if (number === 2 || number === 3 || number === 4) {
8693                    result += 'godine';
8694                } else {
8695                    result += 'godina';
8696                }
8697                return result;
8698        }
8699    }
8700
8701    hooks.defineLocale('hr', {
8702        months : {
8703            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),
8704            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')
8705        },
8706        monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),
8707        monthsParseExact: true,
8708        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
8709        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
8710        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
8711        weekdaysParseExact : true,
8712        longDateFormat : {
8713            LT : 'H:mm',
8714            LTS : 'H:mm:ss',
8715            L : 'DD.MM.YYYY',
8716            LL : 'D. MMMM YYYY',
8717            LLL : 'D. MMMM YYYY H:mm',
8718            LLLL : 'dddd, D. MMMM YYYY H:mm'
8719        },
8720        calendar : {
8721            sameDay  : '[danas u] LT',
8722            nextDay  : '[sutra u] LT',
8723            nextWeek : function () {
8724                switch (this.day()) {
8725                    case 0:
8726                        return '[u] [nedjelju] [u] LT';
8727                    case 3:
8728                        return '[u] [srijedu] [u] LT';
8729                    case 6:
8730                        return '[u] [subotu] [u] LT';
8731                    case 1:
8732                    case 2:
8733                    case 4:
8734                    case 5:
8735                        return '[u] dddd [u] LT';
8736                }
8737            },
8738            lastDay  : '[jučer u] LT',
8739            lastWeek : function () {
8740                switch (this.day()) {
8741                    case 0:
8742                    case 3:
8743                        return '[prošlu] dddd [u] LT';
8744                    case 6:
8745                        return '[prošle] [subote] [u] LT';
8746                    case 1:
8747                    case 2:
8748                    case 4:
8749                    case 5:
8750                        return '[prošli] dddd [u] LT';
8751                }
8752            },
8753            sameElse : 'L'
8754        },
8755        relativeTime : {
8756            future : 'za %s',
8757            past   : 'prije %s',
8758            s      : 'par sekundi',
8759            ss     : translate$3,
8760            m      : translate$3,
8761            mm     : translate$3,
8762            h      : translate$3,
8763            hh     : translate$3,
8764            d      : 'dan',
8765            dd     : translate$3,
8766            M      : 'mjesec',
8767            MM     : translate$3,
8768            y      : 'godinu',
8769            yy     : translate$3
8770        },
8771        dayOfMonthOrdinalParse: /\d{1,2}\./,
8772        ordinal : '%d.',
8773        week : {
8774            dow : 1, // Monday is the first day of the week.
8775            doy : 7  // The week that contains Jan 7th is the first week of the year.
8776        }
8777    });
8778
8779    //! moment.js locale configuration
8780
8781    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
8782    function translate$4(number, withoutSuffix, key, isFuture) {
8783        var num = number;
8784        switch (key) {
8785            case 's':
8786                return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
8787            case 'ss':
8788                return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';
8789            case 'm':
8790                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
8791            case 'mm':
8792                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
8793            case 'h':
8794                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
8795            case 'hh':
8796                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
8797            case 'd':
8798                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
8799            case 'dd':
8800                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
8801            case 'M':
8802                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
8803            case 'MM':
8804                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
8805            case 'y':
8806                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
8807            case 'yy':
8808                return num + (isFuture || withoutSuffix ? ' év' : ' éve');
8809        }
8810        return '';
8811    }
8812    function week(isFuture) {
8813        return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
8814    }
8815
8816    hooks.defineLocale('hu', {
8817        months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),
8818        monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),
8819        weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
8820        weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
8821        weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),
8822        longDateFormat : {
8823            LT : 'H:mm',
8824            LTS : 'H:mm:ss',
8825            L : 'YYYY.MM.DD.',
8826            LL : 'YYYY. MMMM D.',
8827            LLL : 'YYYY. MMMM D. H:mm',
8828            LLLL : 'YYYY. MMMM D., dddd H:mm'
8829        },
8830        meridiemParse: /de|du/i,
8831        isPM: function (input) {
8832            return input.charAt(1).toLowerCase() === 'u';
8833        },
8834        meridiem : function (hours, minutes, isLower) {
8835            if (hours < 12) {
8836                return isLower === true ? 'de' : 'DE';
8837            } else {
8838                return isLower === true ? 'du' : 'DU';
8839            }
8840        },
8841        calendar : {
8842            sameDay : '[ma] LT[-kor]',
8843            nextDay : '[holnap] LT[-kor]',
8844            nextWeek : function () {
8845                return week.call(this, true);
8846            },
8847            lastDay : '[tegnap] LT[-kor]',
8848            lastWeek : function () {
8849                return week.call(this, false);
8850            },
8851            sameElse : 'L'
8852        },
8853        relativeTime : {
8854            future : '%s múlva',
8855            past : '%s',
8856            s : translate$4,
8857            ss : translate$4,
8858            m : translate$4,
8859            mm : translate$4,
8860            h : translate$4,
8861            hh : translate$4,
8862            d : translate$4,
8863            dd : translate$4,
8864            M : translate$4,
8865            MM : translate$4,
8866            y : translate$4,
8867            yy : translate$4
8868        },
8869        dayOfMonthOrdinalParse: /\d{1,2}\./,
8870        ordinal : '%d.',
8871        week : {
8872            dow : 1, // Monday is the first day of the week.
8873            doy : 4  // The week that contains Jan 4th is the first week of the year.
8874        }
8875    });
8876
8877    //! moment.js locale configuration
8878
8879    hooks.defineLocale('hy-am', {
8880        months : {
8881            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),
8882            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')
8883        },
8884        monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
8885        weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),
8886        weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
8887        weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
8888        longDateFormat : {
8889            LT : 'HH:mm',
8890            LTS : 'HH:mm:ss',
8891            L : 'DD.MM.YYYY',
8892            LL : 'D MMMM YYYY Õ©.',
8893            LLL : 'D MMMM YYYY Õ©., HH:mm',
8894            LLLL : 'dddd, D MMMM YYYY Õ©., HH:mm'
8895        },
8896        calendar : {
8897            sameDay: '[այսօր] LT',
8898            nextDay: '[Õ¾Õ¡Õ²Õ¨] LT',
8899            lastDay: '[երեկ] LT',
8900            nextWeek: function () {
8901                return 'dddd [օրը ժամը] LT';
8902            },
8903            lastWeek: function () {
8904                return '[անցած] dddd [օրը ժամը] LT';
8905            },
8906            sameElse: 'L'
8907        },
8908        relativeTime : {
8909            future : '%s Õ°Õ¥Õ¿Õ¸',
8910            past : '%s Õ¡Õ¼Õ¡Õ»',
8911            s : 'մի քանի վայրկյան',
8912            ss : '%d վայրկյան',
8913            m : 'րոպե',
8914            mm : '%d րոպե',
8915            h : 'ÕªÕ¡Õ´',
8916            hh : '%d ÕªÕ¡Õ´',
8917            d : 'օր',
8918            dd : '%d օր',
8919            M : 'Õ¡Õ´Õ«Õ½',
8920            MM : '%d Õ¡Õ´Õ«Õ½',
8921            y : 'տարի',
8922            yy : '%d տարի'
8923        },
8924        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,
8925        isPM: function (input) {
8926            return /^(ցերեկվա|երեկոյան)$/.test(input);
8927        },
8928        meridiem : function (hour) {
8929            if (hour < 4) {
8930                return 'գիշերվա';
8931            } else if (hour < 12) {
8932                return 'Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡';
8933            } else if (hour < 17) {
8934                return 'ցերեկվա';
8935            } else {
8936                return 'երեկոյան';
8937            }
8938        },
8939        dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
8940        ordinal: function (number, period) {
8941            switch (period) {
8942                case 'DDD':
8943                case 'w':
8944                case 'W':
8945                case 'DDDo':
8946                    if (number === 1) {
8947                        return number + '-Õ«Õ¶';
8948                    }
8949                    return number + '-րդ';
8950                default:
8951                    return number;
8952            }
8953        },
8954        week : {
8955            dow : 1, // Monday is the first day of the week.
8956            doy : 7  // The week that contains Jan 7th is the first week of the year.
8957        }
8958    });
8959
8960    //! moment.js locale configuration
8961
8962    hooks.defineLocale('id', {
8963        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),
8964        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),
8965        weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
8966        weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
8967        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
8968        longDateFormat : {
8969            LT : 'HH.mm',
8970            LTS : 'HH.mm.ss',
8971            L : 'DD/MM/YYYY',
8972            LL : 'D MMMM YYYY',
8973            LLL : 'D MMMM YYYY [pukul] HH.mm',
8974            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
8975        },
8976        meridiemParse: /pagi|siang|sore|malam/,
8977        meridiemHour : function (hour, meridiem) {
8978            if (hour === 12) {
8979                hour = 0;
8980            }
8981            if (meridiem === 'pagi') {
8982                return hour;
8983            } else if (meridiem === 'siang') {
8984                return hour >= 11 ? hour : hour + 12;
8985            } else if (meridiem === 'sore' || meridiem === 'malam') {
8986                return hour + 12;
8987            }
8988        },
8989        meridiem : function (hours, minutes, isLower) {
8990            if (hours < 11) {
8991                return 'pagi';
8992            } else if (hours < 15) {
8993                return 'siang';
8994            } else if (hours < 19) {
8995                return 'sore';
8996            } else {
8997                return 'malam';
8998            }
8999        },
9000        calendar : {
9001            sameDay : '[Hari ini pukul] LT',
9002            nextDay : '[Besok pukul] LT',
9003            nextWeek : 'dddd [pukul] LT',
9004            lastDay : '[Kemarin pukul] LT',
9005            lastWeek : 'dddd [lalu pukul] LT',
9006            sameElse : 'L'
9007        },
9008        relativeTime : {
9009            future : 'dalam %s',
9010            past : '%s yang lalu',
9011            s : 'beberapa detik',
9012            ss : '%d detik',
9013            m : 'semenit',
9014            mm : '%d menit',
9015            h : 'sejam',
9016            hh : '%d jam',
9017            d : 'sehari',
9018            dd : '%d hari',
9019            M : 'sebulan',
9020            MM : '%d bulan',
9021            y : 'setahun',
9022            yy : '%d tahun'
9023        },
9024        week : {
9025            dow : 1, // Monday is the first day of the week.
9026            doy : 7  // The week that contains Jan 7th is the first week of the year.
9027        }
9028    });
9029
9030    //! moment.js locale configuration
9031
9032    function plural$2(n) {
9033        if (n % 100 === 11) {
9034            return true;
9035        } else if (n % 10 === 1) {
9036            return false;
9037        }
9038        return true;
9039    }
9040    function translate$5(number, withoutSuffix, key, isFuture) {
9041        var result = number + ' ';
9042        switch (key) {
9043            case 's':
9044                return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
9045            case 'ss':
9046                if (plural$2(number)) {
9047                    return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');
9048                }
9049                return result + 'sekúnda';
9050            case 'm':
9051                return withoutSuffix ? 'mínúta' : 'mínútu';
9052            case 'mm':
9053                if (plural$2(number)) {
9054                    return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
9055                } else if (withoutSuffix) {
9056                    return result + 'mínúta';
9057                }
9058                return result + 'mínútu';
9059            case 'hh':
9060                if (plural$2(number)) {
9061                    return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
9062                }
9063                return result + 'klukkustund';
9064            case 'd':
9065                if (withoutSuffix) {
9066                    return 'dagur';
9067                }
9068                return isFuture ? 'dag' : 'degi';
9069            case 'dd':
9070                if (plural$2(number)) {
9071                    if (withoutSuffix) {
9072                        return result + 'dagar';
9073                    }
9074                    return result + (isFuture ? 'daga' : 'dögum');
9075                } else if (withoutSuffix) {
9076                    return result + 'dagur';
9077                }
9078                return result + (isFuture ? 'dag' : 'degi');
9079            case 'M':
9080                if (withoutSuffix) {
9081                    return 'mánuður';
9082                }
9083                return isFuture ? 'mánuð' : 'mánuði';
9084            case 'MM':
9085                if (plural$2(number)) {
9086                    if (withoutSuffix) {
9087                        return result + 'mánuðir';
9088                    }
9089                    return result + (isFuture ? 'mánuði' : 'mánuðum');
9090                } else if (withoutSuffix) {
9091                    return result + 'mánuður';
9092                }
9093                return result + (isFuture ? 'mánuð' : 'mánuði');
9094            case 'y':
9095                return withoutSuffix || isFuture ? 'ár' : 'ári';
9096            case 'yy':
9097                if (plural$2(number)) {
9098                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
9099                }
9100                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
9101        }
9102    }
9103
9104    hooks.defineLocale('is', {
9105        months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),
9106        monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
9107        weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),
9108        weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
9109        weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
9110        longDateFormat : {
9111            LT : 'H:mm',
9112            LTS : 'H:mm:ss',
9113            L : 'DD.MM.YYYY',
9114            LL : 'D. MMMM YYYY',
9115            LLL : 'D. MMMM YYYY [kl.] H:mm',
9116            LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'
9117        },
9118        calendar : {
9119            sameDay : '[í dag kl.] LT',
9120            nextDay : '[á morgun kl.] LT',
9121            nextWeek : 'dddd [kl.] LT',
9122            lastDay : '[í gær kl.] LT',
9123            lastWeek : '[síðasta] dddd [kl.] LT',
9124            sameElse : 'L'
9125        },
9126        relativeTime : {
9127            future : 'eftir %s',
9128            past : 'fyrir %s síðan',
9129            s : translate$5,
9130            ss : translate$5,
9131            m : translate$5,
9132            mm : translate$5,
9133            h : 'klukkustund',
9134            hh : translate$5,
9135            d : translate$5,
9136            dd : translate$5,
9137            M : translate$5,
9138            MM : translate$5,
9139            y : translate$5,
9140            yy : translate$5
9141        },
9142        dayOfMonthOrdinalParse: /\d{1,2}\./,
9143        ordinal : '%d.',
9144        week : {
9145            dow : 1, // Monday is the first day of the week.
9146            doy : 4  // The week that contains Jan 4th is the first week of the year.
9147        }
9148    });
9149
9150    //! moment.js locale configuration
9151
9152    hooks.defineLocale('it-ch', {
9153        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
9154        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
9155        weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),
9156        weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
9157        weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),
9158        longDateFormat : {
9159            LT : 'HH:mm',
9160            LTS : 'HH:mm:ss',
9161            L : 'DD.MM.YYYY',
9162            LL : 'D MMMM YYYY',
9163            LLL : 'D MMMM YYYY HH:mm',
9164            LLLL : 'dddd D MMMM YYYY HH:mm'
9165        },
9166        calendar : {
9167            sameDay: '[Oggi alle] LT',
9168            nextDay: '[Domani alle] LT',
9169            nextWeek: 'dddd [alle] LT',
9170            lastDay: '[Ieri alle] LT',
9171            lastWeek: function () {
9172                switch (this.day()) {
9173                    case 0:
9174                        return '[la scorsa] dddd [alle] LT';
9175                    default:
9176                        return '[lo scorso] dddd [alle] LT';
9177                }
9178            },
9179            sameElse: 'L'
9180        },
9181        relativeTime : {
9182            future : function (s) {
9183                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;
9184            },
9185            past : '%s fa',
9186            s : 'alcuni secondi',
9187            ss : '%d secondi',
9188            m : 'un minuto',
9189            mm : '%d minuti',
9190            h : 'un\'ora',
9191            hh : '%d ore',
9192            d : 'un giorno',
9193            dd : '%d giorni',
9194            M : 'un mese',
9195            MM : '%d mesi',
9196            y : 'un anno',
9197            yy : '%d anni'
9198        },
9199        dayOfMonthOrdinalParse : /\d{1,2}º/,
9200        ordinal: '%dº',
9201        week : {
9202            dow : 1, // Monday is the first day of the week.
9203            doy : 4  // The week that contains Jan 4th is the first week of the year.
9204        }
9205    });
9206
9207    //! moment.js locale configuration
9208
9209    hooks.defineLocale('it', {
9210        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
9211        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
9212        weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),
9213        weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
9214        weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),
9215        longDateFormat : {
9216            LT : 'HH:mm',
9217            LTS : 'HH:mm:ss',
9218            L : 'DD/MM/YYYY',
9219            LL : 'D MMMM YYYY',
9220            LLL : 'D MMMM YYYY HH:mm',
9221            LLLL : 'dddd D MMMM YYYY HH:mm'
9222        },
9223        calendar : {
9224            sameDay: '[Oggi alle] LT',
9225            nextDay: '[Domani alle] LT',
9226            nextWeek: 'dddd [alle] LT',
9227            lastDay: '[Ieri alle] LT',
9228            lastWeek: function () {
9229                switch (this.day()) {
9230                    case 0:
9231                        return '[la scorsa] dddd [alle] LT';
9232                    default:
9233                        return '[lo scorso] dddd [alle] LT';
9234                }
9235            },
9236            sameElse: 'L'
9237        },
9238        relativeTime : {
9239            future : function (s) {
9240                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;
9241            },
9242            past : '%s fa',
9243            s : 'alcuni secondi',
9244            ss : '%d secondi',
9245            m : 'un minuto',
9246            mm : '%d minuti',
9247            h : 'un\'ora',
9248            hh : '%d ore',
9249            d : 'un giorno',
9250            dd : '%d giorni',
9251            M : 'un mese',
9252            MM : '%d mesi',
9253            y : 'un anno',
9254            yy : '%d anni'
9255        },
9256        dayOfMonthOrdinalParse : /\d{1,2}º/,
9257        ordinal: '%dº',
9258        week : {
9259            dow : 1, // Monday is the first day of the week.
9260            doy : 4  // The week that contains Jan 4th is the first week of the year.
9261        }
9262    });
9263
9264    //! moment.js locale configuration
9265
9266    hooks.defineLocale('ja', {
9267        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
9268        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
9269        weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
9270        weekdaysShort : '日_月_火_水_木_金_土'.split('_'),
9271        weekdaysMin : '日_月_火_水_木_金_土'.split('_'),
9272        longDateFormat : {
9273            LT : 'HH:mm',
9274            LTS : 'HH:mm:ss',
9275            L : 'YYYY/MM/DD',
9276            LL : 'YYYY年M月D日',
9277            LLL : 'YYYY年M月D日 HH:mm',
9278            LLLL : 'YYYY年M月D日 dddd HH:mm',
9279            l : 'YYYY/MM/DD',
9280            ll : 'YYYY年M月D日',
9281            lll : 'YYYY年M月D日 HH:mm',
9282            llll : 'YYYY年M月D日(ddd) HH:mm'
9283        },
9284        meridiemParse: /午前|午後/i,
9285        isPM : function (input) {
9286            return input === '午後';
9287        },
9288        meridiem : function (hour, minute, isLower) {
9289            if (hour < 12) {
9290                return '午前';
9291            } else {
9292                return '午後';
9293            }
9294        },
9295        calendar : {
9296            sameDay : '[今日] LT',
9297            nextDay : '[明日] LT',
9298            nextWeek : function (now) {
9299                if (now.week() < this.week()) {
9300                    return '[来週]dddd LT';
9301                } else {
9302                    return 'dddd LT';
9303                }
9304            },
9305            lastDay : '[昨日] LT',
9306            lastWeek : function (now) {
9307                if (this.week() < now.week()) {
9308                    return '[先週]dddd LT';
9309                } else {
9310                    return 'dddd LT';
9311                }
9312            },
9313            sameElse : 'L'
9314        },
9315        dayOfMonthOrdinalParse : /\d{1,2}日/,
9316        ordinal : function (number, period) {
9317            switch (period) {
9318                case 'd':
9319                case 'D':
9320                case 'DDD':
9321                    return number + '日';
9322                default:
9323                    return number;
9324            }
9325        },
9326        relativeTime : {
9327            future : '%s後',
9328            past : '%s前',
9329            s : '数秒',
9330            ss : '%d秒',
9331            m : '1分',
9332            mm : '%d分',
9333            h : '1時間',
9334            hh : '%d時間',
9335            d : '1日',
9336            dd : '%d日',
9337            M : '1ヶ月',
9338            MM : '%dヶ月',
9339            y : '1å¹´',
9340            yy : '%då¹´'
9341        }
9342    });
9343
9344    //! moment.js locale configuration
9345
9346    hooks.defineLocale('jv', {
9347        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),
9348        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
9349        weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
9350        weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
9351        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
9352        longDateFormat : {
9353            LT : 'HH.mm',
9354            LTS : 'HH.mm.ss',
9355            L : 'DD/MM/YYYY',
9356            LL : 'D MMMM YYYY',
9357            LLL : 'D MMMM YYYY [pukul] HH.mm',
9358            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
9359        },
9360        meridiemParse: /enjing|siyang|sonten|ndalu/,
9361        meridiemHour : function (hour, meridiem) {
9362            if (hour === 12) {
9363                hour = 0;
9364            }
9365            if (meridiem === 'enjing') {
9366                return hour;
9367            } else if (meridiem === 'siyang') {
9368                return hour >= 11 ? hour : hour + 12;
9369            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
9370                return hour + 12;
9371            }
9372        },
9373        meridiem : function (hours, minutes, isLower) {
9374            if (hours < 11) {
9375                return 'enjing';
9376            } else if (hours < 15) {
9377                return 'siyang';
9378            } else if (hours < 19) {
9379                return 'sonten';
9380            } else {
9381                return 'ndalu';
9382            }
9383        },
9384        calendar : {
9385            sameDay : '[Dinten puniko pukul] LT',
9386            nextDay : '[Mbenjang pukul] LT',
9387            nextWeek : 'dddd [pukul] LT',
9388            lastDay : '[Kala wingi pukul] LT',
9389            lastWeek : 'dddd [kepengker pukul] LT',
9390            sameElse : 'L'
9391        },
9392        relativeTime : {
9393            future : 'wonten ing %s',
9394            past : '%s ingkang kepengker',
9395            s : 'sawetawis detik',
9396            ss : '%d detik',
9397            m : 'setunggal menit',
9398            mm : '%d menit',
9399            h : 'setunggal jam',
9400            hh : '%d jam',
9401            d : 'sedinten',
9402            dd : '%d dinten',
9403            M : 'sewulan',
9404            MM : '%d wulan',
9405            y : 'setaun',
9406            yy : '%d taun'
9407        },
9408        week : {
9409            dow : 1, // Monday is the first day of the week.
9410            doy : 7  // The week that contains Jan 7th is the first week of the year.
9411        }
9412    });
9413
9414    //! moment.js locale configuration
9415
9416    hooks.defineLocale('ka', {
9417        months : {
9418            standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
9419            format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
9420        },
9421        monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
9422        weekdays : {
9423            standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
9424            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),
9425            isFormat: /(წინა|შემდეგ)/
9426        },
9427        weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
9428        weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
9429        longDateFormat : {
9430            LT : 'h:mm A',
9431            LTS : 'h:mm:ss A',
9432            L : 'DD/MM/YYYY',
9433            LL : 'D MMMM YYYY',
9434            LLL : 'D MMMM YYYY h:mm A',
9435            LLLL : 'dddd, D MMMM YYYY h:mm A'
9436        },
9437        calendar : {
9438            sameDay : '[დღეს] LT[-ზე]',
9439            nextDay : '[ხვალ] LT[-ზე]',
9440            lastDay : '[გუშინ] LT[-ზე]',
9441            nextWeek : '[შემდეგ] dddd LT[-ზე]',
9442            lastWeek : '[წინა] dddd LT-ზე',
9443            sameElse : 'L'
9444        },
9445        relativeTime : {
9446            future : function (s) {
9447                return (/(წამი|წუთი|საათი|წელი)/).test(s) ?
9448                    s.replace(/ი$/, 'ში') :
9449                    s + 'ში';
9450            },
9451            past : function (s) {
9452                if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {
9453                    return s.replace(/(ი|ე)$/, 'ის წინ');
9454                }
9455                if ((/წელი/).test(s)) {
9456                    return s.replace(/წელი$/, 'წლის წინ');
9457                }
9458            },
9459            s : 'რამდენიმე წამი',
9460            ss : '%d წამი',
9461            m : 'წუთი',
9462            mm : '%d წუთი',
9463            h : 'საათი',
9464            hh : '%d საათი',
9465            d : 'დღე',
9466            dd : '%d დღე',
9467            M : 'თვე',
9468            MM : '%d თვე',
9469            y : 'წელი',
9470            yy : '%d წელი'
9471        },
9472        dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
9473        ordinal : function (number) {
9474            if (number === 0) {
9475                return number;
9476            }
9477            if (number === 1) {
9478                return number + '-ლი';
9479            }
9480            if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {
9481                return 'მე-' + number;
9482            }
9483            return number + '-ე';
9484        },
9485        week : {
9486            dow : 1,
9487            doy : 7
9488        }
9489    });
9490
9491    //! moment.js locale configuration
9492
9493    var suffixes$1 = {
9494        0: '-ші',
9495        1: '-ші',
9496        2: '-ші',
9497        3: '-ші',
9498        4: '-ші',
9499        5: '-ші',
9500        6: '-шы',
9501        7: '-ші',
9502        8: '-ші',
9503        9: '-шы',
9504        10: '-шы',
9505        20: '-шы',
9506        30: '-шы',
9507        40: '-шы',
9508        50: '-ші',
9509        60: '-шы',
9510        70: '-ші',
9511        80: '-ші',
9512        90: '-шы',
9513        100: '-ші'
9514    };
9515
9516    hooks.defineLocale('kk', {
9517        months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),
9518        monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
9519        weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),
9520        weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
9521        weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
9522        longDateFormat : {
9523            LT : 'HH:mm',
9524            LTS : 'HH:mm:ss',
9525            L : 'DD.MM.YYYY',
9526            LL : 'D MMMM YYYY',
9527            LLL : 'D MMMM YYYY HH:mm',
9528            LLLL : 'dddd, D MMMM YYYY HH:mm'
9529        },
9530        calendar : {
9531            sameDay : '[Бүгін сағат] LT',
9532            nextDay : '[Ертең сағат] LT',
9533            nextWeek : 'dddd [сағат] LT',
9534            lastDay : '[Кеше сағат] LT',
9535            lastWeek : '[Өткен аптаның] dddd [сағат] LT',
9536            sameElse : 'L'
9537        },
9538        relativeTime : {
9539            future : '%s ішінде',
9540            past : '%s бұрын',
9541            s : 'бірнеше секунд',
9542            ss : '%d секунд',
9543            m : 'бір минут',
9544            mm : '%d минут',
9545            h : 'бір сағат',
9546            hh : '%d сағат',
9547            d : 'бір күн',
9548            dd : '%d күн',
9549            M : 'бір ай',
9550            MM : '%d ай',
9551            y : 'бір жыл',
9552            yy : '%d жыл'
9553        },
9554        dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/,
9555        ordinal : function (number) {
9556            var a = number % 10,
9557                b = number >= 100 ? 100 : null;
9558            return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]);
9559        },
9560        week : {
9561            dow : 1, // Monday is the first day of the week.
9562            doy : 7  // The week that contains Jan 7th is the first week of the year.
9563        }
9564    });
9565
9566    //! moment.js locale configuration
9567
9568    var symbolMap$8 = {
9569        '1': '១',
9570        '2': '២',
9571        '3': '៣',
9572        '4': '៤',
9573        '5': '៥',
9574        '6': '៦',
9575        '7': '៧',
9576        '8': '៨',
9577        '9': '៩',
9578        '0': '០'
9579    }, numberMap$7 = {
9580        '១': '1',
9581        '២': '2',
9582        '៣': '3',
9583        '៤': '4',
9584        '៥': '5',
9585        '៦': '6',
9586        '៧': '7',
9587        '៨': '8',
9588        '៩': '9',
9589        '០': '0'
9590    };
9591
9592    hooks.defineLocale('km', {
9593        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(
9594            '_'
9595        ),
9596        monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(
9597            '_'
9598        ),
9599        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
9600        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
9601        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
9602        weekdaysParseExact: true,
9603        longDateFormat: {
9604            LT: 'HH:mm',
9605            LTS: 'HH:mm:ss',
9606            L: 'DD/MM/YYYY',
9607            LL: 'D MMMM YYYY',
9608            LLL: 'D MMMM YYYY HH:mm',
9609            LLLL: 'dddd, D MMMM YYYY HH:mm'
9610        },
9611        meridiemParse: /ព្រឹក|ល្ងាច/,
9612        isPM: function (input) {
9613            return input === 'ល្ងាច';
9614        },
9615        meridiem: function (hour, minute, isLower) {
9616            if (hour < 12) {
9617                return 'ព្រឹក';
9618            } else {
9619                return 'ល្ងាច';
9620            }
9621        },
9622        calendar: {
9623            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
9624            nextDay: '[ស្អែក ម៉ោង] LT',
9625            nextWeek: 'dddd [ម៉ោង] LT',
9626            lastDay: '[ម្សិលមិញ ម៉ោង] LT',
9627            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
9628            sameElse: 'L'
9629        },
9630        relativeTime: {
9631            future: '%sទៀត',
9632            past: '%sមុន',
9633            s: 'ប៉ុន្មានវិនាទី',
9634            ss: '%d វិនាទី',
9635            m: 'មួយនាទី',
9636            mm: '%d នាទី',
9637            h: 'មួយម៉ោង',
9638            hh: '%d ម៉ោង',
9639            d: 'មួយថ្ងៃ',
9640            dd: '%d ថ្ងៃ',
9641            M: 'មួយខែ',
9642            MM: '%d ខែ',
9643            y: 'មួយឆ្នាំ',
9644            yy: '%d ឆ្នាំ'
9645        },
9646        dayOfMonthOrdinalParse : /ទី\d{1,2}/,
9647        ordinal : 'ទី%d',
9648        preparse: function (string) {
9649            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {
9650                return numberMap$7[match];
9651            });
9652        },
9653        postformat: function (string) {
9654            return string.replace(/\d/g, function (match) {
9655                return symbolMap$8[match];
9656            });
9657        },
9658        week: {
9659            dow: 1, // Monday is the first day of the week.
9660            doy: 4 // The week that contains Jan 4th is the first week of the year.
9661        }
9662    });
9663
9664    //! moment.js locale configuration
9665
9666    var symbolMap$9 = {
9667        '1': 'à³§',
9668        '2': '೨',
9669        '3': '೩',
9670        '4': '೪',
9671        '5': '೫',
9672        '6': '೬',
9673        '7': 'à³­',
9674        '8': 'à³®',
9675        '9': '೯',
9676        '0': '೦'
9677    },
9678    numberMap$8 = {
9679        'à³§': '1',
9680        '೨': '2',
9681        '೩': '3',
9682        '೪': '4',
9683        '೫': '5',
9684        '೬': '6',
9685        'à³­': '7',
9686        'à³®': '8',
9687        '೯': '9',
9688        '೦': '0'
9689    };
9690
9691    hooks.defineLocale('kn', {
9692        months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),
9693        monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),
9694        monthsParseExact: true,
9695        weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),
9696        weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),
9697        weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),
9698        longDateFormat : {
9699            LT : 'A h:mm',
9700            LTS : 'A h:mm:ss',
9701            L : 'DD/MM/YYYY',
9702            LL : 'D MMMM YYYY',
9703            LLL : 'D MMMM YYYY, A h:mm',
9704            LLLL : 'dddd, D MMMM YYYY, A h:mm'
9705        },
9706        calendar : {
9707            sameDay : '[ಇಂದು] LT',
9708            nextDay : '[ನಾಳೆ] LT',
9709            nextWeek : 'dddd, LT',
9710            lastDay : '[ನಿನ್ನೆ] LT',
9711            lastWeek : '[ಕೊನೆಯ] dddd, LT',
9712            sameElse : 'L'
9713        },
9714        relativeTime : {
9715            future : '%s ನಂತರ',
9716            past : '%s ಹಿಂದೆ',
9717            s : 'ಕೆಲವು ಕ್ಷಣಗಳು',
9718            ss : '%d ಸೆಕೆಂಡುಗಳು',
9719            m : 'ಒಂದು ನಿಮಿಷ',
9720            mm : '%d ನಿಮಿಷ',
9721            h : 'ಒಂದು ಗಂಟೆ',
9722            hh : '%d ಗಂಟೆ',
9723            d : 'ಒಂದು ದಿನ',
9724            dd : '%d ದಿನ',
9725            M : 'ಒಂದು ತಿಂಗಳು',
9726            MM : '%d ತಿಂಗಳು',
9727            y : 'ಒಂದು ವರ್ಷ',
9728            yy : '%d ವರ್ಷ'
9729        },
9730        preparse: function (string) {
9731            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {
9732                return numberMap$8[match];
9733            });
9734        },
9735        postformat: function (string) {
9736            return string.replace(/\d/g, function (match) {
9737                return symbolMap$9[match];
9738            });
9739        },
9740        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,
9741        meridiemHour : function (hour, meridiem) {
9742            if (hour === 12) {
9743                hour = 0;
9744            }
9745            if (meridiem === 'ರಾತ್ರಿ') {
9746                return hour < 4 ? hour : hour + 12;
9747            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {
9748                return hour;
9749            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {
9750                return hour >= 10 ? hour : hour + 12;
9751            } else if (meridiem === 'ಸಂಜೆ') {
9752                return hour + 12;
9753            }
9754        },
9755        meridiem : function (hour, minute, isLower) {
9756            if (hour < 4) {
9757                return 'ರಾತ್ರಿ';
9758            } else if (hour < 10) {
9759                return 'ಬೆಳಿಗ್ಗೆ';
9760            } else if (hour < 17) {
9761                return 'ಮಧ್ಯಾಹ್ನ';
9762            } else if (hour < 20) {
9763                return 'ಸಂಜೆ';
9764            } else {
9765                return 'ರಾತ್ರಿ';
9766            }
9767        },
9768        dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/,
9769        ordinal : function (number) {
9770            return number + 'ನೇ';
9771        },
9772        week : {
9773            dow : 0, // Sunday is the first day of the week.
9774            doy : 6  // The week that contains Jan 6th is the first week of the year.
9775        }
9776    });
9777
9778    //! moment.js locale configuration
9779
9780    hooks.defineLocale('ko', {
9781        months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
9782        monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
9783        weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
9784        weekdaysShort : '일_월_화_수_목_금_토'.split('_'),
9785        weekdaysMin : '일_월_화_수_목_금_토'.split('_'),
9786        longDateFormat : {
9787            LT : 'A h:mm',
9788            LTS : 'A h:mm:ss',
9789            L : 'YYYY.MM.DD.',
9790            LL : 'YYYY년 MMMM D일',
9791            LLL : 'YYYY년 MMMM D일 A h:mm',
9792            LLLL : 'YYYY년 MMMM D일 dddd A h:mm',
9793            l : 'YYYY.MM.DD.',
9794            ll : 'YYYY년 MMMM D일',
9795            lll : 'YYYY년 MMMM D일 A h:mm',
9796            llll : 'YYYY년 MMMM D일 dddd A h:mm'
9797        },
9798        calendar : {
9799            sameDay : '오늘 LT',
9800            nextDay : '내일 LT',
9801            nextWeek : 'dddd LT',
9802            lastDay : '어제 LT',
9803            lastWeek : '지난주 dddd LT',
9804            sameElse : 'L'
9805        },
9806        relativeTime : {
9807            future : '%s 후',
9808            past : '%s 전',
9809            s : '몇 초',
9810            ss : '%d초',
9811            m : '1분',
9812            mm : '%d분',
9813            h : '한 시간',
9814            hh : '%d시간',
9815            d : '하루',
9816            dd : '%d일',
9817            M : '한 달',
9818            MM : '%d달',
9819            y : '일 년',
9820            yy : '%d년'
9821        },
9822        dayOfMonthOrdinalParse : /\d{1,2}(일|월|주)/,
9823        ordinal : function (number, period) {
9824            switch (period) {
9825                case 'd':
9826                case 'D':
9827                case 'DDD':
9828                    return number + '일';
9829                case 'M':
9830                    return number + '월';
9831                case 'w':
9832                case 'W':
9833                    return number + '주';
9834                default:
9835                    return number;
9836            }
9837        },
9838        meridiemParse : /오전|오후/,
9839        isPM : function (token) {
9840            return token === '오후';
9841        },
9842        meridiem : function (hour, minute, isUpper) {
9843            return hour < 12 ? '오전' : '오후';
9844        }
9845    });
9846
9847    //! moment.js locale configuration
9848
9849    var symbolMap$a = {
9850        '1': 'Ù¡',
9851        '2': 'Ù¢',
9852        '3': 'Ù£',
9853        '4': 'Ù¤',
9854        '5': 'Ù¥',
9855        '6': 'Ù¦',
9856        '7': 'Ù§',
9857        '8': 'Ù¨',
9858        '9': 'Ù©',
9859        '0': 'Ù '
9860    }, numberMap$9 = {
9861        'Ù¡': '1',
9862        'Ù¢': '2',
9863        'Ù£': '3',
9864        'Ù¤': '4',
9865        'Ù¥': '5',
9866        'Ù¦': '6',
9867        'Ù§': '7',
9868        'Ù¨': '8',
9869        'Ù©': '9',
9870        'Ù ': '0'
9871    },
9872    months$7 = [
9873        'کانونی دووەم',
9874        'شوبات',
9875        'ئازار',
9876        'نیسان',
9877        'ئایار',
9878        'حوزەیران',
9879        'تەمموز',
9880        'ئاب',
9881        'ئەیلوول',
9882        'تشرینی یەكەم',
9883        'تشرینی دووەم',
9884        'كانونی یەکەم'
9885    ];
9886
9887
9888    hooks.defineLocale('ku', {
9889        months : months$7,
9890        monthsShort : months$7,
9891        weekdays : 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split('_'),
9892        weekdaysShort : 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),
9893        weekdaysMin : 'ی_د_س_چ_پ_ه_ش'.split('_'),
9894        weekdaysParseExact : true,
9895        longDateFormat : {
9896            LT : 'HH:mm',
9897            LTS : 'HH:mm:ss',
9898            L : 'DD/MM/YYYY',
9899            LL : 'D MMMM YYYY',
9900            LLL : 'D MMMM YYYY HH:mm',
9901            LLLL : 'dddd, D MMMM YYYY HH:mm'
9902        },
9903        meridiemParse: /ئێواره‌|به‌یانی/,
9904        isPM: function (input) {
9905            return /ئێواره‌/.test(input);
9906        },
9907        meridiem : function (hour, minute, isLower) {
9908            if (hour < 12) {
9909                return 'به‌یانی';
9910            } else {
9911                return 'ئێواره‌';
9912            }
9913        },
9914        calendar : {
9915            sameDay : '[ئه‌مرۆ كاتژمێر] LT',
9916            nextDay : '[به‌یانی كاتژمێر] LT',
9917            nextWeek : 'dddd [كاتژمێر] LT',
9918            lastDay : '[دوێنێ كاتژمێر] LT',
9919            lastWeek : 'dddd [كاتژمێر] LT',
9920            sameElse : 'L'
9921        },
9922        relativeTime : {
9923            future : 'له‌ %s',
9924            past : '%s',
9925            s : 'چه‌ند چركه‌یه‌ك',
9926            ss : 'چركه‌ %d',
9927            m : 'یه‌ك خوله‌ك',
9928            mm : '%d خوله‌ك',
9929            h : 'یه‌ك كاتژمێر',
9930            hh : '%d كاتژمێر',
9931            d : 'یه‌ك ڕۆژ',
9932            dd : '%d ڕۆژ',
9933            M : 'یه‌ك مانگ',
9934            MM : '%d مانگ',
9935            y : 'یه‌ك ساڵ',
9936            yy : '%d ساڵ'
9937        },
9938        preparse: function (string) {
9939            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
9940                return numberMap$9[match];
9941            }).replace(/،/g, ',');
9942        },
9943        postformat: function (string) {
9944            return string.replace(/\d/g, function (match) {
9945                return symbolMap$a[match];
9946            }).replace(/,/g, '،');
9947        },
9948        week : {
9949            dow : 6, // Saturday is the first day of the week.
9950            doy : 12 // The week that contains Jan 12th is the first week of the year.
9951        }
9952    });
9953
9954    //! moment.js locale configuration
9955
9956    var suffixes$2 = {
9957        0: '-чү',
9958        1: '-чи',
9959        2: '-чи',
9960        3: '-чү',
9961        4: '-чү',
9962        5: '-чи',
9963        6: '-чы',
9964        7: '-чи',
9965        8: '-чи',
9966        9: '-чу',
9967        10: '-чу',
9968        20: '-чы',
9969        30: '-чу',
9970        40: '-чы',
9971        50: '-чү',
9972        60: '-чы',
9973        70: '-чи',
9974        80: '-чи',
9975        90: '-чу',
9976        100: '-чү'
9977    };
9978
9979    hooks.defineLocale('ky', {
9980        months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
9981        monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
9982        weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),
9983        weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
9984        weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
9985        longDateFormat : {
9986            LT : 'HH:mm',
9987            LTS : 'HH:mm:ss',
9988            L : 'DD.MM.YYYY',
9989            LL : 'D MMMM YYYY',
9990            LLL : 'D MMMM YYYY HH:mm',
9991            LLLL : 'dddd, D MMMM YYYY HH:mm'
9992        },
9993        calendar : {
9994            sameDay : '[Бүгүн саат] LT',
9995            nextDay : '[Эртең саат] LT',
9996            nextWeek : 'dddd [саат] LT',
9997            lastDay : '[Кечээ саат] LT',
9998            lastWeek : '[Өткөн аптанын] dddd [күнү] [саат] LT',
9999            sameElse : 'L'
10000        },
10001        relativeTime : {
10002            future : '%s ичинде',
10003            past : '%s мурун',
10004            s : 'бирнече секунд',
10005            ss : '%d секунд',
10006            m : 'бир мүнөт',
10007            mm : '%d мүнөт',
10008            h : 'бир саат',
10009            hh : '%d саат',
10010            d : 'бир күн',
10011            dd : '%d күн',
10012            M : 'бир ай',
10013            MM : '%d ай',
10014            y : 'бир жыл',
10015            yy : '%d жыл'
10016        },
10017        dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
10018        ordinal : function (number) {
10019            var a = number % 10,
10020                b = number >= 100 ? 100 : null;
10021            return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]);
10022        },
10023        week : {
10024            dow : 1, // Monday is the first day of the week.
10025            doy : 7  // The week that contains Jan 7th is the first week of the year.
10026        }
10027    });
10028
10029    //! moment.js locale configuration
10030
10031    function processRelativeTime$5(number, withoutSuffix, key, isFuture) {
10032        var format = {
10033            'm': ['eng Minutt', 'enger Minutt'],
10034            'h': ['eng Stonn', 'enger Stonn'],
10035            'd': ['een Dag', 'engem Dag'],
10036            'M': ['ee Mount', 'engem Mount'],
10037            'y': ['ee Joer', 'engem Joer']
10038        };
10039        return withoutSuffix ? format[key][0] : format[key][1];
10040    }
10041    function processFutureTime(string) {
10042        var number = string.substr(0, string.indexOf(' '));
10043        if (eifelerRegelAppliesToNumber(number)) {
10044            return 'a ' + string;
10045        }
10046        return 'an ' + string;
10047    }
10048    function processPastTime(string) {
10049        var number = string.substr(0, string.indexOf(' '));
10050        if (eifelerRegelAppliesToNumber(number)) {
10051            return 'viru ' + string;
10052        }
10053        return 'virun ' + string;
10054    }
10055    /**
10056     * Returns true if the word before the given number loses the '-n' ending.
10057     * e.g. 'an 10 Deeg' but 'a 5 Deeg'
10058     *
10059     * @param number {integer}
10060     * @returns {boolean}
10061     */
10062    function eifelerRegelAppliesToNumber(number) {
10063        number = parseInt(number, 10);
10064        if (isNaN(number)) {
10065            return false;
10066        }
10067        if (number < 0) {
10068            // Negative Number --> always true
10069            return true;
10070        } else if (number < 10) {
10071            // Only 1 digit
10072            if (4 <= number && number <= 7) {
10073                return true;
10074            }
10075            return false;
10076        } else if (number < 100) {
10077            // 2 digits
10078            var lastDigit = number % 10, firstDigit = number / 10;
10079            if (lastDigit === 0) {
10080                return eifelerRegelAppliesToNumber(firstDigit);
10081            }
10082            return eifelerRegelAppliesToNumber(lastDigit);
10083        } else if (number < 10000) {
10084            // 3 or 4 digits --> recursively check first digit
10085            while (number >= 10) {
10086                number = number / 10;
10087            }
10088            return eifelerRegelAppliesToNumber(number);
10089        } else {
10090            // Anything larger than 4 digits: recursively check first n-3 digits
10091            number = number / 1000;
10092            return eifelerRegelAppliesToNumber(number);
10093        }
10094    }
10095
10096    hooks.defineLocale('lb', {
10097        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
10098        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
10099        monthsParseExact : true,
10100        weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
10101        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
10102        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
10103        weekdaysParseExact : true,
10104        longDateFormat: {
10105            LT: 'H:mm [Auer]',
10106            LTS: 'H:mm:ss [Auer]',
10107            L: 'DD.MM.YYYY',
10108            LL: 'D. MMMM YYYY',
10109            LLL: 'D. MMMM YYYY H:mm [Auer]',
10110            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'
10111        },
10112        calendar: {
10113            sameDay: '[Haut um] LT',
10114            sameElse: 'L',
10115            nextDay: '[Muer um] LT',
10116            nextWeek: 'dddd [um] LT',
10117            lastDay: '[Gëschter um] LT',
10118            lastWeek: function () {
10119                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
10120                switch (this.day()) {
10121                    case 2:
10122                    case 4:
10123                        return '[Leschten] dddd [um] LT';
10124                    default:
10125                        return '[Leschte] dddd [um] LT';
10126                }
10127            }
10128        },
10129        relativeTime : {
10130            future : processFutureTime,
10131            past : processPastTime,
10132            s : 'e puer Sekonnen',
10133            ss : '%d Sekonnen',
10134            m : processRelativeTime$5,
10135            mm : '%d Minutten',
10136            h : processRelativeTime$5,
10137            hh : '%d Stonnen',
10138            d : processRelativeTime$5,
10139            dd : '%d Deeg',
10140            M : processRelativeTime$5,
10141            MM : '%d Méint',
10142            y : processRelativeTime$5,
10143            yy : '%d Joer'
10144        },
10145        dayOfMonthOrdinalParse: /\d{1,2}\./,
10146        ordinal: '%d.',
10147        week: {
10148            dow: 1, // Monday is the first day of the week.
10149            doy: 4  // The week that contains Jan 4th is the first week of the year.
10150        }
10151    });
10152
10153    //! moment.js locale configuration
10154
10155    hooks.defineLocale('lo', {
10156        months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
10157        monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
10158        weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
10159        weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
10160        weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
10161        weekdaysParseExact : true,
10162        longDateFormat : {
10163            LT : 'HH:mm',
10164            LTS : 'HH:mm:ss',
10165            L : 'DD/MM/YYYY',
10166            LL : 'D MMMM YYYY',
10167            LLL : 'D MMMM YYYY HH:mm',
10168            LLLL : 'ວັນdddd D MMMM YYYY HH:mm'
10169        },
10170        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
10171        isPM: function (input) {
10172            return input === 'ຕອນແລງ';
10173        },
10174        meridiem : function (hour, minute, isLower) {
10175            if (hour < 12) {
10176                return 'ຕອນເຊົ້າ';
10177            } else {
10178                return 'ຕອນແລງ';
10179            }
10180        },
10181        calendar : {
10182            sameDay : '[ມື້ນີ້ເວລາ] LT',
10183            nextDay : '[ມື້ອື່ນເວລາ] LT',
10184            nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',
10185            lastDay : '[ມື້ວານນີ້ເວລາ] LT',
10186            lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
10187            sameElse : 'L'
10188        },
10189        relativeTime : {
10190            future : 'ອີກ %s',
10191            past : '%sຜ່ານມາ',
10192            s : 'ບໍ່ເທົ່າໃດວິນາທີ',
10193            ss : '%d ວິນາທີ' ,
10194            m : '1 ນາທີ',
10195            mm : '%d ນາທີ',
10196            h : '1 ຊົ່ວໂມງ',
10197            hh : '%d ຊົ່ວໂມງ',
10198            d : '1 ມື້',
10199            dd : '%d ມື້',
10200            M : '1 ເດືອນ',
10201            MM : '%d ເດືອນ',
10202            y : '1 ປີ',
10203            yy : '%d ປີ'
10204        },
10205        dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/,
10206        ordinal : function (number) {
10207            return 'ທີ່' + number;
10208        }
10209    });
10210
10211    //! moment.js locale configuration
10212
10213    var units = {
10214        'ss' : 'sekundė_sekundžių_sekundes',
10215        'm' : 'minutė_minutės_minutę',
10216        'mm': 'minutės_minučių_minutes',
10217        'h' : 'valanda_valandos_valandą',
10218        'hh': 'valandos_valandų_valandas',
10219        'd' : 'diena_dienos_dieną',
10220        'dd': 'dienos_dienų_dienas',
10221        'M' : 'mėnuo_mėnesio_mėnesį',
10222        'MM': 'mėnesiai_mėnesių_mėnesius',
10223        'y' : 'metai_metų_metus',
10224        'yy': 'metai_metų_metus'
10225    };
10226    function translateSeconds(number, withoutSuffix, key, isFuture) {
10227        if (withoutSuffix) {
10228            return 'kelios sekundės';
10229        } else {
10230            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
10231        }
10232    }
10233    function translateSingular(number, withoutSuffix, key, isFuture) {
10234        return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);
10235    }
10236    function special(number) {
10237        return number % 10 === 0 || (number > 10 && number < 20);
10238    }
10239    function forms(key) {
10240        return units[key].split('_');
10241    }
10242    function translate$6(number, withoutSuffix, key, isFuture) {
10243        var result = number + ' ';
10244        if (number === 1) {
10245            return result + translateSingular(number, withoutSuffix, key[0], isFuture);
10246        } else if (withoutSuffix) {
10247            return result + (special(number) ? forms(key)[1] : forms(key)[0]);
10248        } else {
10249            if (isFuture) {
10250                return result + forms(key)[1];
10251            } else {
10252                return result + (special(number) ? forms(key)[1] : forms(key)[2]);
10253            }
10254        }
10255    }
10256    hooks.defineLocale('lt', {
10257        months : {
10258            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
10259            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),
10260            isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/
10261        },
10262        monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
10263        weekdays : {
10264            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),
10265            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),
10266            isFormat: /dddd HH:mm/
10267        },
10268        weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
10269        weekdaysMin : 'S_P_A_T_K_Pn_Å '.split('_'),
10270        weekdaysParseExact : true,
10271        longDateFormat : {
10272            LT : 'HH:mm',
10273            LTS : 'HH:mm:ss',
10274            L : 'YYYY-MM-DD',
10275            LL : 'YYYY [m.] MMMM D [d.]',
10276            LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
10277            LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
10278            l : 'YYYY-MM-DD',
10279            ll : 'YYYY [m.] MMMM D [d.]',
10280            lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
10281            llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'
10282        },
10283        calendar : {
10284            sameDay : '[Å iandien] LT',
10285            nextDay : '[Rytoj] LT',
10286            nextWeek : 'dddd LT',
10287            lastDay : '[Vakar] LT',
10288            lastWeek : '[Praėjusį] dddd LT',
10289            sameElse : 'L'
10290        },
10291        relativeTime : {
10292            future : 'po %s',
10293            past : 'prieš %s',
10294            s : translateSeconds,
10295            ss : translate$6,
10296            m : translateSingular,
10297            mm : translate$6,
10298            h : translateSingular,
10299            hh : translate$6,
10300            d : translateSingular,
10301            dd : translate$6,
10302            M : translateSingular,
10303            MM : translate$6,
10304            y : translateSingular,
10305            yy : translate$6
10306        },
10307        dayOfMonthOrdinalParse: /\d{1,2}-oji/,
10308        ordinal : function (number) {
10309            return number + '-oji';
10310        },
10311        week : {
10312            dow : 1, // Monday is the first day of the week.
10313            doy : 4  // The week that contains Jan 4th is the first week of the year.
10314        }
10315    });
10316
10317    //! moment.js locale configuration
10318
10319    var units$1 = {
10320        'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'),
10321        'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
10322        'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
10323        'h': 'stundas_stundām_stunda_stundas'.split('_'),
10324        'hh': 'stundas_stundām_stunda_stundas'.split('_'),
10325        'd': 'dienas_dienām_diena_dienas'.split('_'),
10326        'dd': 'dienas_dienām_diena_dienas'.split('_'),
10327        'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
10328        'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
10329        'y': 'gada_gadiem_gads_gadi'.split('_'),
10330        'yy': 'gada_gadiem_gads_gadi'.split('_')
10331    };
10332    /**
10333     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
10334     */
10335    function format$1(forms, number, withoutSuffix) {
10336        if (withoutSuffix) {
10337            // E.g. "21 minūte", "3 minūtes".
10338            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
10339        } else {
10340            // E.g. "21 minūtes" as in "pēc 21 minūtes".
10341            // E.g. "3 minūtēm" as in "pēc 3 minūtēm".
10342            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
10343        }
10344    }
10345    function relativeTimeWithPlural$1(number, withoutSuffix, key) {
10346        return number + ' ' + format$1(units$1[key], number, withoutSuffix);
10347    }
10348    function relativeTimeWithSingular(number, withoutSuffix, key) {
10349        return format$1(units$1[key], number, withoutSuffix);
10350    }
10351    function relativeSeconds(number, withoutSuffix) {
10352        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
10353    }
10354
10355    hooks.defineLocale('lv', {
10356        months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),
10357        monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
10358        weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),
10359        weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),
10360        weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),
10361        weekdaysParseExact : true,
10362        longDateFormat : {
10363            LT : 'HH:mm',
10364            LTS : 'HH:mm:ss',
10365            L : 'DD.MM.YYYY.',
10366            LL : 'YYYY. [gada] D. MMMM',
10367            LLL : 'YYYY. [gada] D. MMMM, HH:mm',
10368            LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'
10369        },
10370        calendar : {
10371            sameDay : '[Å odien pulksten] LT',
10372            nextDay : '[Rīt pulksten] LT',
10373            nextWeek : 'dddd [pulksten] LT',
10374            lastDay : '[Vakar pulksten] LT',
10375            lastWeek : '[Pagājušā] dddd [pulksten] LT',
10376            sameElse : 'L'
10377        },
10378        relativeTime : {
10379            future : 'pēc %s',
10380            past : 'pirms %s',
10381            s : relativeSeconds,
10382            ss : relativeTimeWithPlural$1,
10383            m : relativeTimeWithSingular,
10384            mm : relativeTimeWithPlural$1,
10385            h : relativeTimeWithSingular,
10386            hh : relativeTimeWithPlural$1,
10387            d : relativeTimeWithSingular,
10388            dd : relativeTimeWithPlural$1,
10389            M : relativeTimeWithSingular,
10390            MM : relativeTimeWithPlural$1,
10391            y : relativeTimeWithSingular,
10392            yy : relativeTimeWithPlural$1
10393        },
10394        dayOfMonthOrdinalParse: /\d{1,2}\./,
10395        ordinal : '%d.',
10396        week : {
10397            dow : 1, // Monday is the first day of the week.
10398            doy : 4  // The week that contains Jan 4th is the first week of the year.
10399        }
10400    });
10401
10402    //! moment.js locale configuration
10403
10404    var translator = {
10405        words: { //Different grammatical cases
10406            ss: ['sekund', 'sekunda', 'sekundi'],
10407            m: ['jedan minut', 'jednog minuta'],
10408            mm: ['minut', 'minuta', 'minuta'],
10409            h: ['jedan sat', 'jednog sata'],
10410            hh: ['sat', 'sata', 'sati'],
10411            dd: ['dan', 'dana', 'dana'],
10412            MM: ['mjesec', 'mjeseca', 'mjeseci'],
10413            yy: ['godina', 'godine', 'godina']
10414        },
10415        correctGrammaticalCase: function (number, wordKey) {
10416            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
10417        },
10418        translate: function (number, withoutSuffix, key) {
10419            var wordKey = translator.words[key];
10420            if (key.length === 1) {
10421                return withoutSuffix ? wordKey[0] : wordKey[1];
10422            } else {
10423                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
10424            }
10425        }
10426    };
10427
10428    hooks.defineLocale('me', {
10429        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
10430        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
10431        monthsParseExact : true,
10432        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
10433        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
10434        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
10435        weekdaysParseExact : true,
10436        longDateFormat: {
10437            LT: 'H:mm',
10438            LTS : 'H:mm:ss',
10439            L: 'DD.MM.YYYY',
10440            LL: 'D. MMMM YYYY',
10441            LLL: 'D. MMMM YYYY H:mm',
10442            LLLL: 'dddd, D. MMMM YYYY H:mm'
10443        },
10444        calendar: {
10445            sameDay: '[danas u] LT',
10446            nextDay: '[sjutra u] LT',
10447
10448            nextWeek: function () {
10449                switch (this.day()) {
10450                    case 0:
10451                        return '[u] [nedjelju] [u] LT';
10452                    case 3:
10453                        return '[u] [srijedu] [u] LT';
10454                    case 6:
10455                        return '[u] [subotu] [u] LT';
10456                    case 1:
10457                    case 2:
10458                    case 4:
10459                    case 5:
10460                        return '[u] dddd [u] LT';
10461                }
10462            },
10463            lastDay  : '[juče u] LT',
10464            lastWeek : function () {
10465                var lastWeekDays = [
10466                    '[prošle] [nedjelje] [u] LT',
10467                    '[prošlog] [ponedjeljka] [u] LT',
10468                    '[prošlog] [utorka] [u] LT',
10469                    '[prošle] [srijede] [u] LT',
10470                    '[prošlog] [četvrtka] [u] LT',
10471                    '[prošlog] [petka] [u] LT',
10472                    '[prošle] [subote] [u] LT'
10473                ];
10474                return lastWeekDays[this.day()];
10475            },
10476            sameElse : 'L'
10477        },
10478        relativeTime : {
10479            future : 'za %s',
10480            past   : 'prije %s',
10481            s      : 'nekoliko sekundi',
10482            ss     : translator.translate,
10483            m      : translator.translate,
10484            mm     : translator.translate,
10485            h      : translator.translate,
10486            hh     : translator.translate,
10487            d      : 'dan',
10488            dd     : translator.translate,
10489            M      : 'mjesec',
10490            MM     : translator.translate,
10491            y      : 'godinu',
10492            yy     : translator.translate
10493        },
10494        dayOfMonthOrdinalParse: /\d{1,2}\./,
10495        ordinal : '%d.',
10496        week : {
10497            dow : 1, // Monday is the first day of the week.
10498            doy : 7  // The week that contains Jan 7th is the first week of the year.
10499        }
10500    });
10501
10502    //! moment.js locale configuration
10503
10504    hooks.defineLocale('mi', {
10505        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),
10506        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),
10507        monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
10508        monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
10509        monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
10510        monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
10511        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
10512        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
10513        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
10514        longDateFormat: {
10515            LT: 'HH:mm',
10516            LTS: 'HH:mm:ss',
10517            L: 'DD/MM/YYYY',
10518            LL: 'D MMMM YYYY',
10519            LLL: 'D MMMM YYYY [i] HH:mm',
10520            LLLL: 'dddd, D MMMM YYYY [i] HH:mm'
10521        },
10522        calendar: {
10523            sameDay: '[i teie mahana, i] LT',
10524            nextDay: '[apopo i] LT',
10525            nextWeek: 'dddd [i] LT',
10526            lastDay: '[inanahi i] LT',
10527            lastWeek: 'dddd [whakamutunga i] LT',
10528            sameElse: 'L'
10529        },
10530        relativeTime: {
10531            future: 'i roto i %s',
10532            past: '%s i mua',
10533            s: 'te hēkona ruarua',
10534            ss: '%d hēkona',
10535            m: 'he meneti',
10536            mm: '%d meneti',
10537            h: 'te haora',
10538            hh: '%d haora',
10539            d: 'he ra',
10540            dd: '%d ra',
10541            M: 'he marama',
10542            MM: '%d marama',
10543            y: 'he tau',
10544            yy: '%d tau'
10545        },
10546        dayOfMonthOrdinalParse: /\d{1,2}º/,
10547        ordinal: '%dº',
10548        week : {
10549            dow : 1, // Monday is the first day of the week.
10550            doy : 4  // The week that contains Jan 4th is the first week of the year.
10551        }
10552    });
10553
10554    //! moment.js locale configuration
10555
10556    hooks.defineLocale('mk', {
10557        months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),
10558        monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
10559        weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),
10560        weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
10561        weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),
10562        longDateFormat : {
10563            LT : 'H:mm',
10564            LTS : 'H:mm:ss',
10565            L : 'D.MM.YYYY',
10566            LL : 'D MMMM YYYY',
10567            LLL : 'D MMMM YYYY H:mm',
10568            LLLL : 'dddd, D MMMM YYYY H:mm'
10569        },
10570        calendar : {
10571            sameDay : '[Денес во] LT',
10572            nextDay : '[Утре во] LT',
10573            nextWeek : '[Во] dddd [во] LT',
10574            lastDay : '[Вчера во] LT',
10575            lastWeek : function () {
10576                switch (this.day()) {
10577                    case 0:
10578                    case 3:
10579                    case 6:
10580                        return '[Изминатата] dddd [во] LT';
10581                    case 1:
10582                    case 2:
10583                    case 4:
10584                    case 5:
10585                        return '[Изминатиот] dddd [во] LT';
10586                }
10587            },
10588            sameElse : 'L'
10589        },
10590        relativeTime : {
10591            future : 'после %s',
10592            past : 'пред %s',
10593            s : 'неколку секунди',
10594            ss : '%d секунди',
10595            m : 'минута',
10596            mm : '%d минути',
10597            h : 'час',
10598            hh : '%d часа',
10599            d : 'ден',
10600            dd : '%d дена',
10601            M : 'месец',
10602            MM : '%d месеци',
10603            y : 'година',
10604            yy : '%d години'
10605        },
10606        dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
10607        ordinal : function (number) {
10608            var lastDigit = number % 10,
10609                last2Digits = number % 100;
10610            if (number === 0) {
10611                return number + '-ев';
10612            } else if (last2Digits === 0) {
10613                return number + '-ен';
10614            } else if (last2Digits > 10 && last2Digits < 20) {
10615                return number + '-ти';
10616            } else if (lastDigit === 1) {
10617                return number + '-ви';
10618            } else if (lastDigit === 2) {
10619                return number + '-ри';
10620            } else if (lastDigit === 7 || lastDigit === 8) {
10621                return number + '-ми';
10622            } else {
10623                return number + '-ти';
10624            }
10625        },
10626        week : {
10627            dow : 1, // Monday is the first day of the week.
10628            doy : 7  // The week that contains Jan 7th is the first week of the year.
10629        }
10630    });
10631
10632    //! moment.js locale configuration
10633
10634    hooks.defineLocale('ml', {
10635        months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),
10636        monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),
10637        monthsParseExact : true,
10638        weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),
10639        weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
10640        weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
10641        longDateFormat : {
10642            LT : 'A h:mm -നു',
10643            LTS : 'A h:mm:ss -നു',
10644            L : 'DD/MM/YYYY',
10645            LL : 'D MMMM YYYY',
10646            LLL : 'D MMMM YYYY, A h:mm -നു',
10647            LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'
10648        },
10649        calendar : {
10650            sameDay : '[ഇന്ന്] LT',
10651            nextDay : '[നാളെ] LT',
10652            nextWeek : 'dddd, LT',
10653            lastDay : '[ഇന്നലെ] LT',
10654            lastWeek : '[കഴിഞ്ഞ] dddd, LT',
10655            sameElse : 'L'
10656        },
10657        relativeTime : {
10658            future : '%s കഴിഞ്ഞ്',
10659            past : '%s മുൻപ്',
10660            s : 'അൽപ നിമിഷങ്ങൾ',
10661            ss : '%d സെക്കൻഡ്',
10662            m : 'ഒരു മിനിറ്റ്',
10663            mm : '%d മിനിറ്റ്',
10664            h : 'ഒരു മണിക്കൂർ',
10665            hh : '%d മണിക്കൂർ',
10666            d : 'ഒരു ദിവസം',
10667            dd : '%d ദിവസം',
10668            M : 'ഒരു മാസം',
10669            MM : '%d മാസം',
10670            y : 'ഒരു വർഷം',
10671            yy : '%d വർഷം'
10672        },
10673        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
10674        meridiemHour : function (hour, meridiem) {
10675            if (hour === 12) {
10676                hour = 0;
10677            }
10678            if ((meridiem === 'രാത്രി' && hour >= 4) ||
10679                    meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||
10680                    meridiem === 'വൈകുന്നേരം') {
10681                return hour + 12;
10682            } else {
10683                return hour;
10684            }
10685        },
10686        meridiem : function (hour, minute, isLower) {
10687            if (hour < 4) {
10688                return 'രാത്രി';
10689            } else if (hour < 12) {
10690                return 'രാവിലെ';
10691            } else if (hour < 17) {
10692                return 'ഉച്ച കഴിഞ്ഞ്';
10693            } else if (hour < 20) {
10694                return 'വൈകുന്നേരം';
10695            } else {
10696                return 'രാത്രി';
10697            }
10698        }
10699    });
10700
10701    //! moment.js locale configuration
10702
10703    function translate$7(number, withoutSuffix, key, isFuture) {
10704        switch (key) {
10705            case 's':
10706                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';
10707            case 'ss':
10708                return number + (withoutSuffix ? ' секунд' : ' секундын');
10709            case 'm':
10710            case 'mm':
10711                return number + (withoutSuffix ? ' минут' : ' минутын');
10712            case 'h':
10713            case 'hh':
10714                return number + (withoutSuffix ? ' цаг' : ' цагийн');
10715            case 'd':
10716            case 'dd':
10717                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');
10718            case 'M':
10719            case 'MM':
10720                return number + (withoutSuffix ? ' сар' : ' сарын');
10721            case 'y':
10722            case 'yy':
10723                return number + (withoutSuffix ? ' жил' : ' жилийн');
10724            default:
10725                return number;
10726        }
10727    }
10728
10729    hooks.defineLocale('mn', {
10730        months : 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),
10731        monthsShort : '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),
10732        monthsParseExact : true,
10733        weekdays : 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),
10734        weekdaysShort : 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),
10735        weekdaysMin : 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),
10736        weekdaysParseExact : true,
10737        longDateFormat : {
10738            LT : 'HH:mm',
10739            LTS : 'HH:mm:ss',
10740            L : 'YYYY-MM-DD',
10741            LL : 'YYYY оны MMMMын D',
10742            LLL : 'YYYY оны MMMMын D HH:mm',
10743            LLLL : 'dddd, YYYY оны MMMMын D HH:mm'
10744        },
10745        meridiemParse: /ҮӨ|ҮХ/i,
10746        isPM : function (input) {
10747            return input === 'ҮХ';
10748        },
10749        meridiem : function (hour, minute, isLower) {
10750            if (hour < 12) {
10751                return 'Ò®Ó¨';
10752            } else {
10753                return 'ҮХ';
10754            }
10755        },
10756        calendar : {
10757            sameDay : '[Өнөөдөр] LT',
10758            nextDay : '[Маргааш] LT',
10759            nextWeek : '[Ирэх] dddd LT',
10760            lastDay : '[Өчигдөр] LT',
10761            lastWeek : '[Өнгөрсөн] dddd LT',
10762            sameElse : 'L'
10763        },
10764        relativeTime : {
10765            future : '%s дараа',
10766            past : '%s өмнө',
10767            s : translate$7,
10768            ss : translate$7,
10769            m : translate$7,
10770            mm : translate$7,
10771            h : translate$7,
10772            hh : translate$7,
10773            d : translate$7,
10774            dd : translate$7,
10775            M : translate$7,
10776            MM : translate$7,
10777            y : translate$7,
10778            yy : translate$7
10779        },
10780        dayOfMonthOrdinalParse: /\d{1,2} өдөр/,
10781        ordinal : function (number, period) {
10782            switch (period) {
10783                case 'd':
10784                case 'D':
10785                case 'DDD':
10786                    return number + ' өдөр';
10787                default:
10788                    return number;
10789            }
10790        }
10791    });
10792
10793    //! moment.js locale configuration
10794
10795    var symbolMap$b = {
10796        '1': '१',
10797        '2': '२',
10798        '3': '३',
10799        '4': '४',
10800        '5': '५',
10801        '6': '६',
10802        '7': '७',
10803        '8': '८',
10804        '9': '९',
10805        '0': '०'
10806    },
10807    numberMap$a = {
10808        '१': '1',
10809        '२': '2',
10810        '३': '3',
10811        '४': '4',
10812        '५': '5',
10813        '६': '6',
10814        '७': '7',
10815        '८': '8',
10816        '९': '9',
10817        '०': '0'
10818    };
10819
10820    function relativeTimeMr(number, withoutSuffix, string, isFuture)
10821    {
10822        var output = '';
10823        if (withoutSuffix) {
10824            switch (string) {
10825                case 's': output = 'काही सेकंद'; break;
10826                case 'ss': output = '%d सेकंद'; break;
10827                case 'm': output = 'एक मिनिट'; break;
10828                case 'mm': output = '%d मिनिटे'; break;
10829                case 'h': output = 'एक तास'; break;
10830                case 'hh': output = '%d तास'; break;
10831                case 'd': output = 'एक दिवस'; break;
10832                case 'dd': output = '%d दिवस'; break;
10833                case 'M': output = 'एक महिना'; break;
10834                case 'MM': output = '%d महिने'; break;
10835                case 'y': output = 'एक वर्ष'; break;
10836                case 'yy': output = '%d वर्षे'; break;
10837            }
10838        }
10839        else {
10840            switch (string) {
10841                case 's': output = 'काही सेकंदां'; break;
10842                case 'ss': output = '%d सेकंदां'; break;
10843                case 'm': output = 'एका मिनिटा'; break;
10844                case 'mm': output = '%d मिनिटां'; break;
10845                case 'h': output = 'एका तासा'; break;
10846                case 'hh': output = '%d तासां'; break;
10847                case 'd': output = 'एका दिवसा'; break;
10848                case 'dd': output = '%d दिवसां'; break;
10849                case 'M': output = 'एका महिन्या'; break;
10850                case 'MM': output = '%d महिन्यां'; break;
10851                case 'y': output = 'एका वर्षा'; break;
10852                case 'yy': output = '%d वर्षां'; break;
10853            }
10854        }
10855        return output.replace(/%d/i, number);
10856    }
10857
10858    hooks.defineLocale('mr', {
10859        months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),
10860        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),
10861        monthsParseExact : true,
10862        weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
10863        weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
10864        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
10865        longDateFormat : {
10866            LT : 'A h:mm वाजता',
10867            LTS : 'A h:mm:ss वाजता',
10868            L : 'DD/MM/YYYY',
10869            LL : 'D MMMM YYYY',
10870            LLL : 'D MMMM YYYY, A h:mm वाजता',
10871            LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'
10872        },
10873        calendar : {
10874            sameDay : '[आज] LT',
10875            nextDay : '[उद्या] LT',
10876            nextWeek : 'dddd, LT',
10877            lastDay : '[काल] LT',
10878            lastWeek: '[मागील] dddd, LT',
10879            sameElse : 'L'
10880        },
10881        relativeTime : {
10882            future: '%sमध्ये',
10883            past: '%sपूर्वी',
10884            s: relativeTimeMr,
10885            ss: relativeTimeMr,
10886            m: relativeTimeMr,
10887            mm: relativeTimeMr,
10888            h: relativeTimeMr,
10889            hh: relativeTimeMr,
10890            d: relativeTimeMr,
10891            dd: relativeTimeMr,
10892            M: relativeTimeMr,
10893            MM: relativeTimeMr,
10894            y: relativeTimeMr,
10895            yy: relativeTimeMr
10896        },
10897        preparse: function (string) {
10898            return string.replace(/[१२३४५६७८९०]/g, function (match) {
10899                return numberMap$a[match];
10900            });
10901        },
10902        postformat: function (string) {
10903            return string.replace(/\d/g, function (match) {
10904                return symbolMap$b[match];
10905            });
10906        },
10907        meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,
10908        meridiemHour : function (hour, meridiem) {
10909            if (hour === 12) {
10910                hour = 0;
10911            }
10912            if (meridiem === 'रात्री') {
10913                return hour < 4 ? hour : hour + 12;
10914            } else if (meridiem === 'सकाळी') {
10915                return hour;
10916            } else if (meridiem === 'दुपारी') {
10917                return hour >= 10 ? hour : hour + 12;
10918            } else if (meridiem === 'सायंकाळी') {
10919                return hour + 12;
10920            }
10921        },
10922        meridiem: function (hour, minute, isLower) {
10923            if (hour < 4) {
10924                return 'रात्री';
10925            } else if (hour < 10) {
10926                return 'सकाळी';
10927            } else if (hour < 17) {
10928                return 'दुपारी';
10929            } else if (hour < 20) {
10930                return 'सायंकाळी';
10931            } else {
10932                return 'रात्री';
10933            }
10934        },
10935        week : {
10936            dow : 0, // Sunday is the first day of the week.
10937            doy : 6  // The week that contains Jan 6th is the first week of the year.
10938        }
10939    });
10940
10941    //! moment.js locale configuration
10942
10943    hooks.defineLocale('ms-my', {
10944        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
10945        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
10946        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
10947        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
10948        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
10949        longDateFormat : {
10950            LT : 'HH.mm',
10951            LTS : 'HH.mm.ss',
10952            L : 'DD/MM/YYYY',
10953            LL : 'D MMMM YYYY',
10954            LLL : 'D MMMM YYYY [pukul] HH.mm',
10955            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
10956        },
10957        meridiemParse: /pagi|tengahari|petang|malam/,
10958        meridiemHour: function (hour, meridiem) {
10959            if (hour === 12) {
10960                hour = 0;
10961            }
10962            if (meridiem === 'pagi') {
10963                return hour;
10964            } else if (meridiem === 'tengahari') {
10965                return hour >= 11 ? hour : hour + 12;
10966            } else if (meridiem === 'petang' || meridiem === 'malam') {
10967                return hour + 12;
10968            }
10969        },
10970        meridiem : function (hours, minutes, isLower) {
10971            if (hours < 11) {
10972                return 'pagi';
10973            } else if (hours < 15) {
10974                return 'tengahari';
10975            } else if (hours < 19) {
10976                return 'petang';
10977            } else {
10978                return 'malam';
10979            }
10980        },
10981        calendar : {
10982            sameDay : '[Hari ini pukul] LT',
10983            nextDay : '[Esok pukul] LT',
10984            nextWeek : 'dddd [pukul] LT',
10985            lastDay : '[Kelmarin pukul] LT',
10986            lastWeek : 'dddd [lepas pukul] LT',
10987            sameElse : 'L'
10988        },
10989        relativeTime : {
10990            future : 'dalam %s',
10991            past : '%s yang lepas',
10992            s : 'beberapa saat',
10993            ss : '%d saat',
10994            m : 'seminit',
10995            mm : '%d minit',
10996            h : 'sejam',
10997            hh : '%d jam',
10998            d : 'sehari',
10999            dd : '%d hari',
11000            M : 'sebulan',
11001            MM : '%d bulan',
11002            y : 'setahun',
11003            yy : '%d tahun'
11004        },
11005        week : {
11006            dow : 1, // Monday is the first day of the week.
11007            doy : 7  // The week that contains Jan 7th is the first week of the year.
11008        }
11009    });
11010
11011    //! moment.js locale configuration
11012
11013    hooks.defineLocale('ms', {
11014        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
11015        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
11016        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
11017        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
11018        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
11019        longDateFormat : {
11020            LT : 'HH.mm',
11021            LTS : 'HH.mm.ss',
11022            L : 'DD/MM/YYYY',
11023            LL : 'D MMMM YYYY',
11024            LLL : 'D MMMM YYYY [pukul] HH.mm',
11025            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
11026        },
11027        meridiemParse: /pagi|tengahari|petang|malam/,
11028        meridiemHour: function (hour, meridiem) {
11029            if (hour === 12) {
11030                hour = 0;
11031            }
11032            if (meridiem === 'pagi') {
11033                return hour;
11034            } else if (meridiem === 'tengahari') {
11035                return hour >= 11 ? hour : hour + 12;
11036            } else if (meridiem === 'petang' || meridiem === 'malam') {
11037                return hour + 12;
11038            }
11039        },
11040        meridiem : function (hours, minutes, isLower) {
11041            if (hours < 11) {
11042                return 'pagi';
11043            } else if (hours < 15) {
11044                return 'tengahari';
11045            } else if (hours < 19) {
11046                return 'petang';
11047            } else {
11048                return 'malam';
11049            }
11050        },
11051        calendar : {
11052            sameDay : '[Hari ini pukul] LT',
11053            nextDay : '[Esok pukul] LT',
11054            nextWeek : 'dddd [pukul] LT',
11055            lastDay : '[Kelmarin pukul] LT',
11056            lastWeek : 'dddd [lepas pukul] LT',
11057            sameElse : 'L'
11058        },
11059        relativeTime : {
11060            future : 'dalam %s',
11061            past : '%s yang lepas',
11062            s : 'beberapa saat',
11063            ss : '%d saat',
11064            m : 'seminit',
11065            mm : '%d minit',
11066            h : 'sejam',
11067            hh : '%d jam',
11068            d : 'sehari',
11069            dd : '%d hari',
11070            M : 'sebulan',
11071            MM : '%d bulan',
11072            y : 'setahun',
11073            yy : '%d tahun'
11074        },
11075        week : {
11076            dow : 1, // Monday is the first day of the week.
11077            doy : 7  // The week that contains Jan 7th is the first week of the year.
11078        }
11079    });
11080
11081    //! moment.js locale configuration
11082
11083    hooks.defineLocale('mt', {
11084        months : 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),
11085        monthsShort : 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),
11086        weekdays : 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),
11087        weekdaysShort : 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),
11088        weekdaysMin : 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),
11089        longDateFormat : {
11090            LT : 'HH:mm',
11091            LTS : 'HH:mm:ss',
11092            L : 'DD/MM/YYYY',
11093            LL : 'D MMMM YYYY',
11094            LLL : 'D MMMM YYYY HH:mm',
11095            LLLL : 'dddd, D MMMM YYYY HH:mm'
11096        },
11097        calendar : {
11098            sameDay : '[Illum fil-]LT',
11099            nextDay : '[Għada fil-]LT',
11100            nextWeek : 'dddd [fil-]LT',
11101            lastDay : '[Il-bieraħ fil-]LT',
11102            lastWeek : 'dddd [li għadda] [fil-]LT',
11103            sameElse : 'L'
11104        },
11105        relativeTime : {
11106            future : 'f’ %s',
11107            past : '%s ilu',
11108            s : 'ftit sekondi',
11109            ss : '%d sekondi',
11110            m : 'minuta',
11111            mm : '%d minuti',
11112            h : 'siegħa',
11113            hh : '%d siegħat',
11114            d : 'ġurnata',
11115            dd : '%d ġranet',
11116            M : 'xahar',
11117            MM : '%d xhur',
11118            y : 'sena',
11119            yy : '%d sni'
11120        },
11121        dayOfMonthOrdinalParse : /\d{1,2}º/,
11122        ordinal: '%dº',
11123        week : {
11124            dow : 1, // Monday is the first day of the week.
11125            doy : 4  // The week that contains Jan 4th is the first week of the year.
11126        }
11127    });
11128
11129    //! moment.js locale configuration
11130
11131    var symbolMap$c = {
11132        '1': '၁',
11133        '2': '၂',
11134        '3': '၃',
11135        '4': '၄',
11136        '5': '၅',
11137        '6': '၆',
11138        '7': '၇',
11139        '8': '၈',
11140        '9': '၉',
11141        '0': '၀'
11142    }, numberMap$b = {
11143        '၁': '1',
11144        '၂': '2',
11145        '၃': '3',
11146        '၄': '4',
11147        '၅': '5',
11148        '၆': '6',
11149        '၇': '7',
11150        '၈': '8',
11151        '၉': '9',
11152        '၀': '0'
11153    };
11154
11155    hooks.defineLocale('my', {
11156        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),
11157        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
11158        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),
11159        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
11160        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
11161
11162        longDateFormat: {
11163            LT: 'HH:mm',
11164            LTS: 'HH:mm:ss',
11165            L: 'DD/MM/YYYY',
11166            LL: 'D MMMM YYYY',
11167            LLL: 'D MMMM YYYY HH:mm',
11168            LLLL: 'dddd D MMMM YYYY HH:mm'
11169        },
11170        calendar: {
11171            sameDay: '[ယနေ.] LT [မှာ]',
11172            nextDay: '[မနက်ဖြန်] LT [မှာ]',
11173            nextWeek: 'dddd LT [မှာ]',
11174            lastDay: '[မနေ.က] LT [မှာ]',
11175            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
11176            sameElse: 'L'
11177        },
11178        relativeTime: {
11179            future: 'လာမည့် %s မှာ',
11180            past: 'လွန်ခဲ့သော %s က',
11181            s: 'စက္ကန်.အနည်းငယ်',
11182            ss : '%d စက္ကန့်',
11183            m: 'တစ်မိနစ်',
11184            mm: '%d မိနစ်',
11185            h: 'တစ်နာရီ',
11186            hh: '%d နာရီ',
11187            d: 'တစ်ရက်',
11188            dd: '%d ရက်',
11189            M: 'တစ်လ',
11190            MM: '%d လ',
11191            y: 'တစ်နှစ်',
11192            yy: '%d နှစ်'
11193        },
11194        preparse: function (string) {
11195            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
11196                return numberMap$b[match];
11197            });
11198        },
11199        postformat: function (string) {
11200            return string.replace(/\d/g, function (match) {
11201                return symbolMap$c[match];
11202            });
11203        },
11204        week: {
11205            dow: 1, // Monday is the first day of the week.
11206            doy: 4 // The week that contains Jan 4th is the first week of the year.
11207        }
11208    });
11209
11210    //! moment.js locale configuration
11211
11212    hooks.defineLocale('nb', {
11213        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
11214        monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
11215        monthsParseExact : true,
11216        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
11217        weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),
11218        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
11219        weekdaysParseExact : true,
11220        longDateFormat : {
11221            LT : 'HH:mm',
11222            LTS : 'HH:mm:ss',
11223            L : 'DD.MM.YYYY',
11224            LL : 'D. MMMM YYYY',
11225            LLL : 'D. MMMM YYYY [kl.] HH:mm',
11226            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
11227        },
11228        calendar : {
11229            sameDay: '[i dag kl.] LT',
11230            nextDay: '[i morgen kl.] LT',
11231            nextWeek: 'dddd [kl.] LT',
11232            lastDay: '[i går kl.] LT',
11233            lastWeek: '[forrige] dddd [kl.] LT',
11234            sameElse: 'L'
11235        },
11236        relativeTime : {
11237            future : 'om %s',
11238            past : '%s siden',
11239            s : 'noen sekunder',
11240            ss : '%d sekunder',
11241            m : 'ett minutt',
11242            mm : '%d minutter',
11243            h : 'en time',
11244            hh : '%d timer',
11245            d : 'en dag',
11246            dd : '%d dager',
11247            M : 'en måned',
11248            MM : '%d måneder',
11249            y : 'ett år',
11250            yy : '%d år'
11251        },
11252        dayOfMonthOrdinalParse: /\d{1,2}\./,
11253        ordinal : '%d.',
11254        week : {
11255            dow : 1, // Monday is the first day of the week.
11256            doy : 4  // The week that contains Jan 4th is the first week of the year.
11257        }
11258    });
11259
11260    //! moment.js locale configuration
11261
11262    var symbolMap$d = {
11263        '1': '१',
11264        '2': '२',
11265        '3': '३',
11266        '4': '४',
11267        '5': '५',
11268        '6': '६',
11269        '7': '७',
11270        '8': '८',
11271        '9': '९',
11272        '0': '०'
11273    },
11274    numberMap$c = {
11275        '१': '1',
11276        '२': '2',
11277        '३': '3',
11278        '४': '4',
11279        '५': '5',
11280        '६': '6',
11281        '७': '7',
11282        '८': '8',
11283        '९': '9',
11284        '०': '0'
11285    };
11286
11287    hooks.defineLocale('ne', {
11288        months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),
11289        monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),
11290        monthsParseExact : true,
11291        weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),
11292        weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
11293        weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
11294        weekdaysParseExact : true,
11295        longDateFormat : {
11296            LT : 'Aको h:mm बजे',
11297            LTS : 'Aको h:mm:ss बजे',
11298            L : 'DD/MM/YYYY',
11299            LL : 'D MMMM YYYY',
11300            LLL : 'D MMMM YYYY, Aको h:mm बजे',
11301            LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'
11302        },
11303        preparse: function (string) {
11304            return string.replace(/[१२३४५६७८९०]/g, function (match) {
11305                return numberMap$c[match];
11306            });
11307        },
11308        postformat: function (string) {
11309            return string.replace(/\d/g, function (match) {
11310                return symbolMap$d[match];
11311            });
11312        },
vendor: 97,659 bytes, lines 11313-13793
11313        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
11314        meridiemHour : function (hour, meridiem) {
11315            if (hour === 12) {
11316                hour = 0;
11317            }
11318            if (meridiem === 'राति') {
11319                return hour < 4 ? hour : hour + 12;
11320            } else if (meridiem === 'बिहान') {
11321                return hour;
11322            } else if (meridiem === 'दिउँसो') {
11323                return hour >= 10 ? hour : hour + 12;
11324            } else if (meridiem === 'साँझ') {
11325                return hour + 12;
11326            }
11327        },
11328        meridiem : function (hour, minute, isLower) {
11329            if (hour < 3) {
11330                return 'राति';
11331            } else if (hour < 12) {
11332                return 'बिहान';
11333            } else if (hour < 16) {
11334                return 'दिउँसो';
11335            } else if (hour < 20) {
11336                return 'साँझ';
11337            } else {
11338                return 'राति';
11339            }
11340        },
11341        calendar : {
11342            sameDay : '[आज] LT',
11343            nextDay : '[भोलि] LT',
11344            nextWeek : '[आउँदो] dddd[,] LT',
11345            lastDay : '[हिजो] LT',
11346            lastWeek : '[गएको] dddd[,] LT',
11347            sameElse : 'L'
11348        },
11349        relativeTime : {
11350            future : '%sमा',
11351            past : '%s अगाडि',
11352            s : 'केही क्षण',
11353            ss : '%d सेकेण्ड',
11354            m : 'एक मिनेट',
11355            mm : '%d मिनेट',
11356            h : 'एक घण्टा',
11357            hh : '%d घण्टा',
11358            d : 'एक दिन',
11359            dd : '%d दिन',
11360            M : 'एक महिना',
11361            MM : '%d महिना',
11362            y : 'एक बर्ष',
11363            yy : '%d बर्ष'
11364        },
11365        week : {
11366            dow : 0, // Sunday is the first day of the week.
11367            doy : 6  // The week that contains Jan 6th is the first week of the year.
11368        }
11369    });
11370
11371    //! moment.js locale configuration
11372
11373    var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
11374        monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
11375
11376    var monthsParse$4 = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
11377    var monthsRegex$5 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
11378
11379    hooks.defineLocale('nl-be', {
11380        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
11381        monthsShort : function (m, format) {
11382            if (!m) {
11383                return monthsShortWithDots$1;
11384            } else if (/-MMM-/.test(format)) {
11385                return monthsShortWithoutDots$1[m.month()];
11386            } else {
11387                return monthsShortWithDots$1[m.month()];
11388            }
11389        },
11390
11391        monthsRegex: monthsRegex$5,
11392        monthsShortRegex: monthsRegex$5,
11393        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
11394        monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
11395
11396        monthsParse : monthsParse$4,
11397        longMonthsParse : monthsParse$4,
11398        shortMonthsParse : monthsParse$4,
11399
11400        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
11401        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
11402        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),
11403        weekdaysParseExact : true,
11404        longDateFormat : {
11405            LT : 'HH:mm',
11406            LTS : 'HH:mm:ss',
11407            L : 'DD/MM/YYYY',
11408            LL : 'D MMMM YYYY',
11409            LLL : 'D MMMM YYYY HH:mm',
11410            LLLL : 'dddd D MMMM YYYY HH:mm'
11411        },
11412        calendar : {
11413            sameDay: '[vandaag om] LT',
11414            nextDay: '[morgen om] LT',
11415            nextWeek: 'dddd [om] LT',
11416            lastDay: '[gisteren om] LT',
11417            lastWeek: '[afgelopen] dddd [om] LT',
11418            sameElse: 'L'
11419        },
11420        relativeTime : {
11421            future : 'over %s',
11422            past : '%s geleden',
11423            s : 'een paar seconden',
11424            ss : '%d seconden',
11425            m : 'één minuut',
11426            mm : '%d minuten',
11427            h : 'één uur',
11428            hh : '%d uur',
11429            d : 'één dag',
11430            dd : '%d dagen',
11431            M : 'één maand',
11432            MM : '%d maanden',
11433            y : 'één jaar',
11434            yy : '%d jaar'
11435        },
11436        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
11437        ordinal : function (number) {
11438            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
11439        },
11440        week : {
11441            dow : 1, // Monday is the first day of the week.
11442            doy : 4  // The week that contains Jan 4th is the first week of the year.
11443        }
11444    });
11445
11446    //! moment.js locale configuration
11447
11448    var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
11449        monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
11450
11451    var monthsParse$5 = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
11452    var monthsRegex$6 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
11453
11454    hooks.defineLocale('nl', {
11455        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
11456        monthsShort : function (m, format) {
11457            if (!m) {
11458                return monthsShortWithDots$2;
11459            } else if (/-MMM-/.test(format)) {
11460                return monthsShortWithoutDots$2[m.month()];
11461            } else {
11462                return monthsShortWithDots$2[m.month()];
11463            }
11464        },
11465
11466        monthsRegex: monthsRegex$6,
11467        monthsShortRegex: monthsRegex$6,
11468        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
11469        monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
11470
11471        monthsParse : monthsParse$5,
11472        longMonthsParse : monthsParse$5,
11473        shortMonthsParse : monthsParse$5,
11474
11475        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
11476        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
11477        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),
11478        weekdaysParseExact : true,
11479        longDateFormat : {
11480            LT : 'HH:mm',
11481            LTS : 'HH:mm:ss',
11482            L : 'DD-MM-YYYY',
11483            LL : 'D MMMM YYYY',
11484            LLL : 'D MMMM YYYY HH:mm',
11485            LLLL : 'dddd D MMMM YYYY HH:mm'
11486        },
11487        calendar : {
11488            sameDay: '[vandaag om] LT',
11489            nextDay: '[morgen om] LT',
11490            nextWeek: 'dddd [om] LT',
11491            lastDay: '[gisteren om] LT',
11492            lastWeek: '[afgelopen] dddd [om] LT',
11493            sameElse: 'L'
11494        },
11495        relativeTime : {
11496            future : 'over %s',
11497            past : '%s geleden',
11498            s : 'een paar seconden',
11499            ss : '%d seconden',
11500            m : 'één minuut',
11501            mm : '%d minuten',
11502            h : 'één uur',
11503            hh : '%d uur',
11504            d : 'één dag',
11505            dd : '%d dagen',
11506            M : 'één maand',
11507            MM : '%d maanden',
11508            y : 'één jaar',
11509            yy : '%d jaar'
11510        },
11511        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
11512        ordinal : function (number) {
11513            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
11514        },
11515        week : {
11516            dow : 1, // Monday is the first day of the week.
11517            doy : 4  // The week that contains Jan 4th is the first week of the year.
11518        }
11519    });
11520
11521    //! moment.js locale configuration
11522
11523    hooks.defineLocale('nn', {
11524        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
11525        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
11526        weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
11527        weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),
11528        weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),
11529        longDateFormat : {
11530            LT : 'HH:mm',
11531            LTS : 'HH:mm:ss',
11532            L : 'DD.MM.YYYY',
11533            LL : 'D. MMMM YYYY',
11534            LLL : 'D. MMMM YYYY [kl.] H:mm',
11535            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
11536        },
11537        calendar : {
11538            sameDay: '[I dag klokka] LT',
11539            nextDay: '[I morgon klokka] LT',
11540            nextWeek: 'dddd [klokka] LT',
11541            lastDay: '[I går klokka] LT',
11542            lastWeek: '[Føregåande] dddd [klokka] LT',
11543            sameElse: 'L'
11544        },
11545        relativeTime : {
11546            future : 'om %s',
11547            past : '%s sidan',
11548            s : 'nokre sekund',
11549            ss : '%d sekund',
11550            m : 'eit minutt',
11551            mm : '%d minutt',
11552            h : 'ein time',
11553            hh : '%d timar',
11554            d : 'ein dag',
11555            dd : '%d dagar',
11556            M : 'ein månad',
11557            MM : '%d månader',
11558            y : 'eit år',
11559            yy : '%d år'
11560        },
11561        dayOfMonthOrdinalParse: /\d{1,2}\./,
11562        ordinal : '%d.',
11563        week : {
11564            dow : 1, // Monday is the first day of the week.
11565            doy : 4  // The week that contains Jan 4th is the first week of the year.
11566        }
11567    });
11568
11569    //! moment.js locale configuration
11570
11571    var symbolMap$e = {
11572        '1': 'à©§',
11573        '2': '੨',
11574        '3': 'à©©',
11575        '4': '੪',
11576        '5': 'à©«',
11577        '6': '੬',
11578        '7': 'à©­',
11579        '8': 'à©®',
11580        '9': '੯',
11581        '0': '੦'
11582    },
11583    numberMap$d = {
11584        'à©§': '1',
11585        '੨': '2',
11586        'à©©': '3',
11587        '੪': '4',
11588        'à©«': '5',
11589        '੬': '6',
11590        'à©­': '7',
11591        'à©®': '8',
11592        '੯': '9',
11593        '੦': '0'
11594    };
11595
11596    hooks.defineLocale('pa-in', {
11597        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.
11598        months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
11599        monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
11600        weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),
11601        weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
11602        weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
11603        longDateFormat : {
11604            LT : 'A h:mm ਵਜੇ',
11605            LTS : 'A h:mm:ss ਵਜੇ',
11606            L : 'DD/MM/YYYY',
11607            LL : 'D MMMM YYYY',
11608            LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',
11609            LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'
11610        },
11611        calendar : {
11612            sameDay : '[ਅਜ] LT',
11613            nextDay : '[ਕਲ] LT',
11614            nextWeek : '[ਅਗਲਾ] dddd, LT',
11615            lastDay : '[ਕਲ] LT',
11616            lastWeek : '[ਪਿਛਲੇ] dddd, LT',
11617            sameElse : 'L'
11618        },
11619        relativeTime : {
11620            future : '%s ਵਿੱਚ',
11621            past : '%s ਪਿਛਲੇ',
11622            s : 'ਕੁਝ ਸਕਿੰਟ',
11623            ss : '%d ਸਕਿੰਟ',
11624            m : 'ਇਕ ਮਿੰਟ',
11625            mm : '%d ਮਿੰਟ',
11626            h : 'ਇੱਕ ਘੰਟਾ',
11627            hh : '%d ਘੰਟੇ',
11628            d : 'ਇੱਕ ਦਿਨ',
11629            dd : '%d ਦਿਨ',
11630            M : 'ਇੱਕ ਮਹੀਨਾ',
11631            MM : '%d ਮਹੀਨੇ',
11632            y : 'ਇੱਕ ਸਾਲ',
11633            yy : '%d ਸਾਲ'
11634        },
11635        preparse: function (string) {
11636            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
11637                return numberMap$d[match];
11638            });
11639        },
11640        postformat: function (string) {
11641            return string.replace(/\d/g, function (match) {
11642                return symbolMap$e[match];
11643            });
11644        },
11645        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
11646        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
11647        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
11648        meridiemHour : function (hour, meridiem) {
11649            if (hour === 12) {
11650                hour = 0;
11651            }
11652            if (meridiem === 'ਰਾਤ') {
11653                return hour < 4 ? hour : hour + 12;
11654            } else if (meridiem === 'ਸਵੇਰ') {
11655                return hour;
11656            } else if (meridiem === 'ਦੁਪਹਿਰ') {
11657                return hour >= 10 ? hour : hour + 12;
11658            } else if (meridiem === 'ਸ਼ਾਮ') {
11659                return hour + 12;
11660            }
11661        },
11662        meridiem : function (hour, minute, isLower) {
11663            if (hour < 4) {
11664                return 'ਰਾਤ';
11665            } else if (hour < 10) {
11666                return 'ਸਵੇਰ';
11667            } else if (hour < 17) {
11668                return 'ਦੁਪਹਿਰ';
11669            } else if (hour < 20) {
11670                return 'ਸ਼ਾਮ';
11671            } else {
11672                return 'ਰਾਤ';
11673            }
11674        },
11675        week : {
11676            dow : 0, // Sunday is the first day of the week.
11677            doy : 6  // The week that contains Jan 6th is the first week of the year.
11678        }
11679    });
11680
11681    //! moment.js locale configuration
11682
11683    var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),
11684        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');
11685    function plural$3(n) {
11686        return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);
11687    }
11688    function translate$8(number, withoutSuffix, key) {
11689        var result = number + ' ';
11690        switch (key) {
11691            case 'ss':
11692                return result + (plural$3(number) ? 'sekundy' : 'sekund');
11693            case 'm':
11694                return withoutSuffix ? 'minuta' : 'minutę';
11695            case 'mm':
11696                return result + (plural$3(number) ? 'minuty' : 'minut');
11697            case 'h':
11698                return withoutSuffix  ? 'godzina'  : 'godzinę';
11699            case 'hh':
11700                return result + (plural$3(number) ? 'godziny' : 'godzin');
11701            case 'MM':
11702                return result + (plural$3(number) ? 'miesiące' : 'miesięcy');
11703            case 'yy':
11704                return result + (plural$3(number) ? 'lata' : 'lat');
11705        }
11706    }
11707
11708    hooks.defineLocale('pl', {
11709        months : function (momentToFormat, format) {
11710            if (!momentToFormat) {
11711                return monthsNominative;
11712            } else if (format === '') {
11713                // Hack: if format empty we know this is used to generate
11714                // RegExp by moment. Give then back both valid forms of months
11715                // in RegExp ready format.
11716                return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';
11717            } else if (/D MMMM/.test(format)) {
11718                return monthsSubjective[momentToFormat.month()];
11719            } else {
11720                return monthsNominative[momentToFormat.month()];
11721            }
11722        },
11723        monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
11724        weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
11725        weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
11726        weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
11727        longDateFormat : {
11728            LT : 'HH:mm',
11729            LTS : 'HH:mm:ss',
11730            L : 'DD.MM.YYYY',
11731            LL : 'D MMMM YYYY',
11732            LLL : 'D MMMM YYYY HH:mm',
11733            LLLL : 'dddd, D MMMM YYYY HH:mm'
11734        },
11735        calendar : {
11736            sameDay: '[Dziś o] LT',
11737            nextDay: '[Jutro o] LT',
11738            nextWeek: function () {
11739                switch (this.day()) {
11740                    case 0:
11741                        return '[W niedzielę o] LT';
11742
11743                    case 2:
11744                        return '[We wtorek o] LT';
11745
11746                    case 3:
11747                        return '[W środę o] LT';
11748
11749                    case 6:
11750                        return '[W sobotę o] LT';
11751
11752                    default:
11753                        return '[W] dddd [o] LT';
11754                }
11755            },
11756            lastDay: '[Wczoraj o] LT',
11757            lastWeek: function () {
11758                switch (this.day()) {
11759                    case 0:
11760                        return '[W zeszłą niedzielę o] LT';
11761                    case 3:
11762                        return '[W zeszłą środę o] LT';
11763                    case 6:
11764                        return '[W zeszłą sobotę o] LT';
11765                    default:
11766                        return '[W zeszły] dddd [o] LT';
11767                }
11768            },
11769            sameElse: 'L'
11770        },
11771        relativeTime : {
11772            future : 'za %s',
11773            past : '%s temu',
11774            s : 'kilka sekund',
11775            ss : translate$8,
11776            m : translate$8,
11777            mm : translate$8,
11778            h : translate$8,
11779            hh : translate$8,
11780            d : '1 dzień',
11781            dd : '%d dni',
11782            M : 'miesiąc',
11783            MM : translate$8,
11784            y : 'rok',
11785            yy : translate$8
11786        },
11787        dayOfMonthOrdinalParse: /\d{1,2}\./,
11788        ordinal : '%d.',
11789        week : {
11790            dow : 1, // Monday is the first day of the week.
11791            doy : 4  // The week that contains Jan 4th is the first week of the year.
11792        }
11793    });
11794
11795    //! moment.js locale configuration
11796
11797    hooks.defineLocale('pt-br', {
11798        months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
11799        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
11800        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
11801        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
11802        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),
11803        weekdaysParseExact : true,
11804        longDateFormat : {
11805            LT : 'HH:mm',
11806            LTS : 'HH:mm:ss',
11807            L : 'DD/MM/YYYY',
11808            LL : 'D [de] MMMM [de] YYYY',
11809            LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',
11810            LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'
11811        },
11812        calendar : {
11813            sameDay: '[Hoje às] LT',
11814            nextDay: '[Amanhã às] LT',
11815            nextWeek: 'dddd [às] LT',
11816            lastDay: '[Ontem às] LT',
11817            lastWeek: function () {
11818                return (this.day() === 0 || this.day() === 6) ?
11819                    '[Último] dddd [às] LT' : // Saturday + Sunday
11820                    '[Última] dddd [às] LT'; // Monday - Friday
11821            },
11822            sameElse: 'L'
11823        },
11824        relativeTime : {
11825            future : 'em %s',
11826            past : 'há %s',
11827            s : 'poucos segundos',
11828            ss : '%d segundos',
11829            m : 'um minuto',
11830            mm : '%d minutos',
11831            h : 'uma hora',
11832            hh : '%d horas',
11833            d : 'um dia',
11834            dd : '%d dias',
11835            M : 'um mês',
11836            MM : '%d meses',
11837            y : 'um ano',
11838            yy : '%d anos'
11839        },
11840        dayOfMonthOrdinalParse: /\d{1,2}º/,
11841        ordinal : '%dº'
11842    });
11843
11844    //! moment.js locale configuration
11845
11846    hooks.defineLocale('pt', {
11847        months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
11848        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
11849        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
11850        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
11851        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),
11852        weekdaysParseExact : true,
11853        longDateFormat : {
11854            LT : 'HH:mm',
11855            LTS : 'HH:mm:ss',
11856            L : 'DD/MM/YYYY',
11857            LL : 'D [de] MMMM [de] YYYY',
11858            LLL : 'D [de] MMMM [de] YYYY HH:mm',
11859            LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'
11860        },
11861        calendar : {
11862            sameDay: '[Hoje às] LT',
11863            nextDay: '[Amanhã às] LT',
11864            nextWeek: 'dddd [às] LT',
11865            lastDay: '[Ontem às] LT',
11866            lastWeek: function () {
11867                return (this.day() === 0 || this.day() === 6) ?
11868                    '[Último] dddd [às] LT' : // Saturday + Sunday
11869                    '[Última] dddd [às] LT'; // Monday - Friday
11870            },
11871            sameElse: 'L'
11872        },
11873        relativeTime : {
11874            future : 'em %s',
11875            past : 'há %s',
11876            s : 'segundos',
11877            ss : '%d segundos',
11878            m : 'um minuto',
11879            mm : '%d minutos',
11880            h : 'uma hora',
11881            hh : '%d horas',
11882            d : 'um dia',
11883            dd : '%d dias',
11884            M : 'um mês',
11885            MM : '%d meses',
11886            y : 'um ano',
11887            yy : '%d anos'
11888        },
11889        dayOfMonthOrdinalParse: /\d{1,2}º/,
11890        ordinal : '%dº',
11891        week : {
11892            dow : 1, // Monday is the first day of the week.
11893            doy : 4  // The week that contains Jan 4th is the first week of the year.
11894        }
11895    });
11896
11897    //! moment.js locale configuration
11898
11899    function relativeTimeWithPlural$2(number, withoutSuffix, key) {
11900        var format = {
11901                'ss': 'secunde',
11902                'mm': 'minute',
11903                'hh': 'ore',
11904                'dd': 'zile',
11905                'MM': 'luni',
11906                'yy': 'ani'
11907            },
11908            separator = ' ';
11909        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
11910            separator = ' de ';
11911        }
11912        return number + separator + format[key];
11913    }
11914
11915    hooks.defineLocale('ro', {
11916        months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),
11917        monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),
11918        monthsParseExact: true,
11919        weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
11920        weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
11921        weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
11922        longDateFormat : {
11923            LT : 'H:mm',
11924            LTS : 'H:mm:ss',
11925            L : 'DD.MM.YYYY',
11926            LL : 'D MMMM YYYY',
11927            LLL : 'D MMMM YYYY H:mm',
11928            LLLL : 'dddd, D MMMM YYYY H:mm'
11929        },
11930        calendar : {
11931            sameDay: '[azi la] LT',
11932            nextDay: '[mâine la] LT',
11933            nextWeek: 'dddd [la] LT',
11934            lastDay: '[ieri la] LT',
11935            lastWeek: '[fosta] dddd [la] LT',
11936            sameElse: 'L'
11937        },
11938        relativeTime : {
11939            future : 'peste %s',
11940            past : '%s în urmă',
11941            s : 'câteva secunde',
11942            ss : relativeTimeWithPlural$2,
11943            m : 'un minut',
11944            mm : relativeTimeWithPlural$2,
11945            h : 'o oră',
11946            hh : relativeTimeWithPlural$2,
11947            d : 'o zi',
11948            dd : relativeTimeWithPlural$2,
11949            M : 'o lună',
11950            MM : relativeTimeWithPlural$2,
11951            y : 'un an',
11952            yy : relativeTimeWithPlural$2
11953        },
11954        week : {
11955            dow : 1, // Monday is the first day of the week.
11956            doy : 7  // The week that contains Jan 7th is the first week of the year.
11957        }
11958    });
11959
11960    //! moment.js locale configuration
11961
11962    function plural$4(word, num) {
11963        var forms = word.split('_');
11964        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
11965    }
11966    function relativeTimeWithPlural$3(number, withoutSuffix, key) {
11967        var format = {
11968            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
11969            'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
11970            'hh': 'час_часа_часов',
11971            'dd': 'день_дня_дней',
11972            'MM': 'месяц_месяца_месяцев',
11973            'yy': 'год_года_лет'
11974        };
11975        if (key === 'm') {
11976            return withoutSuffix ? 'минута' : 'минуту';
11977        }
11978        else {
11979            return number + ' ' + plural$4(format[key], +number);
11980        }
11981    }
11982    var monthsParse$6 = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];
11983
11984    // http://new.gramota.ru/spravka/rules/139-prop : § 103
11985    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
11986    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
11987    hooks.defineLocale('ru', {
11988        months : {
11989            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),
11990            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')
11991        },
11992        monthsShort : {
11993            // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ?
11994            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),
11995            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')
11996        },
11997        weekdays : {
11998            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
11999            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),
12000            isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/
12001        },
12002        weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
12003        weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
12004        monthsParse : monthsParse$6,
12005        longMonthsParse : monthsParse$6,
12006        shortMonthsParse : monthsParse$6,
12007
12008        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
12009        monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
12010
12011        // копия предыдущего
12012        monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
12013
12014        // полные названия с падежами
12015        monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
12016
12017        // Выражение, которое соотвествует только сокращённым формам
12018        monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
12019        longDateFormat : {
12020            LT : 'H:mm',
12021            LTS : 'H:mm:ss',
12022            L : 'DD.MM.YYYY',
12023            LL : 'D MMMM YYYY г.',
12024            LLL : 'D MMMM YYYY г., H:mm',
12025            LLLL : 'dddd, D MMMM YYYY г., H:mm'
12026        },
12027        calendar : {
12028            sameDay: '[Сегодня, в] LT',
12029            nextDay: '[Завтра, в] LT',
12030            lastDay: '[Вчера, в] LT',
12031            nextWeek: function (now) {
12032                if (now.week() !== this.week()) {
12033                    switch (this.day()) {
12034                        case 0:
12035                            return '[В следующее] dddd, [в] LT';
12036                        case 1:
12037                        case 2:
12038                        case 4:
12039                            return '[В следующий] dddd, [в] LT';
12040                        case 3:
12041                        case 5:
12042                        case 6:
12043                            return '[В следующую] dddd, [в] LT';
12044                    }
12045                } else {
12046                    if (this.day() === 2) {
12047                        return '[Во] dddd, [в] LT';
12048                    } else {
12049                        return '[В] dddd, [в] LT';
12050                    }
12051                }
12052            },
12053            lastWeek: function (now) {
12054                if (now.week() !== this.week()) {
12055                    switch (this.day()) {
12056                        case 0:
12057                            return '[В прошлое] dddd, [в] LT';
12058                        case 1:
12059                        case 2:
12060                        case 4:
12061                            return '[В прошлый] dddd, [в] LT';
12062                        case 3:
12063                        case 5:
12064                        case 6:
12065                            return '[В прошлую] dddd, [в] LT';
12066                    }
12067                } else {
12068                    if (this.day() === 2) {
12069                        return '[Во] dddd, [в] LT';
12070                    } else {
12071                        return '[В] dddd, [в] LT';
12072                    }
12073                }
12074            },
12075            sameElse: 'L'
12076        },
12077        relativeTime : {
12078            future : 'через %s',
12079            past : '%s назад',
12080            s : 'несколько секунд',
12081            ss : relativeTimeWithPlural$3,
12082            m : relativeTimeWithPlural$3,
12083            mm : relativeTimeWithPlural$3,
12084            h : 'час',
12085            hh : relativeTimeWithPlural$3,
12086            d : 'день',
12087            dd : relativeTimeWithPlural$3,
12088            M : 'месяц',
12089            MM : relativeTimeWithPlural$3,
12090            y : 'год',
12091            yy : relativeTimeWithPlural$3
12092        },
12093        meridiemParse: /ночи|утра|дня|вечера/i,
12094        isPM : function (input) {
12095            return /^(дня|вечера)$/.test(input);
12096        },
12097        meridiem : function (hour, minute, isLower) {
12098            if (hour < 4) {
12099                return 'ночи';
12100            } else if (hour < 12) {
12101                return 'утра';
12102            } else if (hour < 17) {
12103                return 'дня';
12104            } else {
12105                return 'вечера';
12106            }
12107        },
12108        dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/,
12109        ordinal: function (number, period) {
12110            switch (period) {
12111                case 'M':
12112                case 'd':
12113                case 'DDD':
12114                    return number + '-й';
12115                case 'D':
12116                    return number + '-го';
12117                case 'w':
12118                case 'W':
12119                    return number + '-я';
12120                default:
12121                    return number;
12122            }
12123        },
12124        week : {
12125            dow : 1, // Monday is the first day of the week.
12126            doy : 4  // The week that contains Jan 4th is the first week of the year.
12127        }
12128    });
12129
12130    //! moment.js locale configuration
12131
12132    var months$8 = [
12133        'جنوري',
12134        'فيبروري',
12135        'مارچ',
12136        'اپريل',
12137        'مئي',
12138        'جون',
12139        'جولاءِ',
12140        'آگسٽ',
12141        'سيپٽمبر',
12142        'آڪٽوبر',
12143        'نومبر',
12144        'ڊسمبر'
12145    ];
12146    var days$1 = [
12147        'آچر',
12148        'سومر',
12149        'اڱارو',
12150        'اربع',
12151        'خميس',
12152        'جمع',
12153        'ڇنڇر'
12154    ];
12155
12156    hooks.defineLocale('sd', {
12157        months : months$8,
12158        monthsShort : months$8,
12159        weekdays : days$1,
12160        weekdaysShort : days$1,
12161        weekdaysMin : days$1,
12162        longDateFormat : {
12163            LT : 'HH:mm',
12164            LTS : 'HH:mm:ss',
12165            L : 'DD/MM/YYYY',
12166            LL : 'D MMMM YYYY',
12167            LLL : 'D MMMM YYYY HH:mm',
12168            LLLL : 'dddd، D MMMM YYYY HH:mm'
12169        },
12170        meridiemParse: /صبح|شام/,
12171        isPM : function (input) {
12172            return 'شام' === input;
12173        },
12174        meridiem : function (hour, minute, isLower) {
12175            if (hour < 12) {
12176                return 'صبح';
12177            }
12178            return 'شام';
12179        },
12180        calendar : {
12181            sameDay : '[اڄ] LT',
12182            nextDay : '[سڀاڻي] LT',
12183            nextWeek : 'dddd [اڳين هفتي تي] LT',
12184            lastDay : '[ڪالهه] LT',
12185            lastWeek : '[گزريل هفتي] dddd [تي] LT',
12186            sameElse : 'L'
12187        },
12188        relativeTime : {
12189            future : '%s پوء',
12190            past : '%s اڳ',
12191            s : 'چند سيڪنڊ',
12192            ss : '%d سيڪنڊ',
12193            m : 'هڪ منٽ',
12194            mm : '%d منٽ',
12195            h : 'هڪ ڪلاڪ',
12196            hh : '%d ڪلاڪ',
12197            d : 'هڪ ڏينهن',
12198            dd : '%d ڏينهن',
12199            M : 'هڪ مهينو',
12200            MM : '%d مهينا',
12201            y : 'هڪ سال',
12202            yy : '%d سال'
12203        },
12204        preparse: function (string) {
12205            return string.replace(/،/g, ',');
12206        },
12207        postformat: function (string) {
12208            return string.replace(/,/g, '،');
12209        },
12210        week : {
12211            dow : 1, // Monday is the first day of the week.
12212            doy : 4  // The week that contains Jan 4th is the first week of the year.
12213        }
12214    });
12215
12216    //! moment.js locale configuration
12217
12218    hooks.defineLocale('se', {
12219        months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),
12220        monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),
12221        weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),
12222        weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
12223        weekdaysMin : 's_v_m_g_d_b_L'.split('_'),
12224        longDateFormat : {
12225            LT : 'HH:mm',
12226            LTS : 'HH:mm:ss',
12227            L : 'DD.MM.YYYY',
12228            LL : 'MMMM D. [b.] YYYY',
12229            LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',
12230            LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'
12231        },
12232        calendar : {
12233            sameDay: '[otne ti] LT',
12234            nextDay: '[ihttin ti] LT',
12235            nextWeek: 'dddd [ti] LT',
12236            lastDay: '[ikte ti] LT',
12237            lastWeek: '[ovddit] dddd [ti] LT',
12238            sameElse: 'L'
12239        },
12240        relativeTime : {
12241            future : '%s geažes',
12242            past : 'maŋit %s',
12243            s : 'moadde sekunddat',
12244            ss: '%d sekunddat',
12245            m : 'okta minuhta',
12246            mm : '%d minuhtat',
12247            h : 'okta diimmu',
12248            hh : '%d diimmut',
12249            d : 'okta beaivi',
12250            dd : '%d beaivvit',
12251            M : 'okta mánnu',
12252            MM : '%d mánut',
12253            y : 'okta jahki',
12254            yy : '%d jagit'
12255        },
12256        dayOfMonthOrdinalParse: /\d{1,2}\./,
12257        ordinal : '%d.',
12258        week : {
12259            dow : 1, // Monday is the first day of the week.
12260            doy : 4  // The week that contains Jan 4th is the first week of the year.
12261        }
12262    });
12263
12264    //! moment.js locale configuration
12265
12266    /*jshint -W100*/
12267    hooks.defineLocale('si', {
12268        months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),
12269        monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),
12270        weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),
12271        weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
12272        weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
12273        weekdaysParseExact : true,
12274        longDateFormat : {
12275            LT : 'a h:mm',
12276            LTS : 'a h:mm:ss',
12277            L : 'YYYY/MM/DD',
12278            LL : 'YYYY MMMM D',
12279            LLL : 'YYYY MMMM D, a h:mm',
12280            LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'
12281        },
12282        calendar : {
12283            sameDay : '[අද] LT[ට]',
12284            nextDay : '[හෙට] LT[ට]',
12285            nextWeek : 'dddd LT[à¶§]',
12286            lastDay : '[ඊයේ] LT[ට]',
12287            lastWeek : '[පසුගිය] dddd LT[ට]',
12288            sameElse : 'L'
12289        },
12290        relativeTime : {
12291            future : '%sකින්',
12292            past : '%sකට පෙර',
12293            s : 'තත්පර කිහිපය',
12294            ss : 'තත්පර %d',
12295            m : 'මිනිත්තුව',
12296            mm : 'මිනිත්තු %d',
12297            h : 'පැය',
12298            hh : 'පැය %d',
12299            d : 'දිනය',
12300            dd : 'දින %d',
12301            M : 'මාසය',
12302            MM : 'මාස %d',
12303            y : 'වසර',
12304            yy : 'වසර %d'
12305        },
12306        dayOfMonthOrdinalParse: /\d{1,2} වැනි/,
12307        ordinal : function (number) {
12308            return number + ' වැනි';
12309        },
12310        meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
12311        isPM : function (input) {
12312            return input === 'ප.ව.' || input === 'පස් වරු';
12313        },
12314        meridiem : function (hours, minutes, isLower) {
12315            if (hours > 11) {
12316                return isLower ? 'ප.ව.' : 'පස් වරු';
12317            } else {
12318                return isLower ? 'පෙ.ව.' : 'පෙර වරු';
12319            }
12320        }
12321    });
12322
12323    //! moment.js locale configuration
12324
12325    var months$9 = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),
12326        monthsShort$6 = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
12327    function plural$5(n) {
12328        return (n > 1) && (n < 5);
12329    }
12330    function translate$9(number, withoutSuffix, key, isFuture) {
12331        var result = number + ' ';
12332        switch (key) {
12333            case 's':  // a few seconds / in a few seconds / a few seconds ago
12334                return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
12335            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
12336                if (withoutSuffix || isFuture) {
12337                    return result + (plural$5(number) ? 'sekundy' : 'sekúnd');
12338                } else {
12339                    return result + 'sekundami';
12340                }
12341                break;
12342            case 'm':  // a minute / in a minute / a minute ago
12343                return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
12344            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
12345                if (withoutSuffix || isFuture) {
12346                    return result + (plural$5(number) ? 'minúty' : 'minút');
12347                } else {
12348                    return result + 'minútami';
12349                }
12350                break;
12351            case 'h':  // an hour / in an hour / an hour ago
12352                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
12353            case 'hh': // 9 hours / in 9 hours / 9 hours ago
12354                if (withoutSuffix || isFuture) {
12355                    return result + (plural$5(number) ? 'hodiny' : 'hodín');
12356                } else {
12357                    return result + 'hodinami';
12358                }
12359                break;
12360            case 'd':  // a day / in a day / a day ago
12361                return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
12362            case 'dd': // 9 days / in 9 days / 9 days ago
12363                if (withoutSuffix || isFuture) {
12364                    return result + (plural$5(number) ? 'dni' : 'dní');
12365                } else {
12366                    return result + 'dňami';
12367                }
12368                break;
12369            case 'M':  // a month / in a month / a month ago
12370                return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
12371            case 'MM': // 9 months / in 9 months / 9 months ago
12372                if (withoutSuffix || isFuture) {
12373                    return result + (plural$5(number) ? 'mesiace' : 'mesiacov');
12374                } else {
12375                    return result + 'mesiacmi';
12376                }
12377                break;
12378            case 'y':  // a year / in a year / a year ago
12379                return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
12380            case 'yy': // 9 years / in 9 years / 9 years ago
12381                if (withoutSuffix || isFuture) {
12382                    return result + (plural$5(number) ? 'roky' : 'rokov');
12383                } else {
12384                    return result + 'rokmi';
12385                }
12386                break;
12387        }
12388    }
12389
12390    hooks.defineLocale('sk', {
12391        months : months$9,
12392        monthsShort : monthsShort$6,
12393        weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
12394        weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),
12395        weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),
12396        longDateFormat : {
12397            LT: 'H:mm',
12398            LTS : 'H:mm:ss',
12399            L : 'DD.MM.YYYY',
12400            LL : 'D. MMMM YYYY',
12401            LLL : 'D. MMMM YYYY H:mm',
12402            LLLL : 'dddd D. MMMM YYYY H:mm'
12403        },
12404        calendar : {
12405            sameDay: '[dnes o] LT',
12406            nextDay: '[zajtra o] LT',
12407            nextWeek: function () {
12408                switch (this.day()) {
12409                    case 0:
12410                        return '[v nedeľu o] LT';
12411                    case 1:
12412                    case 2:
12413                        return '[v] dddd [o] LT';
12414                    case 3:
12415                        return '[v stredu o] LT';
12416                    case 4:
12417                        return '[vo štvrtok o] LT';
12418                    case 5:
12419                        return '[v piatok o] LT';
12420                    case 6:
12421                        return '[v sobotu o] LT';
12422                }
12423            },
12424            lastDay: '[včera o] LT',
12425            lastWeek: function () {
12426                switch (this.day()) {
12427                    case 0:
12428                        return '[minulú nedeľu o] LT';
12429                    case 1:
12430                    case 2:
12431                        return '[minulý] dddd [o] LT';
12432                    case 3:
12433                        return '[minulú stredu o] LT';
12434                    case 4:
12435                    case 5:
12436                        return '[minulý] dddd [o] LT';
12437                    case 6:
12438                        return '[minulú sobotu o] LT';
12439                }
12440            },
12441            sameElse: 'L'
12442        },
12443        relativeTime : {
12444            future : 'za %s',
12445            past : 'pred %s',
12446            s : translate$9,
12447            ss : translate$9,
12448            m : translate$9,
12449            mm : translate$9,
12450            h : translate$9,
12451            hh : translate$9,
12452            d : translate$9,
12453            dd : translate$9,
12454            M : translate$9,
12455            MM : translate$9,
12456            y : translate$9,
12457            yy : translate$9
12458        },
12459        dayOfMonthOrdinalParse: /\d{1,2}\./,
12460        ordinal : '%d.',
12461        week : {
12462            dow : 1, // Monday is the first day of the week.
12463            doy : 4  // The week that contains Jan 4th is the first week of the year.
12464        }
12465    });
12466
12467    //! moment.js locale configuration
12468
12469    function processRelativeTime$6(number, withoutSuffix, key, isFuture) {
12470        var result = number + ' ';
12471        switch (key) {
12472            case 's':
12473                return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';
12474            case 'ss':
12475                if (number === 1) {
12476                    result += withoutSuffix ? 'sekundo' : 'sekundi';
12477                } else if (number === 2) {
12478                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';
12479                } else if (number < 5) {
12480                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';
12481                } else {
12482                    result += 'sekund';
12483                }
12484                return result;
12485            case 'm':
12486                return withoutSuffix ? 'ena minuta' : 'eno minuto';
12487            case 'mm':
12488                if (number === 1) {
12489                    result += withoutSuffix ? 'minuta' : 'minuto';
12490                } else if (number === 2) {
12491                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
12492                } else if (number < 5) {
12493                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';
12494                } else {
12495                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';
12496                }
12497                return result;
12498            case 'h':
12499                return withoutSuffix ? 'ena ura' : 'eno uro';
12500            case 'hh':
12501                if (number === 1) {
12502                    result += withoutSuffix ? 'ura' : 'uro';
12503                } else if (number === 2) {
12504                    result += withoutSuffix || isFuture ? 'uri' : 'urama';
12505                } else if (number < 5) {
12506                    result += withoutSuffix || isFuture ? 'ure' : 'urami';
12507                } else {
12508                    result += withoutSuffix || isFuture ? 'ur' : 'urami';
12509                }
12510                return result;
12511            case 'd':
12512                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
12513            case 'dd':
12514                if (number === 1) {
12515                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';
12516                } else if (number === 2) {
12517                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
12518                } else {
12519                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
12520                }
12521                return result;
12522            case 'M':
12523                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
12524            case 'MM':
12525                if (number === 1) {
12526                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
12527                } else if (number === 2) {
12528                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
12529                } else if (number < 5) {
12530                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
12531                } else {
12532                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
12533                }
12534                return result;
12535            case 'y':
12536                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
12537            case 'yy':
12538                if (number === 1) {
12539                    result += withoutSuffix || isFuture ? 'leto' : 'letom';
12540                } else if (number === 2) {
12541                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';
12542                } else if (number < 5) {
12543                    result += withoutSuffix || isFuture ? 'leta' : 'leti';
12544                } else {
12545                    result += withoutSuffix || isFuture ? 'let' : 'leti';
12546                }
12547                return result;
12548        }
12549    }
12550
12551    hooks.defineLocale('sl', {
12552        months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),
12553        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
12554        monthsParseExact: true,
12555        weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
12556        weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
12557        weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),
12558        weekdaysParseExact : true,
12559        longDateFormat : {
12560            LT : 'H:mm',
12561            LTS : 'H:mm:ss',
12562            L : 'DD.MM.YYYY',
12563            LL : 'D. MMMM YYYY',
12564            LLL : 'D. MMMM YYYY H:mm',
12565            LLLL : 'dddd, D. MMMM YYYY H:mm'
12566        },
12567        calendar : {
12568            sameDay  : '[danes ob] LT',
12569            nextDay  : '[jutri ob] LT',
12570
12571            nextWeek : function () {
12572                switch (this.day()) {
12573                    case 0:
12574                        return '[v] [nedeljo] [ob] LT';
12575                    case 3:
12576                        return '[v] [sredo] [ob] LT';
12577                    case 6:
12578                        return '[v] [soboto] [ob] LT';
12579                    case 1:
12580                    case 2:
12581                    case 4:
12582                    case 5:
12583                        return '[v] dddd [ob] LT';
12584                }
12585            },
12586            lastDay  : '[včeraj ob] LT',
12587            lastWeek : function () {
12588                switch (this.day()) {
12589                    case 0:
12590                        return '[prejšnjo] [nedeljo] [ob] LT';
12591                    case 3:
12592                        return '[prejšnjo] [sredo] [ob] LT';
12593                    case 6:
12594                        return '[prejšnjo] [soboto] [ob] LT';
12595                    case 1:
12596                    case 2:
12597                    case 4:
12598                    case 5:
12599                        return '[prejšnji] dddd [ob] LT';
12600                }
12601            },
12602            sameElse : 'L'
12603        },
12604        relativeTime : {
12605            future : 'čez %s',
12606            past   : 'pred %s',
12607            s      : processRelativeTime$6,
12608            ss     : processRelativeTime$6,
12609            m      : processRelativeTime$6,
12610            mm     : processRelativeTime$6,
12611            h      : processRelativeTime$6,
12612            hh     : processRelativeTime$6,
12613            d      : processRelativeTime$6,
12614            dd     : processRelativeTime$6,
12615            M      : processRelativeTime$6,
12616            MM     : processRelativeTime$6,
12617            y      : processRelativeTime$6,
12618            yy     : processRelativeTime$6
12619        },
12620        dayOfMonthOrdinalParse: /\d{1,2}\./,
12621        ordinal : '%d.',
12622        week : {
12623            dow : 1, // Monday is the first day of the week.
12624            doy : 7  // The week that contains Jan 7th is the first week of the year.
12625        }
12626    });
12627
12628    //! moment.js locale configuration
12629
12630    hooks.defineLocale('sq', {
12631        months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),
12632        monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
12633        weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),
12634        weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
12635        weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),
12636        weekdaysParseExact : true,
12637        meridiemParse: /PD|MD/,
12638        isPM: function (input) {
12639            return input.charAt(0) === 'M';
12640        },
12641        meridiem : function (hours, minutes, isLower) {
12642            return hours < 12 ? 'PD' : 'MD';
12643        },
12644        longDateFormat : {
12645            LT : 'HH:mm',
12646            LTS : 'HH:mm:ss',
12647            L : 'DD/MM/YYYY',
12648            LL : 'D MMMM YYYY',
12649            LLL : 'D MMMM YYYY HH:mm',
12650            LLLL : 'dddd, D MMMM YYYY HH:mm'
12651        },
12652        calendar : {
12653            sameDay : '[Sot në] LT',
12654            nextDay : '[Nesër në] LT',
12655            nextWeek : 'dddd [në] LT',
12656            lastDay : '[Dje në] LT',
12657            lastWeek : 'dddd [e kaluar në] LT',
12658            sameElse : 'L'
12659        },
12660        relativeTime : {
12661            future : 'në %s',
12662            past : '%s më parë',
12663            s : 'disa sekonda',
12664            ss : '%d sekonda',
12665            m : 'një minutë',
12666            mm : '%d minuta',
12667            h : 'një orë',
12668            hh : '%d orë',
12669            d : 'një ditë',
12670            dd : '%d ditë',
12671            M : 'një muaj',
12672            MM : '%d muaj',
12673            y : 'një vit',
12674            yy : '%d vite'
12675        },
12676        dayOfMonthOrdinalParse: /\d{1,2}\./,
12677        ordinal : '%d.',
12678        week : {
12679            dow : 1, // Monday is the first day of the week.
12680            doy : 4  // The week that contains Jan 4th is the first week of the year.
12681        }
12682    });
12683
12684    //! moment.js locale configuration
12685
12686    var translator$1 = {
12687        words: { //Different grammatical cases
12688            ss: ['секунда', 'секунде', 'секунди'],
12689            m: ['један минут', 'једне минуте'],
12690            mm: ['минут', 'минуте', 'минута'],
12691            h: ['један сат', 'једног сата'],
12692            hh: ['сат', 'сата', 'сати'],
12693            dd: ['дан', 'дана', 'дана'],
12694            MM: ['месец', 'месеца', 'месеци'],
12695            yy: ['година', 'године', 'година']
12696        },
12697        correctGrammaticalCase: function (number, wordKey) {
12698            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
12699        },
12700        translate: function (number, withoutSuffix, key) {
12701            var wordKey = translator$1.words[key];
12702            if (key.length === 1) {
12703                return withoutSuffix ? wordKey[0] : wordKey[1];
12704            } else {
12705                return number + ' ' + translator$1.correctGrammaticalCase(number, wordKey);
12706            }
12707        }
12708    };
12709
12710    hooks.defineLocale('sr-cyrl', {
12711        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),
12712        monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),
12713        monthsParseExact: true,
12714        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
12715        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
12716        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
12717        weekdaysParseExact : true,
12718        longDateFormat: {
12719            LT: 'H:mm',
12720            LTS : 'H:mm:ss',
12721            L: 'DD.MM.YYYY',
12722            LL: 'D. MMMM YYYY',
12723            LLL: 'D. MMMM YYYY H:mm',
12724            LLLL: 'dddd, D. MMMM YYYY H:mm'
12725        },
12726        calendar: {
12727            sameDay: '[данас у] LT',
12728            nextDay: '[сутра у] LT',
12729            nextWeek: function () {
12730                switch (this.day()) {
12731                    case 0:
12732                        return '[у] [недељу] [у] LT';
12733                    case 3:
12734                        return '[у] [среду] [у] LT';
12735                    case 6:
12736                        return '[у] [суботу] [у] LT';
12737                    case 1:
12738                    case 2:
12739                    case 4:
12740                    case 5:
12741                        return '[у] dddd [у] LT';
12742                }
12743            },
12744            lastDay  : '[јуче у] LT',
12745            lastWeek : function () {
12746                var lastWeekDays = [
12747                    '[прошле] [недеље] [у] LT',
12748                    '[прошлог] [понедељка] [у] LT',
12749                    '[прошлог] [уторка] [у] LT',
12750                    '[прошле] [среде] [у] LT',
12751                    '[прошлог] [четвртка] [у] LT',
12752                    '[прошлог] [петка] [у] LT',
12753                    '[прошле] [суботе] [у] LT'
12754                ];
12755                return lastWeekDays[this.day()];
12756            },
12757            sameElse : 'L'
12758        },
12759        relativeTime : {
12760            future : 'за %s',
12761            past   : 'пре %s',
12762            s      : 'неколико секунди',
12763            ss     : translator$1.translate,
12764            m      : translator$1.translate,
12765            mm     : translator$1.translate,
12766            h      : translator$1.translate,
12767            hh     : translator$1.translate,
12768            d      : 'дан',
12769            dd     : translator$1.translate,
12770            M      : 'месец',
12771            MM     : translator$1.translate,
12772            y      : 'годину',
12773            yy     : translator$1.translate
12774        },
12775        dayOfMonthOrdinalParse: /\d{1,2}\./,
12776        ordinal : '%d.',
12777        week : {
12778            dow : 1, // Monday is the first day of the week.
12779            doy : 7  // The week that contains Jan 7th is the first week of the year.
12780        }
12781    });
12782
12783    //! moment.js locale configuration
12784
12785    var translator$2 = {
12786        words: { //Different grammatical cases
12787            ss: ['sekunda', 'sekunde', 'sekundi'],
12788            m: ['jedan minut', 'jedne minute'],
12789            mm: ['minut', 'minute', 'minuta'],
12790            h: ['jedan sat', 'jednog sata'],
12791            hh: ['sat', 'sata', 'sati'],
12792            dd: ['dan', 'dana', 'dana'],
12793            MM: ['mesec', 'meseca', 'meseci'],
12794            yy: ['godina', 'godine', 'godina']
12795        },
12796        correctGrammaticalCase: function (number, wordKey) {
12797            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
12798        },
12799        translate: function (number, withoutSuffix, key) {
12800            var wordKey = translator$2.words[key];
12801            if (key.length === 1) {
12802                return withoutSuffix ? wordKey[0] : wordKey[1];
12803            } else {
12804                return number + ' ' + translator$2.correctGrammaticalCase(number, wordKey);
12805            }
12806        }
12807    };
12808
12809    hooks.defineLocale('sr', {
12810        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
12811        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
12812        monthsParseExact: true,
12813        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),
12814        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
12815        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
12816        weekdaysParseExact : true,
12817        longDateFormat: {
12818            LT: 'H:mm',
12819            LTS : 'H:mm:ss',
12820            L: 'DD.MM.YYYY',
12821            LL: 'D. MMMM YYYY',
12822            LLL: 'D. MMMM YYYY H:mm',
12823            LLLL: 'dddd, D. MMMM YYYY H:mm'
12824        },
12825        calendar: {
12826            sameDay: '[danas u] LT',
12827            nextDay: '[sutra u] LT',
12828            nextWeek: function () {
12829                switch (this.day()) {
12830                    case 0:
12831                        return '[u] [nedelju] [u] LT';
12832                    case 3:
12833                        return '[u] [sredu] [u] LT';
12834                    case 6:
12835                        return '[u] [subotu] [u] LT';
12836                    case 1:
12837                    case 2:
12838                    case 4:
12839                    case 5:
12840                        return '[u] dddd [u] LT';
12841                }
12842            },
12843            lastDay  : '[juče u] LT',
12844            lastWeek : function () {
12845                var lastWeekDays = [
12846                    '[prošle] [nedelje] [u] LT',
12847                    '[prošlog] [ponedeljka] [u] LT',
12848                    '[prošlog] [utorka] [u] LT',
12849                    '[prošle] [srede] [u] LT',
12850                    '[prošlog] [četvrtka] [u] LT',
12851                    '[prošlog] [petka] [u] LT',
12852                    '[prošle] [subote] [u] LT'
12853                ];
12854                return lastWeekDays[this.day()];
12855            },
12856            sameElse : 'L'
12857        },
12858        relativeTime : {
12859            future : 'za %s',
12860            past   : 'pre %s',
12861            s      : 'nekoliko sekundi',
12862            ss     : translator$2.translate,
12863            m      : translator$2.translate,
12864            mm     : translator$2.translate,
12865            h      : translator$2.translate,
12866            hh     : translator$2.translate,
12867            d      : 'dan',
12868            dd     : translator$2.translate,
12869            M      : 'mesec',
12870            MM     : translator$2.translate,
12871            y      : 'godinu',
12872            yy     : translator$2.translate
12873        },
12874        dayOfMonthOrdinalParse: /\d{1,2}\./,
12875        ordinal : '%d.',
12876        week : {
12877            dow : 1, // Monday is the first day of the week.
12878            doy : 7  // The week that contains Jan 7th is the first week of the year.
12879        }
12880    });
12881
12882    //! moment.js locale configuration
12883
12884    hooks.defineLocale('ss', {
12885        months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'),
12886        monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
12887        weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),
12888        weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
12889        weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
12890        weekdaysParseExact : true,
12891        longDateFormat : {
12892            LT : 'h:mm A',
12893            LTS : 'h:mm:ss A',
12894            L : 'DD/MM/YYYY',
12895            LL : 'D MMMM YYYY',
12896            LLL : 'D MMMM YYYY h:mm A',
12897            LLLL : 'dddd, D MMMM YYYY h:mm A'
12898        },
12899        calendar : {
12900            sameDay : '[Namuhla nga] LT',
12901            nextDay : '[Kusasa nga] LT',
12902            nextWeek : 'dddd [nga] LT',
12903            lastDay : '[Itolo nga] LT',
12904            lastWeek : 'dddd [leliphelile] [nga] LT',
12905            sameElse : 'L'
12906        },
12907        relativeTime : {
12908            future : 'nga %s',
12909            past : 'wenteka nga %s',
12910            s : 'emizuzwana lomcane',
12911            ss : '%d mzuzwana',
12912            m : 'umzuzu',
12913            mm : '%d emizuzu',
12914            h : 'lihora',
12915            hh : '%d emahora',
12916            d : 'lilanga',
12917            dd : '%d emalanga',
12918            M : 'inyanga',
12919            MM : '%d tinyanga',
12920            y : 'umnyaka',
12921            yy : '%d iminyaka'
12922        },
12923        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
12924        meridiem : function (hours, minutes, isLower) {
12925            if (hours < 11) {
12926                return 'ekuseni';
12927            } else if (hours < 15) {
12928                return 'emini';
12929            } else if (hours < 19) {
12930                return 'entsambama';
12931            } else {
12932                return 'ebusuku';
12933            }
12934        },
12935        meridiemHour : function (hour, meridiem) {
12936            if (hour === 12) {
12937                hour = 0;
12938            }
12939            if (meridiem === 'ekuseni') {
12940                return hour;
12941            } else if (meridiem === 'emini') {
12942                return hour >= 11 ? hour : hour + 12;
12943            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
12944                if (hour === 0) {
12945                    return 0;
12946                }
12947                return hour + 12;
12948            }
12949        },
12950        dayOfMonthOrdinalParse: /\d{1,2}/,
12951        ordinal : '%d',
12952        week : {
12953            dow : 1, // Monday is the first day of the week.
12954            doy : 4  // The week that contains Jan 4th is the first week of the year.
12955        }
12956    });
12957
12958    //! moment.js locale configuration
12959
12960    hooks.defineLocale('sv', {
12961        months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),
12962        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
12963        weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
12964        weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
12965        weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),
12966        longDateFormat : {
12967            LT : 'HH:mm',
12968            LTS : 'HH:mm:ss',
12969            L : 'YYYY-MM-DD',
12970            LL : 'D MMMM YYYY',
12971            LLL : 'D MMMM YYYY [kl.] HH:mm',
12972            LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',
12973            lll : 'D MMM YYYY HH:mm',
12974            llll : 'ddd D MMM YYYY HH:mm'
12975        },
12976        calendar : {
12977            sameDay: '[Idag] LT',
12978            nextDay: '[Imorgon] LT',
12979            lastDay: '[Igår] LT',
12980            nextWeek: '[PÃ¥] dddd LT',
12981            lastWeek: '[I] dddd[s] LT',
12982            sameElse: 'L'
12983        },
12984        relativeTime : {
12985            future : 'om %s',
12986            past : 'för %s sedan',
12987            s : 'några sekunder',
12988            ss : '%d sekunder',
12989            m : 'en minut',
12990            mm : '%d minuter',
12991            h : 'en timme',
12992            hh : '%d timmar',
12993            d : 'en dag',
12994            dd : '%d dagar',
12995            M : 'en månad',
12996            MM : '%d månader',
12997            y : 'ett år',
12998            yy : '%d år'
12999        },
13000        dayOfMonthOrdinalParse: /\d{1,2}(e|a)/,
13001        ordinal : function (number) {
13002            var b = number % 10,
13003                output = (~~(number % 100 / 10) === 1) ? 'e' :
13004                (b === 1) ? 'a' :
13005                (b === 2) ? 'a' :
13006                (b === 3) ? 'e' : 'e';
13007            return number + output;
13008        },
13009        week : {
13010            dow : 1, // Monday is the first day of the week.
13011            doy : 4  // The week that contains Jan 4th is the first week of the year.
13012        }
13013    });
13014
13015    //! moment.js locale configuration
13016
13017    hooks.defineLocale('sw', {
13018        months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),
13019        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
13020        weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),
13021        weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
13022        weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
13023        weekdaysParseExact : true,
13024        longDateFormat : {
13025            LT : 'HH:mm',
13026            LTS : 'HH:mm:ss',
13027            L : 'DD.MM.YYYY',
13028            LL : 'D MMMM YYYY',
13029            LLL : 'D MMMM YYYY HH:mm',
13030            LLLL : 'dddd, D MMMM YYYY HH:mm'
13031        },
13032        calendar : {
13033            sameDay : '[leo saa] LT',
13034            nextDay : '[kesho saa] LT',
13035            nextWeek : '[wiki ijayo] dddd [saat] LT',
13036            lastDay : '[jana] LT',
13037            lastWeek : '[wiki iliyopita] dddd [saat] LT',
13038            sameElse : 'L'
13039        },
13040        relativeTime : {
13041            future : '%s baadaye',
13042            past : 'tokea %s',
13043            s : 'hivi punde',
13044            ss : 'sekunde %d',
13045            m : 'dakika moja',
13046            mm : 'dakika %d',
13047            h : 'saa limoja',
13048            hh : 'masaa %d',
13049            d : 'siku moja',
13050            dd : 'masiku %d',
13051            M : 'mwezi mmoja',
13052            MM : 'miezi %d',
13053            y : 'mwaka mmoja',
13054            yy : 'miaka %d'
13055        },
13056        week : {
13057            dow : 1, // Monday is the first day of the week.
13058            doy : 7  // The week that contains Jan 7th is the first week of the year.
13059        }
13060    });
13061
13062    //! moment.js locale configuration
13063
13064    var symbolMap$f = {
13065        '1': '௧',
13066        '2': '௨',
13067        '3': '௩',
13068        '4': '௪',
13069        '5': '௫',
13070        '6': '௬',
13071        '7': '௭',
13072        '8': '௮',
13073        '9': '௯',
13074        '0': '௦'
13075    }, numberMap$e = {
13076        '௧': '1',
13077        '௨': '2',
13078        '௩': '3',
13079        '௪': '4',
13080        '௫': '5',
13081        '௬': '6',
13082        '௭': '7',
13083        '௮': '8',
13084        '௯': '9',
13085        '௦': '0'
13086    };
13087
13088    hooks.defineLocale('ta', {
13089        months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
13090        monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
13091        weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),
13092        weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),
13093        weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
13094        longDateFormat : {
13095            LT : 'HH:mm',
13096            LTS : 'HH:mm:ss',
13097            L : 'DD/MM/YYYY',
13098            LL : 'D MMMM YYYY',
13099            LLL : 'D MMMM YYYY, HH:mm',
13100            LLLL : 'dddd, D MMMM YYYY, HH:mm'
13101        },
13102        calendar : {
13103            sameDay : '[இன்று] LT',
13104            nextDay : '[நாளை] LT',
13105            nextWeek : 'dddd, LT',
13106            lastDay : '[நேற்று] LT',
13107            lastWeek : '[கடந்த வாரம்] dddd, LT',
13108            sameElse : 'L'
13109        },
13110        relativeTime : {
13111            future : '%s இல்',
13112            past : '%s முன்',
13113            s : 'ஒரு சில விநாடிகள்',
13114            ss : '%d விநாடிகள்',
13115            m : 'ஒரு நிமிடம்',
13116            mm : '%d நிமிடங்கள்',
13117            h : 'ஒரு மணி நேரம்',
13118            hh : '%d மணி நேரம்',
13119            d : 'ஒரு நாள்',
13120            dd : '%d நாட்கள்',
13121            M : 'ஒரு மாதம்',
13122            MM : '%d மாதங்கள்',
13123            y : 'ஒரு வருடம்',
13124            yy : '%d ஆண்டுகள்'
13125        },
13126        dayOfMonthOrdinalParse: /\d{1,2}வது/,
13127        ordinal : function (number) {
13128            return number + 'வது';
13129        },
13130        preparse: function (string) {
13131            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
13132                return numberMap$e[match];
13133            });
13134        },
13135        postformat: function (string) {
13136            return string.replace(/\d/g, function (match) {
13137                return symbolMap$f[match];
13138            });
13139        },
13140        // refer http://ta.wikipedia.org/s/1er1
13141        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
13142        meridiem : function (hour, minute, isLower) {
13143            if (hour < 2) {
13144                return ' யாமம்';
13145            } else if (hour < 6) {
13146                return ' வைகறை';  // வைகறை
13147            } else if (hour < 10) {
13148                return ' காலை'; // காலை
13149            } else if (hour < 14) {
13150                return ' நண்பகல்'; // நண்பகல்
13151            } else if (hour < 18) {
13152                return ' எற்பாடு'; // எற்பாடு
13153            } else if (hour < 22) {
13154                return ' மாலை'; // மாலை
13155            } else {
13156                return ' யாமம்';
13157            }
13158        },
13159        meridiemHour : function (hour, meridiem) {
13160            if (hour === 12) {
13161                hour = 0;
13162            }
13163            if (meridiem === 'யாமம்') {
13164                return hour < 2 ? hour : hour + 12;
13165            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {
13166                return hour;
13167            } else if (meridiem === 'நண்பகல்') {
13168                return hour >= 10 ? hour : hour + 12;
13169            } else {
13170                return hour + 12;
13171            }
13172        },
13173        week : {
13174            dow : 0, // Sunday is the first day of the week.
13175            doy : 6  // The week that contains Jan 6th is the first week of the year.
13176        }
13177    });
13178
13179    //! moment.js locale configuration
13180
13181    hooks.defineLocale('te', {
13182        months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),
13183        monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),
13184        monthsParseExact : true,
13185        weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),
13186        weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
13187        weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
13188        longDateFormat : {
13189            LT : 'A h:mm',
13190            LTS : 'A h:mm:ss',
13191            L : 'DD/MM/YYYY',
13192            LL : 'D MMMM YYYY',
13193            LLL : 'D MMMM YYYY, A h:mm',
13194            LLLL : 'dddd, D MMMM YYYY, A h:mm'
13195        },
13196        calendar : {
13197            sameDay : '[నేడు] LT',
13198            nextDay : '[రేపు] LT',
13199            nextWeek : 'dddd, LT',
13200            lastDay : '[నిన్న] LT',
13201            lastWeek : '[గత] dddd, LT',
13202            sameElse : 'L'
13203        },
13204        relativeTime : {
13205            future : '%s లో',
13206            past : '%s క్రితం',
13207            s : 'కొన్ని క్షణాలు',
13208            ss : '%d సెకన్లు',
13209            m : 'ఒక నిమిషం',
13210            mm : '%d నిమిషాలు',
13211            h : 'ఒక గంట',
13212            hh : '%d గంటలు',
13213            d : 'ఒక రోజు',
13214            dd : '%d రోజులు',
13215            M : 'ఒక నెల',
13216            MM : '%d నెలలు',
13217            y : 'ఒక సంవత్సరం',
13218            yy : '%d సంవత్సరాలు'
13219        },
13220        dayOfMonthOrdinalParse : /\d{1,2}à°µ/,
13221        ordinal : '%dà°µ',
13222        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
13223        meridiemHour : function (hour, meridiem) {
13224            if (hour === 12) {
13225                hour = 0;
13226            }
13227            if (meridiem === 'రాత్రి') {
13228                return hour < 4 ? hour : hour + 12;
13229            } else if (meridiem === 'ఉదయం') {
13230                return hour;
13231            } else if (meridiem === 'మధ్యాహ్నం') {
13232                return hour >= 10 ? hour : hour + 12;
13233            } else if (meridiem === 'సాయంత్రం') {
13234                return hour + 12;
13235            }
13236        },
13237        meridiem : function (hour, minute, isLower) {
13238            if (hour < 4) {
13239                return 'రాత్రి';
13240            } else if (hour < 10) {
13241                return 'ఉదయం';
13242            } else if (hour < 17) {
13243                return 'మధ్యాహ్నం';
13244            } else if (hour < 20) {
13245                return 'సాయంత్రం';
13246            } else {
13247                return 'రాత్రి';
13248            }
13249        },
13250        week : {
13251            dow : 0, // Sunday is the first day of the week.
13252            doy : 6  // The week that contains Jan 6th is the first week of the year.
13253        }
13254    });
13255
13256    //! moment.js locale configuration
13257
13258    hooks.defineLocale('tet', {
13259        months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),
13260        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
13261        weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),
13262        weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),
13263        weekdaysMin : 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),
13264        longDateFormat : {
13265            LT : 'HH:mm',
13266            LTS : 'HH:mm:ss',
13267            L : 'DD/MM/YYYY',
13268            LL : 'D MMMM YYYY',
13269            LLL : 'D MMMM YYYY HH:mm',
13270            LLLL : 'dddd, D MMMM YYYY HH:mm'
13271        },
13272        calendar : {
13273            sameDay: '[Ohin iha] LT',
13274            nextDay: '[Aban iha] LT',
13275            nextWeek: 'dddd [iha] LT',
13276            lastDay: '[Horiseik iha] LT',
13277            lastWeek: 'dddd [semana kotuk] [iha] LT',
13278            sameElse: 'L'
13279        },
13280        relativeTime : {
13281            future : 'iha %s',
13282            past : '%s liuba',
13283            s : 'minutu balun',
13284            ss : 'minutu %d',
13285            m : 'minutu ida',
13286            mm : 'minutu %d',
13287            h : 'oras ida',
13288            hh : 'oras %d',
13289            d : 'loron ida',
13290            dd : 'loron %d',
13291            M : 'fulan ida',
13292            MM : 'fulan %d',
13293            y : 'tinan ida',
13294            yy : 'tinan %d'
13295        },
13296        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
13297        ordinal : function (number) {
13298            var b = number % 10,
13299                output = (~~(number % 100 / 10) === 1) ? 'th' :
13300                (b === 1) ? 'st' :
13301                (b === 2) ? 'nd' :
13302                (b === 3) ? 'rd' : 'th';
13303            return number + output;
13304        },
13305        week : {
13306            dow : 1, // Monday is the first day of the week.
13307            doy : 4  // The week that contains Jan 4th is the first week of the year.
13308        }
13309    });
13310
13311    //! moment.js locale configuration
13312
13313    var suffixes$3 = {
13314        0: '-ум',
13315        1: '-ум',
13316        2: '-юм',
13317        3: '-юм',
13318        4: '-ум',
13319        5: '-ум',
13320        6: '-ум',
13321        7: '-ум',
13322        8: '-ум',
13323        9: '-ум',
13324        10: '-ум',
13325        12: '-ум',
13326        13: '-ум',
13327        20: '-ум',
13328        30: '-юм',
13329        40: '-ум',
13330        50: '-ум',
13331        60: '-ум',
13332        70: '-ум',
13333        80: '-ум',
13334        90: '-ум',
13335        100: '-ум'
13336    };
13337
13338    hooks.defineLocale('tg', {
13339        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),
13340        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
13341        weekdays : 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),
13342        weekdaysShort : 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),
13343        weekdaysMin : 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),
13344        longDateFormat : {
13345            LT : 'HH:mm',
13346            LTS : 'HH:mm:ss',
13347            L : 'DD/MM/YYYY',
13348            LL : 'D MMMM YYYY',
13349            LLL : 'D MMMM YYYY HH:mm',
13350            LLLL : 'dddd, D MMMM YYYY HH:mm'
13351        },
13352        calendar : {
13353            sameDay : '[Имрӯз соати] LT',
13354            nextDay : '[Пагоҳ соати] LT',
13355            lastDay : '[Дирӯз соати] LT',
13356            nextWeek : 'dddd[и] [ҳафтаи оянда соати] LT',
13357            lastWeek : 'dddd[и] [ҳафтаи гузашта соати] LT',
13358            sameElse : 'L'
13359        },
13360        relativeTime : {
13361            future : 'баъди %s',
13362            past : '%s пеш',
13363            s : 'якчанд сония',
13364            m : 'як дақиқа',
13365            mm : '%d дақиқа',
13366            h : 'як соат',
13367            hh : '%d соат',
13368            d : 'як рӯз',
13369            dd : '%d рӯз',
13370            M : 'як моҳ',
13371            MM : '%d моҳ',
13372            y : 'як сол',
13373            yy : '%d сол'
13374        },
13375        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,
13376        meridiemHour: function (hour, meridiem) {
13377            if (hour === 12) {
13378                hour = 0;
13379            }
13380            if (meridiem === 'шаб') {
13381                return hour < 4 ? hour : hour + 12;
13382            } else if (meridiem === 'субҳ') {
13383                return hour;
13384            } else if (meridiem === 'рӯз') {
13385                return hour >= 11 ? hour : hour + 12;
13386            } else if (meridiem === 'бегоҳ') {
13387                return hour + 12;
13388            }
13389        },
13390        meridiem: function (hour, minute, isLower) {
13391            if (hour < 4) {
13392                return 'шаб';
13393            } else if (hour < 11) {
13394                return 'субҳ';
13395            } else if (hour < 16) {
13396                return 'рӯз';
13397            } else if (hour < 19) {
13398                return 'бегоҳ';
13399            } else {
13400                return 'шаб';
13401            }
13402        },
13403        dayOfMonthOrdinalParse: /\d{1,2}-(ум|юм)/,
13404        ordinal: function (number) {
13405            var a = number % 10,
13406                b = number >= 100 ? 100 : null;
13407            return number + (suffixes$3[number] || suffixes$3[a] || suffixes$3[b]);
13408        },
13409        week : {
13410            dow : 1, // Monday is the first day of the week.
13411            doy : 7  // The week that contains Jan 1th is the first week of the year.
13412        }
13413    });
13414
13415    //! moment.js locale configuration
13416
13417    hooks.defineLocale('th', {
13418        months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),
13419        monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),
13420        monthsParseExact: true,
13421        weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
13422        weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
13423        weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
13424        weekdaysParseExact : true,
13425        longDateFormat : {
13426            LT : 'H:mm',
13427            LTS : 'H:mm:ss',
13428            L : 'DD/MM/YYYY',
13429            LL : 'D MMMM YYYY',
13430            LLL : 'D MMMM YYYY เวลา H:mm',
13431            LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'
13432        },
13433        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
13434        isPM: function (input) {
13435            return input === 'หลังเที่ยง';
13436        },
13437        meridiem : function (hour, minute, isLower) {
13438            if (hour < 12) {
13439                return 'ก่อนเที่ยง';
13440            } else {
13441                return 'หลังเที่ยง';
13442            }
13443        },
13444        calendar : {
13445            sameDay : '[วันนี้ เวลา] LT',
13446            nextDay : '[พรุ่งนี้ เวลา] LT',
13447            nextWeek : 'dddd[หน้า เวลา] LT',
13448            lastDay : '[เมื่อวานนี้ เวลา] LT',
13449            lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',
13450            sameElse : 'L'
13451        },
13452        relativeTime : {
13453            future : 'อีก %s',
13454            past : '%sที่แล้ว',
13455            s : 'ไม่กี่วินาที',
13456            ss : '%d วินาที',
13457            m : '1 นาที',
13458            mm : '%d นาที',
13459            h : '1 ชั่วโมง',
13460            hh : '%d ชั่วโมง',
13461            d : '1 วัน',
13462            dd : '%d วัน',
13463            M : '1 เดือน',
13464            MM : '%d เดือน',
13465            y : '1 ปี',
13466            yy : '%d ปี'
13467        }
13468    });
13469
13470    //! moment.js locale configuration
13471
13472    hooks.defineLocale('tl-ph', {
13473        months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),
13474        monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
13475        weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),
13476        weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
13477        weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
13478        longDateFormat : {
13479            LT : 'HH:mm',
13480            LTS : 'HH:mm:ss',
13481            L : 'MM/D/YYYY',
13482            LL : 'MMMM D, YYYY',
13483            LLL : 'MMMM D, YYYY HH:mm',
13484            LLLL : 'dddd, MMMM DD, YYYY HH:mm'
13485        },
13486        calendar : {
13487            sameDay: 'LT [ngayong araw]',
13488            nextDay: '[Bukas ng] LT',
13489            nextWeek: 'LT [sa susunod na] dddd',
13490            lastDay: 'LT [kahapon]',
13491            lastWeek: 'LT [noong nakaraang] dddd',
13492            sameElse: 'L'
13493        },
13494        relativeTime : {
13495            future : 'sa loob ng %s',
13496            past : '%s ang nakalipas',
13497            s : 'ilang segundo',
13498            ss : '%d segundo',
13499            m : 'isang minuto',
13500            mm : '%d minuto',
13501            h : 'isang oras',
13502            hh : '%d oras',
13503            d : 'isang araw',
13504            dd : '%d araw',
13505            M : 'isang buwan',
13506            MM : '%d buwan',
13507            y : 'isang taon',
13508            yy : '%d taon'
13509        },
13510        dayOfMonthOrdinalParse: /\d{1,2}/,
13511        ordinal : function (number) {
13512            return number;
13513        },
13514        week : {
13515            dow : 1, // Monday is the first day of the week.
13516            doy : 4  // The week that contains Jan 4th is the first week of the year.
13517        }
13518    });
13519
13520    //! moment.js locale configuration
13521
13522    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');
13523
13524    function translateFuture(output) {
13525        var time = output;
13526        time = (output.indexOf('jaj') !== -1) ?
13527        time.slice(0, -3) + 'leS' :
13528        (output.indexOf('jar') !== -1) ?
13529        time.slice(0, -3) + 'waQ' :
13530        (output.indexOf('DIS') !== -1) ?
13531        time.slice(0, -3) + 'nem' :
13532        time + ' pIq';
13533        return time;
13534    }
13535
13536    function translatePast(output) {
13537        var time = output;
13538        time = (output.indexOf('jaj') !== -1) ?
13539        time.slice(0, -3) + 'Hu’' :
13540        (output.indexOf('jar') !== -1) ?
13541        time.slice(0, -3) + 'wen' :
13542        (output.indexOf('DIS') !== -1) ?
13543        time.slice(0, -3) + 'ben' :
13544        time + ' ret';
13545        return time;
13546    }
13547
13548    function translate$a(number, withoutSuffix, string, isFuture) {
13549        var numberNoun = numberAsNoun(number);
13550        switch (string) {
13551            case 'ss':
13552                return numberNoun + ' lup';
13553            case 'mm':
13554                return numberNoun + ' tup';
13555            case 'hh':
13556                return numberNoun + ' rep';
13557            case 'dd':
13558                return numberNoun + ' jaj';
13559            case 'MM':
13560                return numberNoun + ' jar';
13561            case 'yy':
13562                return numberNoun + ' DIS';
13563        }
13564    }
13565
13566    function numberAsNoun(number) {
13567        var hundred = Math.floor((number % 1000) / 100),
13568        ten = Math.floor((number % 100) / 10),
13569        one = number % 10,
13570        word = '';
13571        if (hundred > 0) {
13572            word += numbersNouns[hundred] + 'vatlh';
13573        }
13574        if (ten > 0) {
13575            word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';
13576        }
13577        if (one > 0) {
13578            word += ((word !== '') ? ' ' : '') + numbersNouns[one];
13579        }
13580        return (word === '') ? 'pagh' : word;
13581    }
13582
13583    hooks.defineLocale('tlh', {
13584        months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),
13585        monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),
13586        monthsParseExact : true,
13587        weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
13588        weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
13589        weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
13590        longDateFormat : {
13591            LT : 'HH:mm',
13592            LTS : 'HH:mm:ss',
13593            L : 'DD.MM.YYYY',
13594            LL : 'D MMMM YYYY',
13595            LLL : 'D MMMM YYYY HH:mm',
13596            LLLL : 'dddd, D MMMM YYYY HH:mm'
13597        },
13598        calendar : {
13599            sameDay: '[DaHjaj] LT',
13600            nextDay: '[wa’leS] LT',
13601            nextWeek: 'LLL',
13602            lastDay: '[wa’Hu’] LT',
13603            lastWeek: 'LLL',
13604            sameElse: 'L'
13605        },
13606        relativeTime : {
13607            future : translateFuture,
13608            past : translatePast,
13609            s : 'puS lup',
13610            ss : translate$a,
13611            m : 'wa’ tup',
13612            mm : translate$a,
13613            h : 'wa’ rep',
13614            hh : translate$a,
13615            d : 'wa’ jaj',
13616            dd : translate$a,
13617            M : 'wa’ jar',
13618            MM : translate$a,
13619            y : 'wa’ DIS',
13620            yy : translate$a
13621        },
13622        dayOfMonthOrdinalParse: /\d{1,2}\./,
13623        ordinal : '%d.',
13624        week : {
13625            dow : 1, // Monday is the first day of the week.
13626            doy : 4  // The week that contains Jan 4th is the first week of the year.
13627        }
13628    });
13629
13630    var suffixes$4 = {
13631        1: '\'inci',
13632        5: '\'inci',
13633        8: '\'inci',
13634        70: '\'inci',
13635        80: '\'inci',
13636        2: '\'nci',
13637        7: '\'nci',
13638        20: '\'nci',
13639        50: '\'nci',
13640        3: '\'üncü',
13641        4: '\'üncü',
13642        100: '\'üncü',
13643        6: '\'ncı',
13644        9: '\'uncu',
13645        10: '\'uncu',
13646        30: '\'uncu',
13647        60: '\'ıncı',
13648        90: '\'ıncı'
13649    };
13650
13651    hooks.defineLocale('tr', {
13652        months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),
13653        monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
13654        weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),
13655        weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
13656        weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
13657        longDateFormat : {
13658            LT : 'HH:mm',
13659            LTS : 'HH:mm:ss',
13660            L : 'DD.MM.YYYY',
13661            LL : 'D MMMM YYYY',
13662            LLL : 'D MMMM YYYY HH:mm',
13663            LLLL : 'dddd, D MMMM YYYY HH:mm'
13664        },
13665        calendar : {
13666            sameDay : '[bugün saat] LT',
13667            nextDay : '[yarın saat] LT',
13668            nextWeek : '[gelecek] dddd [saat] LT',
13669            lastDay : '[dün] LT',
13670            lastWeek : '[geçen] dddd [saat] LT',
13671            sameElse : 'L'
13672        },
13673        relativeTime : {
13674            future : '%s sonra',
13675            past : '%s önce',
13676            s : 'birkaç saniye',
13677            ss : '%d saniye',
13678            m : 'bir dakika',
13679            mm : '%d dakika',
13680            h : 'bir saat',
13681            hh : '%d saat',
13682            d : 'bir gün',
13683            dd : '%d gün',
13684            M : 'bir ay',
13685            MM : '%d ay',
13686            y : 'bir yıl',
13687            yy : '%d yıl'
13688        },
13689        ordinal: function (number, period) {
13690            switch (period) {
13691                case 'd':
13692                case 'D':
13693                case 'Do':
13694                case 'DD':
13695                    return number;
13696                default:
13697                    if (number === 0) {  // special case for zero
13698                        return number + '\'ıncı';
13699                    }
13700                    var a = number % 10,
13701                        b = number % 100 - a,
13702                        c = number >= 100 ? 100 : null;
13703                    return number + (suffixes$4[a] || suffixes$4[b] || suffixes$4[c]);
13704            }
13705        },
13706        week : {
13707            dow : 1, // Monday is the first day of the week.
13708            doy : 7  // The week that contains Jan 7th is the first week of the year.
13709        }
13710    });
13711
13712    //! moment.js locale configuration
13713
13714    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
13715    // This is currently too difficult (maybe even impossible) to add.
13716    hooks.defineLocale('tzl', {
13717        months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),
13718        monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
13719        weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
13720        weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
13721        weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
13722        longDateFormat : {
13723            LT : 'HH.mm',
13724            LTS : 'HH.mm.ss',
13725            L : 'DD.MM.YYYY',
13726            LL : 'D. MMMM [dallas] YYYY',
13727            LLL : 'D. MMMM [dallas] YYYY HH.mm',
13728            LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'
13729        },
13730        meridiemParse: /d\'o|d\'a/i,
13731        isPM : function (input) {
13732            return 'd\'o' === input.toLowerCase();
13733        },
13734        meridiem : function (hours, minutes, isLower) {
13735            if (hours > 11) {
13736                return isLower ? 'd\'o' : 'D\'O';
13737            } else {
13738                return isLower ? 'd\'a' : 'D\'A';
13739            }
13740        },
13741        calendar : {
13742            sameDay : '[oxhi à] LT',
13743            nextDay : '[demà à] LT',
13744            nextWeek : 'dddd [à] LT',
13745            lastDay : '[ieiri à] LT',
13746            lastWeek : '[sür el] dddd [lasteu à] LT',
13747            sameElse : 'L'
13748        },
13749        relativeTime : {
13750            future : 'osprei %s',
13751            past : 'ja%s',
13752            s : processRelativeTime$7,
13753            ss : processRelativeTime$7,
13754            m : processRelativeTime$7,
13755            mm : processRelativeTime$7,
13756            h : processRelativeTime$7,
13757            hh : processRelativeTime$7,
13758            d : processRelativeTime$7,
13759            dd : processRelativeTime$7,
13760            M : processRelativeTime$7,
13761            MM : processRelativeTime$7,
13762            y : processRelativeTime$7,
13763            yy : processRelativeTime$7
13764        },
13765        dayOfMonthOrdinalParse: /\d{1,2}\./,
13766        ordinal : '%d.',
13767        week : {
13768            dow : 1, // Monday is the first day of the week.
13769            doy : 4  // The week that contains Jan 4th is the first week of the year.
13770        }
13771    });
13772
13773    function processRelativeTime$7(number, withoutSuffix, key, isFuture) {
13774        var format = {
13775            's': ['viensas secunds', '\'iensas secunds'],
13776            'ss': [number + ' secunds', '' + number + ' secunds'],
13777            'm': ['\'n míut', '\'iens míut'],
13778            'mm': [number + ' míuts', '' + number + ' míuts'],
13779            'h': ['\'n þora', '\'iensa þora'],
13780            'hh': [number + ' þoras', '' + number + ' þoras'],
13781            'd': ['\'n ziua', '\'iensa ziua'],
13782            'dd': [number + ' ziuas', '' + number + ' ziuas'],
13783            'M': ['\'n mes', '\'iens mes'],
13784            'MM': [number + ' mesen', '' + number + ' mesen'],
13785            'y': ['\'n ar', '\'iens ar'],
13786            'yy': [number + ' ars', '' + number + ' ars']
13787        };
13788        return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);
13789    }
13790
13791    //! moment.js locale configuration
13792
13793    hooks.defineLocale('tzm-latn', {
13794        months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
13795        monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
13796        weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
13797        weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
13798        weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
13799        longDateFormat : {
13800            LT : 'HH:mm',
13801            LTS : 'HH:mm:ss',
13802            L : 'DD/MM/YYYY',
13803            LL : 'D MMMM YYYY',
13804            LLL : 'D MMMM YYYY HH:mm',
13805            LLLL : 'dddd D MMMM YYYY HH:mm'
13806        },
13807        calendar : {
13808            sameDay: '[asdkh g] LT',
13809            nextDay: '[aska g] LT',
13810            nextWeek: 'dddd [g] LT',
13811            lastDay: '[assant g] LT',
13812            lastWeek: 'dddd [g] LT',
13813            sameElse: 'L'
13814        },
13815        relativeTime : {
13816            future : 'dadkh s yan %s',
13817            past : 'yan %s',
13818            s : 'imik',
13819            ss : '%d imik',
13820            m : 'minuḍ',
13821            mm : '%d minuḍ',
13822            h : 'saɛa',
13823            hh : '%d tassaɛin',
13824            d : 'ass',
13825            dd : '%d ossan',
13826            M : 'ayowr',
13827            MM : '%d iyyirn',
13828            y : 'asgas',
13829            yy : '%d isgasn'
13830        },
13831        week : {
13832            dow : 6, // Saturday is the first day of the week.
13833            doy : 12  // The week that contains Jan 12th is the first week of the year.
13834        }
13835    });
13836
13837    //! moment.js locale configuration
13838
13839    hooks.defineLocale('tzm', {
13840        months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
13841        monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
13842        weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
13843        weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
13844        weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
13845        longDateFormat : {
13846            LT : 'HH:mm',
13847            LTS: 'HH:mm:ss',
13848            L : 'DD/MM/YYYY',
13849            LL : 'D MMMM YYYY',
13850            LLL : 'D MMMM YYYY HH:mm',
13851            LLLL : 'dddd D MMMM YYYY HH:mm'
13852        },
13853        calendar : {
13854            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
13855            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
13856            nextWeek: 'dddd [â´´] LT',
13857            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
13858            lastWeek: 'dddd [â´´] LT',
13859            sameElse: 'L'
13860        },
13861        relativeTime : {
13862            future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
13863            past : 'ⵢⴰⵏ %s',
13864            s : 'ⵉⵎⵉⴽ',
13865            ss : '%d ⵉⵎⵉⴽ',
13866            m : 'ⵎⵉⵏⵓⴺ',
13867            mm : '%d ⵎⵉⵏⵓⴺ',
13868            h : 'ⵙⴰⵄⴰ',
13869            hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
13870            d : 'ⴰⵙⵙ',
13871            dd : '%d oⵙⵙⴰⵏ',
13872            M : 'ⴰⵢoⵓⵔ',
13873            MM : '%d ⵉⵢⵢⵉⵔⵏ',
13874            y : 'ⴰⵙⴳⴰⵙ',
13875            yy : '%d ⵉⵙⴳⴰⵙⵏ'
13876        },
13877        week : {
13878            dow : 6, // Saturday is the first day of the week.
13879            doy : 12  // The week that contains Jan 12th is the first week of the year.
13880        }
13881    });
13882
13883    //! moment.js language configuration
13884
13885    hooks.defineLocale('ug-cn', {
13886        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(
13887            '_'
13888        ),
13889        monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(
13890            '_'
13891        ),
13892        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(
13893            '_'
13894        ),
13895        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
13896        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
13897        longDateFormat: {
13898            LT: 'HH:mm',
13899            LTS: 'HH:mm:ss',
13900            L: 'YYYY-MM-DD',
13901            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',
vendor: 18,019 bytes, lines 13902-14381
13902            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',
13903            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'
13904        },
13905        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,
13906        meridiemHour: function (hour, meridiem) {
13907            if (hour === 12) {
13908                hour = 0;
13909            }
13910            if (
13911                meridiem === 'يېرىم كېچە' ||
13912                meridiem === 'سەھەر' ||
13913                meridiem === 'چۈشتىن بۇرۇن'
13914            ) {
13915                return hour;
13916            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {
13917                return hour + 12;
13918            } else {
13919                return hour >= 11 ? hour : hour + 12;
13920            }
13921        },
13922        meridiem: function (hour, minute, isLower) {
13923            var hm = hour * 100 + minute;
13924            if (hm < 600) {
13925                return 'يېرىم كېچە';
13926            } else if (hm < 900) {
13927                return 'سەھەر';
13928            } else if (hm < 1130) {
13929                return 'چۈشتىن بۇرۇن';
13930            } else if (hm < 1230) {
13931                return 'چۈش';
13932            } else if (hm < 1800) {
13933                return 'چۈشتىن كېيىن';
13934            } else {
13935                return 'كەچ';
13936            }
13937        },
13938        calendar: {
13939            sameDay: '[بۈگۈن سائەت] LT',
13940            nextDay: '[ئەتە سائەت] LT',
13941            nextWeek: '[كېلەركى] dddd [سائەت] LT',
13942            lastDay: '[تۆنۈگۈن] LT',
13943            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',
13944            sameElse: 'L'
13945        },
13946        relativeTime: {
13947            future: '%s كېيىن',
13948            past: '%s بۇرۇن',
13949            s: 'نەچچە سېكونت',
13950            ss: '%d سېكونت',
13951            m: 'بىر مىنۇت',
13952            mm: '%d مىنۇت',
13953            h: 'بىر سائەت',
13954            hh: '%d سائەت',
13955            d: 'بىر كۈن',
13956            dd: '%d كۈن',
13957            M: 'بىر ئاي',
13958            MM: '%d ئاي',
13959            y: 'بىر يىل',
13960            yy: '%d يىل'
13961        },
13962
13963        dayOfMonthOrdinalParse: /\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,
13964        ordinal: function (number, period) {
13965            switch (period) {
13966                case 'd':
13967                case 'D':
13968                case 'DDD':
13969                    return number + '-كۈنى';
13970                case 'w':
13971                case 'W':
13972                    return number + '-ھەپتە';
13973                default:
13974                    return number;
13975            }
13976        },
13977        preparse: function (string) {
13978            return string.replace(/،/g, ',');
13979        },
13980        postformat: function (string) {
13981            return string.replace(/,/g, '،');
13982        },
13983        week: {
13984            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
13985            dow: 1, // Monday is the first day of the week.
13986            doy: 7 // The week that contains Jan 1st is the first week of the year.
13987        }
13988    });
13989
13990    //! moment.js locale configuration
13991
13992    function plural$6(word, num) {
13993        var forms = word.split('_');
13994        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
13995    }
13996    function relativeTimeWithPlural$4(number, withoutSuffix, key) {
13997        var format = {
13998            'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',
13999            'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
14000            'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
14001            'dd': 'день_дні_днів',
14002            'MM': 'місяць_місяці_місяців',
14003            'yy': 'рік_роки_років'
14004        };
14005        if (key === 'm') {
14006            return withoutSuffix ? 'хвилина' : 'хвилину';
14007        }
14008        else if (key === 'h') {
14009            return withoutSuffix ? 'година' : 'годину';
14010        }
14011        else {
14012            return number + ' ' + plural$6(format[key], +number);
14013        }
14014    }
14015    function weekdaysCaseReplace(m, format) {
14016        var weekdays = {
14017            'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
14018            'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),
14019            'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')
14020        };
14021
14022        if (m === true) {
14023            return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1));
14024        }
14025        if (!m) {
14026            return weekdays['nominative'];
14027        }
14028
14029        var nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ?
14030            'accusative' :
14031            ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ?
14032                'genitive' :
14033                'nominative');
14034        return weekdays[nounCase][m.day()];
14035    }
14036    function processHoursFunction(str) {
14037        return function () {
14038            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
14039        };
14040    }
14041
14042    hooks.defineLocale('uk', {
14043        months : {
14044            'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),
14045            'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')
14046        },
14047        monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),
14048        weekdays : weekdaysCaseReplace,
14049        weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
14050        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
14051        longDateFormat : {
14052            LT : 'HH:mm',
14053            LTS : 'HH:mm:ss',
14054            L : 'DD.MM.YYYY',
14055            LL : 'D MMMM YYYY р.',
14056            LLL : 'D MMMM YYYY р., HH:mm',
14057            LLLL : 'dddd, D MMMM YYYY р., HH:mm'
14058        },
14059        calendar : {
14060            sameDay: processHoursFunction('[Сьогодні '),
14061            nextDay: processHoursFunction('[Завтра '),
14062            lastDay: processHoursFunction('[Вчора '),
14063            nextWeek: processHoursFunction('[У] dddd ['),
14064            lastWeek: function () {
14065                switch (this.day()) {
14066                    case 0:
14067                    case 3:
14068                    case 5:
14069                    case 6:
14070                        return processHoursFunction('[Минулої] dddd [').call(this);
14071                    case 1:
14072                    case 2:
14073                    case 4:
14074                        return processHoursFunction('[Минулого] dddd [').call(this);
14075                }
14076            },
14077            sameElse: 'L'
14078        },
14079        relativeTime : {
14080            future : 'за %s',
14081            past : '%s тому',
14082            s : 'декілька секунд',
14083            ss : relativeTimeWithPlural$4,
14084            m : relativeTimeWithPlural$4,
14085            mm : relativeTimeWithPlural$4,
14086            h : 'годину',
14087            hh : relativeTimeWithPlural$4,
14088            d : 'день',
14089            dd : relativeTimeWithPlural$4,
14090            M : 'місяць',
14091            MM : relativeTimeWithPlural$4,
14092            y : 'рік',
14093            yy : relativeTimeWithPlural$4
14094        },
14095        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
14096        meridiemParse: /ночі|ранку|дня|вечора/,
14097        isPM: function (input) {
14098            return /^(дня|вечора)$/.test(input);
14099        },
14100        meridiem : function (hour, minute, isLower) {
14101            if (hour < 4) {
14102                return 'ночі';
14103            } else if (hour < 12) {
14104                return 'ранку';
14105            } else if (hour < 17) {
14106                return 'дня';
14107            } else {
14108                return 'вечора';
14109            }
14110        },
14111        dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/,
14112        ordinal: function (number, period) {
14113            switch (period) {
14114                case 'M':
14115                case 'd':
14116                case 'DDD':
14117                case 'w':
14118                case 'W':
14119                    return number + '-й';
14120                case 'D':
14121                    return number + '-го';
14122                default:
14123                    return number;
14124            }
14125        },
14126        week : {
14127            dow : 1, // Monday is the first day of the week.
14128            doy : 7  // The week that contains Jan 7th is the first week of the year.
14129        }
14130    });
14131
14132    //! moment.js locale configuration
14133
14134    var months$a = [
14135        'جنوری',
14136        'فروری',
14137        'مارچ',
14138        'اپریل',
14139        'مئی',
14140        'جون',
14141        'جولائی',
14142        'اگست',
14143        'ستمبر',
14144        'اکتوبر',
14145        'نومبر',
14146        'دسمبر'
14147    ];
14148    var days$2 = [
14149        'اتوار',
14150        'پیر',
14151        'منگل',
14152        'بدھ',
14153        'جمعرات',
14154        'جمعہ',
14155        'ہفتہ'
14156    ];
14157
14158    hooks.defineLocale('ur', {
14159        months : months$a,
14160        monthsShort : months$a,
14161        weekdays : days$2,
14162        weekdaysShort : days$2,
14163        weekdaysMin : days$2,
14164        longDateFormat : {
14165            LT : 'HH:mm',
14166            LTS : 'HH:mm:ss',
14167            L : 'DD/MM/YYYY',
14168            LL : 'D MMMM YYYY',
14169            LLL : 'D MMMM YYYY HH:mm',
14170            LLLL : 'dddd، D MMMM YYYY HH:mm'
14171        },
14172        meridiemParse: /صبح|شام/,
14173        isPM : function (input) {
14174            return 'شام' === input;
14175        },
14176        meridiem : function (hour, minute, isLower) {
14177            if (hour < 12) {
14178                return 'صبح';
14179            }
14180            return 'شام';
14181        },
14182        calendar : {
14183            sameDay : '[آج بوقت] LT',
14184            nextDay : '[کل بوقت] LT',
14185            nextWeek : 'dddd [بوقت] LT',
14186            lastDay : '[گذشتہ روز بوقت] LT',
14187            lastWeek : '[گذشتہ] dddd [بوقت] LT',
14188            sameElse : 'L'
14189        },
14190        relativeTime : {
14191            future : '%s بعد',
14192            past : '%s قبل',
14193            s : 'چند سیکنڈ',
14194            ss : '%d سیکنڈ',
14195            m : 'ایک منٹ',
14196            mm : '%d منٹ',
14197            h : 'ایک گھنٹہ',
14198            hh : '%d گھنٹے',
14199            d : 'ایک دن',
14200            dd : '%d دن',
14201            M : 'ایک ماہ',
14202            MM : '%d ماہ',
14203            y : 'ایک سال',
14204            yy : '%d سال'
14205        },
14206        preparse: function (string) {
14207            return string.replace(/،/g, ',');
14208        },
14209        postformat: function (string) {
14210            return string.replace(/,/g, '،');
14211        },
14212        week : {
14213            dow : 1, // Monday is the first day of the week.
14214            doy : 4  // The week that contains Jan 4th is the first week of the year.
14215        }
14216    });
14217
14218    //! moment.js locale configuration
14219
14220    hooks.defineLocale('uz-latn', {
14221        months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),
14222        monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),
14223        weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),
14224        weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),
14225        weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),
14226        longDateFormat : {
14227            LT : 'HH:mm',
14228            LTS : 'HH:mm:ss',
14229            L : 'DD/MM/YYYY',
14230            LL : 'D MMMM YYYY',
14231            LLL : 'D MMMM YYYY HH:mm',
14232            LLLL : 'D MMMM YYYY, dddd HH:mm'
14233        },
14234        calendar : {
14235            sameDay : '[Bugun soat] LT [da]',
14236            nextDay : '[Ertaga] LT [da]',
14237            nextWeek : 'dddd [kuni soat] LT [da]',
14238            lastDay : '[Kecha soat] LT [da]',
14239            lastWeek : '[O\'tgan] dddd [kuni soat] LT [da]',
14240            sameElse : 'L'
14241        },
14242        relativeTime : {
14243            future : 'Yaqin %s ichida',
14244            past : 'Bir necha %s oldin',
14245            s : 'soniya',
14246            ss : '%d soniya',
14247            m : 'bir daqiqa',
14248            mm : '%d daqiqa',
14249            h : 'bir soat',
14250            hh : '%d soat',
14251            d : 'bir kun',
14252            dd : '%d kun',
14253            M : 'bir oy',
14254            MM : '%d oy',
14255            y : 'bir yil',
14256            yy : '%d yil'
14257        },
14258        week : {
14259            dow : 1, // Monday is the first day of the week.
14260            doy : 7  // The week that contains Jan 7th is the first week of the year.
14261        }
14262    });
14263
14264    //! moment.js locale configuration
14265
14266    hooks.defineLocale('uz', {
14267        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),
14268        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
14269        weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
14270        weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
14271        weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
14272        longDateFormat : {
14273            LT : 'HH:mm',
14274            LTS : 'HH:mm:ss',
14275            L : 'DD/MM/YYYY',
14276            LL : 'D MMMM YYYY',
14277            LLL : 'D MMMM YYYY HH:mm',
14278            LLLL : 'D MMMM YYYY, dddd HH:mm'
14279        },
14280        calendar : {
14281            sameDay : '[Бугун соат] LT [да]',
14282            nextDay : '[Эртага] LT [да]',
14283            nextWeek : 'dddd [куни соат] LT [да]',
14284            lastDay : '[Кеча соат] LT [да]',
14285            lastWeek : '[Утган] dddd [куни соат] LT [да]',
14286            sameElse : 'L'
14287        },
14288        relativeTime : {
14289            future : 'Якин %s ичида',
14290            past : 'Бир неча %s олдин',
14291            s : 'фурсат',
14292            ss : '%d фурсат',
14293            m : 'бир дакика',
14294            mm : '%d дакика',
14295            h : 'бир соат',
14296            hh : '%d соат',
14297            d : 'бир кун',
14298            dd : '%d кун',
14299            M : 'бир ой',
14300            MM : '%d ой',
14301            y : 'бир йил',
14302            yy : '%d йил'
14303        },
14304        week : {
14305            dow : 1, // Monday is the first day of the week.
14306            doy : 7  // The week that contains Jan 4th is the first week of the year.
14307        }
14308    });
14309
14310    //! moment.js locale configuration
14311
14312    hooks.defineLocale('vi', {
14313        months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),
14314        monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),
14315        monthsParseExact : true,
14316        weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),
14317        weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
14318        weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
14319        weekdaysParseExact : true,
14320        meridiemParse: /sa|ch/i,
14321        isPM : function (input) {
14322            return /^ch$/i.test(input);
14323        },
14324        meridiem : function (hours, minutes, isLower) {
14325            if (hours < 12) {
14326                return isLower ? 'sa' : 'SA';
14327            } else {
14328                return isLower ? 'ch' : 'CH';
14329            }
14330        },
14331        longDateFormat : {
14332            LT : 'HH:mm',
14333            LTS : 'HH:mm:ss',
14334            L : 'DD/MM/YYYY',
14335            LL : 'D MMMM [năm] YYYY',
14336            LLL : 'D MMMM [năm] YYYY HH:mm',
14337            LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',
14338            l : 'DD/M/YYYY',
14339            ll : 'D MMM YYYY',
14340            lll : 'D MMM YYYY HH:mm',
14341            llll : 'ddd, D MMM YYYY HH:mm'
14342        },
14343        calendar : {
14344            sameDay: '[Hôm nay lúc] LT',
14345            nextDay: '[Ngày mai lúc] LT',
14346            nextWeek: 'dddd [tuần tới lúc] LT',
14347            lastDay: '[Hôm qua lúc] LT',
14348            lastWeek: 'dddd [tuần rồi lúc] LT',
14349            sameElse: 'L'
14350        },
14351        relativeTime : {
14352            future : '%s tới',
14353            past : '%s trước',
14354            s : 'vài giây',
14355            ss : '%d giây' ,
14356            m : 'một phút',
14357            mm : '%d phút',
14358            h : 'một giờ',
14359            hh : '%d giờ',
14360            d : 'một ngày',
14361            dd : '%d ngày',
14362            M : 'một tháng',
14363            MM : '%d tháng',
14364            y : 'một năm',
14365            yy : '%d năm'
14366        },
14367        dayOfMonthOrdinalParse: /\d{1,2}/,
14368        ordinal : function (number) {
14369            return number;
14370        },
14371        week : {
14372            dow : 1, // Monday is the first day of the week.
14373            doy : 4  // The week that contains Jan 4th is the first week of the year.
14374        }
14375    });
14376
14377    //! moment.js locale configuration
14378
14379    hooks.defineLocale('x-pseudo', {
14380        months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),
14381        monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.
14381split('_'),
14382        monthsParseExact : true,
14383        weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),
14384        weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
14385        weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
14386        weekdaysParseExact : true,
14387        longDateFormat : {
14388            LT : 'HH:mm',
14389            L : 'DD/MM/YYYY',
14390            LL : 'D MMMM YYYY',
14391            LLL : 'D MMMM YYYY HH:mm',
14392            LLLL : 'dddd, D MMMM YYYY HH:mm'
14393        },
14394        calendar : {
14395            sameDay : '[T~ódá~ý át] LT',
14396            nextDay : '[T~ómó~rró~w át] LT',
14397            nextWeek : 'dddd [át] LT',
14398            lastDay : '[Ý~ést~érdá~ý át] LT',
14399            lastWeek : '[L~ást] dddd [át] LT',
14400            sameElse : 'L'
14401        },
14402        relativeTime : {
14403            future : 'í~ñ %s',
14404            past : '%s á~gó',
14405            s : 'á ~féw ~sécó~ñds',
14406            ss : '%d s~écóñ~ds',
vendor: 12,766 bytes, lines 14407-14765
14407            m : 'á ~míñ~úté',
14408            mm : '%d m~íñú~tés',
14409            h : 'á~ñ hó~úr',
14410            hh : '%d h~óúrs',
14411            d : 'á ~dáý',
14412            dd : '%d d~áýs',
14413            M : 'á ~móñ~th',
14414            MM : '%d m~óñt~hs',
14415            y : 'á ~ýéár',
14416            yy : '%d ý~éárs'
14417        },
14418        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
14419        ordinal : function (number) {
14420            var b = number % 10,
14421                output = (~~(number % 100 / 10) === 1) ? 'th' :
14422                (b === 1) ? 'st' :
14423                (b === 2) ? 'nd' :
14424                (b === 3) ? 'rd' : 'th';
14425            return number + output;
14426        },
14427        week : {
14428            dow : 1, // Monday is the first day of the week.
14429            doy : 4  // The week that contains Jan 4th is the first week of the year.
14430        }
14431    });
14432
14433    //! moment.js locale configuration
14434
14435    hooks.defineLocale('yo', {
14436        months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),
14437        monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),
14438        weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),
14439        weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),
14440        weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),
14441        longDateFormat : {
14442            LT : 'h:mm A',
14443            LTS : 'h:mm:ss A',
14444            L : 'DD/MM/YYYY',
14445            LL : 'D MMMM YYYY',
14446            LLL : 'D MMMM YYYY h:mm A',
14447            LLLL : 'dddd, D MMMM YYYY h:mm A'
14448        },
14449        calendar : {
14450            sameDay : '[Ònì ni] LT',
14451            nextDay : '[Ọ̀la ni] LT',
14452            nextWeek : 'dddd [Ọsẹ̀ tón\'bọ] [ni] LT',
14453            lastDay : '[Àna ni] LT',
14454            lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',
14455            sameElse : 'L'
14456        },
14457        relativeTime : {
14458            future : 'ní %s',
14459            past : '%s kọjá',
14460            s : 'ìsẹjú aayá die',
14461            ss :'aayá %d',
14462            m : 'ìsẹjú kan',
14463            mm : 'ìsẹjú %d',
14464            h : 'wákati kan',
14465            hh : 'wákati %d',
14466            d : 'ọjọ́ kan',
14467            dd : 'ọjọ́ %d',
14468            M : 'osù kan',
14469            MM : 'osù %d',
14470            y : 'ọdún kan',
14471            yy : 'ọdún %d'
14472        },
14473        dayOfMonthOrdinalParse : /ọjọ́\s\d{1,2}/,
14474        ordinal : 'ọjọ́ %d',
14475        week : {
14476            dow : 1, // Monday is the first day of the week.
14477            doy : 4 // The week that contains Jan 4th is the first week of the year.
14478        }
14479    });
14480
14481    //! moment.js locale configuration
14482
14483    hooks.defineLocale('zh-cn', {
14484        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
14485        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
14486        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
14487        weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),
14488        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
14489        longDateFormat : {
14490            LT : 'HH:mm',
14491            LTS : 'HH:mm:ss',
14492            L : 'YYYY/MM/DD',
14493            LL : 'YYYY年M月D日',
14494            LLL : 'YYYY年M月D日Ah点mm分',
14495            LLLL : 'YYYY年M月D日ddddAh点mm分',
14496            l : 'YYYY/M/D',
14497            ll : 'YYYY年M月D日',
14498            lll : 'YYYY年M月D日 HH:mm',
14499            llll : 'YYYY年M月D日dddd HH:mm'
14500        },
14501        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
14502        meridiemHour: function (hour, meridiem) {
14503            if (hour === 12) {
14504                hour = 0;
14505            }
14506            if (meridiem === '凌晨' || meridiem === '早上' ||
14507                    meridiem === '上午') {
14508                return hour;
14509            } else if (meridiem === '下午' || meridiem === '晚上') {
14510                return hour + 12;
14511            } else {
14512                // '中午'
14513                return hour >= 11 ? hour : hour + 12;
14514            }
14515        },
14516        meridiem : function (hour, minute, isLower) {
14517            var hm = hour * 100 + minute;
14518            if (hm < 600) {
14519                return '凌晨';
14520            } else if (hm < 900) {
14521                return '早上';
14522            } else if (hm < 1130) {
14523                return '上午';
14524            } else if (hm < 1230) {
14525                return '中午';
14526            } else if (hm < 1800) {
14527                return '下午';
14528            } else {
14529                return '晚上';
14530            }
14531        },
14532        calendar : {
14533            sameDay : '[今天]LT',
14534            nextDay : '[明天]LT',
14535            nextWeek : '[下]ddddLT',
14536            lastDay : '[昨天]LT',
14537            lastWeek : '[上]ddddLT',
14538            sameElse : 'L'
14539        },
14540        dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
14541        ordinal : function (number, period) {
14542            switch (period) {
14543                case 'd':
14544                case 'D':
14545                case 'DDD':
14546                    return number + '日';
14547                case 'M':
14548                    return number + '月';
14549                case 'w':
14550                case 'W':
14551                    return number + '周';
14552                default:
14553                    return number;
14554            }
14555        },
14556        relativeTime : {
14557            future : '%s内',
14558            past : '%s前',
14559            s : '几秒',
14560            ss : '%d 秒',
14561            m : '1 分钟',
14562            mm : '%d 分钟',
14563            h : '1 小时',
14564            hh : '%d 小时',
14565            d : '1 天',
14566            dd : '%d 天',
14567            M : '1 个月',
14568            MM : '%d 个月',
14569            y : '1 å¹´',
14570            yy : '%d å¹´'
14571        },
14572        week : {
14573            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
14574            dow : 1, // Monday is the first day of the week.
14575            doy : 4  // The week that contains Jan 4th is the first week of the year.
14576        }
14577    });
14578
14579    //! moment.js locale configuration
14580
14581    hooks.defineLocale('zh-hk', {
14582        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
14583        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
14584        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
14585        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
14586        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
14587        longDateFormat : {
14588            LT : 'HH:mm',
14589            LTS : 'HH:mm:ss',
14590            L : 'YYYY/MM/DD',
14591            LL : 'YYYY年M月D日',
14592            LLL : 'YYYY年M月D日 HH:mm',
14593            LLLL : 'YYYY年M月D日dddd HH:mm',
14594            l : 'YYYY/M/D',
14595            ll : 'YYYY年M月D日',
14596            lll : 'YYYY年M月D日 HH:mm',
14597            llll : 'YYYY年M月D日dddd HH:mm'
14598        },
14599        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
14600        meridiemHour : function (hour, meridiem) {
14601            if (hour === 12) {
14602                hour = 0;
14603            }
14604            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
14605                return hour;
14606            } else if (meridiem === '中午') {
14607                return hour >= 11 ? hour : hour + 12;
14608            } else if (meridiem === '下午' || meridiem === '晚上') {
14609                return hour + 12;
14610            }
14611        },
14612        meridiem : function (hour, minute, isLower) {
14613            var hm = hour * 100 + minute;
14614            if (hm < 600) {
14615                return '凌晨';
14616            } else if (hm < 900) {
14617                return '早上';
14618            } else if (hm < 1130) {
14619                return '上午';
14620            } else if (hm < 1230) {
14621                return '中午';
14622            } else if (hm < 1800) {
14623                return '下午';
14624            } else {
14625                return '晚上';
14626            }
14627        },
14628        calendar : {
14629            sameDay : '[今天]LT',
14630            nextDay : '[明天]LT',
14631            nextWeek : '[下]ddddLT',
14632            lastDay : '[昨天]LT',
14633            lastWeek : '[上]ddddLT',
14634            sameElse : 'L'
14635        },
14636        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
14637        ordinal : function (number, period) {
14638            switch (period) {
14639                case 'd' :
14640                case 'D' :
14641                case 'DDD' :
14642                    return number + '日';
14643                case 'M' :
14644                    return number + '月';
14645                case 'w' :
14646                case 'W' :
14647                    return number + '週';
14648                default :
14649                    return number;
14650            }
14651        },
14652        relativeTime : {
14653            future : '%s內',
14654            past : '%s前',
14655            s : '幾秒',
14656            ss : '%d 秒',
14657            m : '1 分鐘',
14658            mm : '%d 分鐘',
14659            h : '1 小時',
14660            hh : '%d 小時',
14661            d : '1 天',
14662            dd : '%d 天',
14663            M : '1 個月',
14664            MM : '%d 個月',
14665            y : '1 å¹´',
14666            yy : '%d å¹´'
14667        }
14668    });
14669
14670    //! moment.js locale configuration
14671
14672    hooks.defineLocale('zh-tw', {
14673        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
14674        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
14675        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
14676        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
14677        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
14678        longDateFormat : {
14679            LT : 'HH:mm',
14680            LTS : 'HH:mm:ss',
14681            L : 'YYYY/MM/DD',
14682            LL : 'YYYY年M月D日',
14683            LLL : 'YYYY年M月D日 HH:mm',
14684            LLLL : 'YYYY年M月D日dddd HH:mm',
14685            l : 'YYYY/M/D',
14686            ll : 'YYYY年M月D日',
14687            lll : 'YYYY年M月D日 HH:mm',
14688            llll : 'YYYY年M月D日dddd HH:mm'
14689        },
14690        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
14691        meridiemHour : function (hour, meridiem) {
14692            if (hour === 12) {
14693                hour = 0;
14694            }
14695            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
14696                return hour;
14697            } else if (meridiem === '中午') {
14698                return hour >= 11 ? hour : hour + 12;
14699            } else if (meridiem === '下午' || meridiem === '晚上') {
14700                return hour + 12;
14701            }
14702        },
14703        meridiem : function (hour, minute, isLower) {
14704            var hm = hour * 100 + minute;
14705            if (hm < 600) {
14706                return '凌晨';
14707            } else if (hm < 900) {
14708                return '早上';
14709            } else if (hm < 1130) {
14710                return '上午';
14711            } else if (hm < 1230) {
14712                return '中午';
14713            } else if (hm < 1800) {
14714                return '下午';
14715            } else {
14716                return '晚上';
14717            }
14718        },
14719        calendar : {
14720            sameDay : '[今天] LT',
14721            nextDay : '[明天] LT',
14722            nextWeek : '[下]dddd LT',
14723            lastDay : '[昨天] LT',
14724            lastWeek : '[上]dddd LT',
14725            sameElse : 'L'
14726        },
14727        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
14728        ordinal : function (number, period) {
14729            switch (period) {
14730                case 'd' :
14731                case 'D' :
14732                case 'DDD' :
14733                    return number + '日';
14734                case 'M' :
14735                    return number + '月';
14736                case 'w' :
14737                case 'W' :
14738                    return number + '週';
14739                default :
14740                    return number;
14741            }
14742        },
14743        relativeTime : {
14744            future : '%s內',
14745            past : '%s前',
14746            s : '幾秒',
14747            ss : '%d 秒',
14748            m : '1 分鐘',
14749            mm : '%d 分鐘',
14750            h : '1 小時',
14751            hh : '%d 小時',
14752            d : '1 天',
14753            dd : '%d 天',
14754            M : '1 個月',
14755            MM : '%d 個月',
14756            y : '1 å¹´',
14757            yy : '%d å¹´'
14758        }
14759    });
14760
14761    hooks.locale('en');
14762
14763    return hooks;
14764
14765})));

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