| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662 | //! moment.js//! version : 2.29.1//! authors : Tim Wood, Iskren Chernev, Moment.js contributors//! license : MIT//! momentjs.comvar hookCallback;function hooks() {    return hookCallback.apply(null, arguments);}// This is done to register the method called with moment()// without creating circular dependencies.function setHookCallback(callback) {    hookCallback = callback;}function isArray(input) {    return (        input instanceof Array ||        Object.prototype.toString.call(input) === '[object Array]'    );}function isObject(input) {    // IE8 will treat undefined and null as object if it wasn't for    // input != null    return (        input != null &&        Object.prototype.toString.call(input) === '[object Object]'    );}function hasOwnProp(a, b) {    return Object.prototype.hasOwnProperty.call(a, b);}function isObjectEmpty(obj) {    if (Object.getOwnPropertyNames) {        return Object.getOwnPropertyNames(obj).length === 0;    } else {        var k;        for (k in obj) {            if (hasOwnProp(obj, k)) {                return false;            }        }        return true;    }}function isUndefined(input) {    return input === void 0;}function isNumber(input) {    return (        typeof input === 'number' ||        Object.prototype.toString.call(input) === '[object Number]'    );}function isDate(input) {    return (        input instanceof Date ||        Object.prototype.toString.call(input) === '[object Date]'    );}function map(arr, fn) {    var res = [],        i;    for (i = 0; i < arr.length; ++i) {        res.push(fn(arr[i], i));    }    return res;}function extend(a, b) {    for (var i in b) {        if (hasOwnProp(b, i)) {            a[i] = b[i];        }    }    if (hasOwnProp(b, 'toString')) {        a.toString = b.toString;    }    if (hasOwnProp(b, 'valueOf')) {        a.valueOf = b.valueOf;    }    return a;}function createUTC(input, format, locale, strict) {    return createLocalOrUTC(input, format, locale, strict, true).utc();}function defaultParsingFlags() {    // We need to deep clone this object.    return {        empty: false,        unusedTokens: [],        unusedInput: [],        overflow: -2,        charsLeftOver: 0,        nullInput: false,        invalidEra: null,        invalidMonth: null,        invalidFormat: false,        userInvalidated: false,        iso: false,        parsedDateParts: [],        era: null,        meridiem: null,        rfc2822: false,        weekdayMismatch: false,    };}function getParsingFlags(m) {    if (m._pf == null) {        m._pf = defaultParsingFlags();    }    return m._pf;}var some;if (Array.prototype.some) {    some = Array.prototype.some;} else {    some = function (fun) {        var t = Object(this),            len = t.length >>> 0,            i;        for (i = 0; i < len; i++) {            if (i in t && fun.call(this, t[i], i, t)) {                return true;            }        }        return false;    };}function isValid(m) {    if (m._isValid == null) {        var flags = getParsingFlags(m),            parsedParts = some.call(flags.parsedDateParts, function (i) {                return i != null;            }),            isNowValid =                !isNaN(m._d.getTime()) &&                flags.overflow < 0 &&                !flags.empty &&                !flags.invalidEra &&                !flags.invalidMonth &&                !flags.invalidWeekday &&                !flags.weekdayMismatch &&                !flags.nullInput &&                !flags.invalidFormat &&                !flags.userInvalidated &&                (!flags.meridiem || (flags.meridiem && parsedParts));        if (m._strict) {            isNowValid =                isNowValid &&                flags.charsLeftOver === 0 &&                flags.unusedTokens.length === 0 &&                flags.bigHour === undefined;        }        if (Object.isFrozen == null || !Object.isFrozen(m)) {            m._isValid = isNowValid;        } else {            return isNowValid;        }    }    return m._isValid;}function createInvalid(flags) {    var m = createUTC(NaN);    if (flags != null) {        extend(getParsingFlags(m), flags);    } else {        getParsingFlags(m).userInvalidated = true;    }    return m;}// Plugins that add properties should also add the key here (null value),// so we can properly clone ourselves.var momentProperties = (hooks.momentProperties = []),    updateInProgress = false;function copyConfig(to, from) {    var i, prop, val;    if (!isUndefined(from._isAMomentObject)) {        to._isAMomentObject = from._isAMomentObject;    }    if (!isUndefined(from._i)) {        to._i = from._i;    }    if (!isUndefined(from._f)) {        to._f = from._f;    }    if (!isUndefined(from._l)) {        to._l = from._l;    }    if (!isUndefined(from._strict)) {        to._strict = from._strict;    }    if (!isUndefined(from._tzm)) {        to._tzm = from._tzm;    }    if (!isUndefined(from._isUTC)) {        to._isUTC = from._isUTC;    }    if (!isUndefined(from._offset)) {        to._offset = from._offset;    }    if (!isUndefined(from._pf)) {        to._pf = getParsingFlags(from);    }    if (!isUndefined(from._locale)) {        to._locale = from._locale;    }    if (momentProperties.length > 0) {        for (i = 0; i < momentProperties.length; i++) {            prop = momentProperties[i];            val = from[prop];            if (!isUndefined(val)) {                to[prop] = val;            }        }    }    return to;}// Moment prototype objectfunction Moment(config) {    copyConfig(this, config);    this._d = new Date(config._d != null ? config._d.getTime() : NaN);    if (!this.isValid()) {        this._d = new Date(NaN);    }    // Prevent infinite loop in case updateOffset creates new moment    // objects.    if (updateInProgress === false) {        updateInProgress = true;        hooks.updateOffset(this);        updateInProgress = false;    }}function isMoment(obj) {    return (        obj instanceof Moment || (obj != null && obj._isAMomentObject != null)    );}function warn(msg) {    if (        hooks.suppressDeprecationWarnings === false &&        typeof console !== 'undefined' &&        console.warn    ) {        console.warn('Deprecation warning: ' + msg);    }}function deprecate(msg, fn) {    var firstTime = true;    return extend(function () {        if (hooks.deprecationHandler != null) {            hooks.deprecationHandler(null, msg);        }        if (firstTime) {            var args = [],                arg,                i,                key;            for (i = 0; i < arguments.length; i++) {                arg = '';                if (typeof arguments[i] === 'object') {                    arg += '\n[' + i + '] ';                    for (key in arguments[0]) {                        if (hasOwnProp(arguments[0], key)) {                            arg += key + ': ' + arguments[0][key] + ', ';                        }                    }                    arg = arg.slice(0, -2); // Remove trailing comma and space                } else {                    arg = arguments[i];                }                args.push(arg);            }            warn(                msg +                    '\nArguments: ' +                    Array.prototype.slice.call(args).join('') +                    '\n' +                    new Error().stack            );            firstTime = false;        }        return fn.apply(this, arguments);    }, fn);}var deprecations = {};function deprecateSimple(name, msg) {    if (hooks.deprecationHandler != null) {        hooks.deprecationHandler(name, msg);    }    if (!deprecations[name]) {        warn(msg);        deprecations[name] = true;    }}hooks.suppressDeprecationWarnings = false;hooks.deprecationHandler = null;function isFunction(input) {    return (        (typeof Function !== 'undefined' && input instanceof Function) ||        Object.prototype.toString.call(input) === '[object Function]'    );}function set(config) {    var prop, i;    for (i in config) {        if (hasOwnProp(config, i)) {            prop = config[i];            if (isFunction(prop)) {                this[i] = prop;            } else {                this['_' + i] = prop;            }        }    }    this._config = config;    // Lenient ordinal parsing accepts just a number in addition to    // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.    // TODO: Remove "ordinalParse" fallback in next major release.    this._dayOfMonthOrdinalParseLenient = new RegExp(        (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +            '|' +            /\d{1,2}/.source    );}function mergeConfigs(parentConfig, childConfig) {    var res = extend({}, parentConfig),        prop;    for (prop in childConfig) {        if (hasOwnProp(childConfig, prop)) {            if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {                res[prop] = {};                extend(res[prop], parentConfig[prop]);                extend(res[prop], childConfig[prop]);            } else if (childConfig[prop] != null) {                res[prop] = childConfig[prop];            } else {                delete res[prop];            }        }    }    for (prop in parentConfig) {        if (            hasOwnProp(parentConfig, prop) &&            !hasOwnProp(childConfig, prop) &&            isObject(parentConfig[prop])        ) {            // make sure changes to properties don't modify parent config            res[prop] = extend({}, res[prop]);        }    }    return res;}function Locale(config) {    if (config != null) {        this.set(config);    }}var keys;if (Object.keys) {    keys = Object.keys;} else {    keys = function (obj) {        var i,            res = [];        for (i in obj) {            if (hasOwnProp(obj, i)) {                res.push(i);            }        }        return res;    };}var defaultCalendar = {    sameDay: '[Today at] LT',    nextDay: '[Tomorrow at] LT',    nextWeek: 'dddd [at] LT',    lastDay: '[Yesterday at] LT',    lastWeek: '[Last] dddd [at] LT',    sameElse: 'L',};function calendar(key, mom, now) {    var output = this._calendar[key] || this._calendar['sameElse'];    return isFunction(output) ? output.call(mom, now) : output;}function zeroFill(number, targetLength, forceSign) {    var absNumber = '' + Math.abs(number),        zerosToFill = targetLength - absNumber.length,        sign = number >= 0;    return (        (sign ? (forceSign ? '+' : '') : '-') +        Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +        absNumber    );}var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,    localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,    formatFunctions = {},    formatTokenFunctions = {};// token:    'M'// padded:   ['MM', 2]// ordinal:  'Mo'// callback: function () { this.month() + 1 }function addFormatToken(token, padded, ordinal, callback) {    var func = callback;    if (typeof callback === 'string') {        func = function () {            return this[callback]();        };    }    if (token) {        formatTokenFunctions[token] = func;    }    if (padded) {        formatTokenFunctions[padded[0]] = function () {            return zeroFill(func.apply(this, arguments), padded[1], padded[2]);        };    }    if (ordinal) {        formatTokenFunctions[ordinal] = function () {            return this.localeData().ordinal(                func.apply(this, arguments),                token            );        };    }}function removeFormattingTokens(input) {    if (input.match(/\[[\s\S]/)) {        return input.replace(/^\[|\]$/g, '');    }    return input.replace(/\\/g, '');}function makeFormatFunction(format) {    var array = format.match(formattingTokens),        i,        length;    for (i = 0, length = array.length; i < length; i++) {        if (formatTokenFunctions[array[i]]) {            array[i] = formatTokenFunctions[array[i]];        } else {            array[i] = removeFormattingTokens(array[i]);        }    }    return function (mom) {        var output = '',            i;        for (i = 0; i < length; i++) {            output += isFunction(array[i])                ? array[i].call(mom, format)                : array[i];        }        return output;    };}// format date using native date objectfunction formatMoment(m, format) {    if (!m.isValid()) {        return m.localeData().invalidDate();    }    format = expandFormat(format, m.localeData());    formatFunctions[format] =        formatFunctions[format] || makeFormatFunction(format);    return formatFunctions[format](m);}function expandFormat(format, locale) {    var i = 5;    function replaceLongDateFormatTokens(input) {        return locale.longDateFormat(input) || input;    }    localFormattingTokens.lastIndex = 0;    while (i >= 0 && localFormattingTokens.test(format)) {        format = format.replace(            localFormattingTokens,            replaceLongDateFormatTokens        );        localFormattingTokens.lastIndex = 0;        i -= 1;    }    return format;}var defaultLongDateFormat = {    LTS: 'h:mm:ss A',    LT: 'h:mm A',    L: 'MM/DD/YYYY',    LL: 'MMMM D, YYYY',    LLL: 'MMMM D, YYYY h:mm A',    LLLL: 'dddd, MMMM D, YYYY h:mm A',};function longDateFormat(key) {    var format = this._longDateFormat[key],        formatUpper = this._longDateFormat[key.toUpperCase()];    if (format || !formatUpper) {        return format;    }    this._longDateFormat[key] = formatUpper        .match(formattingTokens)        .map(function (tok) {            if (                tok === 'MMMM' ||                tok === 'MM' ||                tok === 'DD' ||                tok === 'dddd'            ) {                return tok.slice(1);            }            return tok;        })        .join('');    return this._longDateFormat[key];}var defaultInvalidDate = 'Invalid date';function invalidDate() {    return this._invalidDate;}var defaultOrdinal = '%d',    defaultDayOfMonthOrdinalParse = /\d{1,2}/;function ordinal(number) {    return this._ordinal.replace('%d', number);}var defaultRelativeTime = {    future: 'in %s',    past: '%s ago',    s: 'a few seconds',    ss: '%d seconds',    m: 'a minute',    mm: '%d minutes',    h: 'an hour',    hh: '%d hours',    d: 'a day',    dd: '%d days',    w: 'a week',    ww: '%d weeks',    M: 'a month',    MM: '%d months',    y: 'a year',    yy: '%d years',};function relativeTime(number, withoutSuffix, string, isFuture) {    var output = this._relativeTime[string];    return isFunction(output)        ? output(number, withoutSuffix, string, isFuture)        : output.replace(/%d/i, number);}function pastFuture(diff, output) {    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];    return isFunction(format) ? format(output) : format.replace(/%s/i, output);}var aliases = {};function addUnitAlias(unit, shorthand) {    var lowerCase = unit.toLowerCase();    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;}function normalizeUnits(units) {    return typeof units === 'string'        ? aliases[units] || aliases[units.toLowerCase()]        : undefined;}function normalizeObjectUnits(inputObject) {    var normalizedInput = {},        normalizedProp,        prop;    for (prop in inputObject) {        if (hasOwnProp(inputObject, prop)) {            normalizedProp = normalizeUnits(prop);            if (normalizedProp) {                normalizedInput[normalizedProp] = inputObject[prop];            }        }    }    return normalizedInput;}var priorities = {};function addUnitPriority(unit, priority) {    priorities[unit] = priority;}function getPrioritizedUnits(unitsObj) {    var units = [],        u;    for (u in unitsObj) {        if (hasOwnProp(unitsObj, u)) {            units.push({ unit: u, priority: priorities[u] });        }    }    units.sort(function (a, b) {        return a.priority - b.priority;    });    return units;}function isLeapYear(year) {    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;}function absFloor(number) {    if (number < 0) {        // -0 -> 0        return Math.ceil(number) || 0;    } else {        return Math.floor(number);    }}function toInt(argumentForCoercion) {    var coercedNumber = +argumentForCoercion,        value = 0;    if (coercedNumber !== 0 && isFinite(coercedNumber)) {        value = absFloor(coercedNumber);    }    return value;}function makeGetSet(unit, keepTime) {    return function (value) {        if (value != null) {            set$1(this, unit, value);            hooks.updateOffset(this, keepTime);            return this;        } else {            return get(this, unit);        }    };}function get(mom, unit) {    return mom.isValid()        ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()        : NaN;}function set$1(mom, unit, value) {    if (mom.isValid() && !isNaN(value)) {        if (            unit === 'FullYear' &&            isLeapYear(mom.year()) &&            mom.month() === 1 &&            mom.date() === 29        ) {            value = toInt(value);            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](                value,                mom.month(),                daysInMonth(value, mom.month())            );        } else {            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);        }    }}// MOMENTSfunction stringGet(units) {    units = normalizeUnits(units);    if (isFunction(this[units])) {        return this[units]();    }    return this;}function stringSet(units, value) {    if (typeof units === 'object') {        units = normalizeObjectUnits(units);        var prioritized = getPrioritizedUnits(units),            i;        for (i = 0; i < prioritized.length; i++) {            this[prioritized[i].unit](units[prioritized[i].unit]);        }    } else {        units = normalizeUnits(units);        if (isFunction(this[units])) {            return this[units](value);        }    }    return this;}var match1 = /\d/, //       0 - 9    match2 = /\d\d/, //      00 - 99    match3 = /\d{3}/, //     000 - 999    match4 = /\d{4}/, //    0000 - 9999    match6 = /[+-]?\d{6}/, // -999999 - 999999    match1to2 = /\d\d?/, //       0 - 99    match3to4 = /\d\d\d\d?/, //     999 - 9999    match5to6 = /\d\d\d\d\d\d?/, //   99999 - 999999    match1to3 = /\d{1,3}/, //       0 - 999    match1to4 = /\d{1,4}/, //       0 - 9999    match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999    matchUnsigned = /\d+/, //       0 - inf    matchSigned = /[+-]?\d+/, //    -inf - inf    matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z    matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z    matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123    // any word (or two) characters or numbers including two/three word month in arabic.    // includes scottish gaelic two word and hyphenated months    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,    regexes;regexes = {};function addRegexToken(token, regex, strictRegex) {    regexes[token] = isFunction(regex)        ? regex        : function (isStrict, localeData) {              return isStrict && strictRegex ? strictRegex : regex;          };}function getParseRegexForToken(token, config) {    if (!hasOwnProp(regexes, token)) {        return new RegExp(unescapeFormat(token));    }    return regexes[token](config._strict, config._locale);}// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascriptfunction unescapeFormat(s) {    return regexEscape(        s            .replace('\\', '')            .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (                matched,                p1,                p2,                p3,                p4            ) {                return p1 || p2 || p3 || p4;            })    );}function regexEscape(s) {    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');}var tokens = {};function addParseToken(token, callback) {    var i,        func = callback;    if (typeof token === 'string') {        token = [token];    }    if (isNumber(callback)) {        func = function (input, array) {            array[callback] = toInt(input);        };    }    for (i = 0; i < token.length; i++) {        tokens[token[i]] = func;    }}function addWeekParseToken(token, callback) {    addParseToken(token, function (input, array, config, token) {        config._w = config._w || {};        callback(input, config._w, config, token);    });}function addTimeToArrayFromToken(token, input, config) {    if (input != null && hasOwnProp(tokens, token)) {        tokens[token](input, config._a, config, token);    }}var YEAR = 0,    MONTH = 1,    DATE = 2,    HOUR = 3,    MINUTE = 4,    SECOND = 5,    MILLISECOND = 6,    WEEK = 7,    WEEKDAY = 8;function mod(n, x) {    return ((n % x) + x) % x;}var indexOf;if (Array.prototype.indexOf) {    indexOf = Array.prototype.indexOf;} else {    indexOf = function (o) {        // I know        var i;        for (i = 0; i < this.length; ++i) {            if (this[i] === o) {                return i;            }        }        return -1;    };}function daysInMonth(year, month) {    if (isNaN(year) || isNaN(month)) {        return NaN;    }    var modMonth = mod(month, 12);    year += (month - modMonth) / 12;    return modMonth === 1        ? isLeapYear(year)            ? 29            : 28        : 31 - ((modMonth % 7) % 2);}// FORMATTINGaddFormatToken('M', ['MM', 2], 'Mo', function () {    return this.month() + 1;});addFormatToken('MMM', 0, 0, function (format) {    return this.localeData().monthsShort(this, format);});addFormatToken('MMMM', 0, 0, function (format) {    return this.localeData().months(this, format);});// ALIASESaddUnitAlias('month', 'M');// PRIORITYaddUnitPriority('month', 8);// PARSINGaddRegexToken('M', match1to2);addRegexToken('MM', match1to2, match2);addRegexToken('MMM', function (isStrict, locale) {    return locale.monthsShortRegex(isStrict);});addRegexToken('MMMM', function (isStrict, locale) {    return locale.monthsRegex(isStrict);});addParseToken(['M', 'MM'], function (input, array) {    array[MONTH] = toInt(input) - 1;});addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {    var month = config._locale.monthsParse(input, token, config._strict);    // if we didn't find a month name, mark the date as invalid.    if (month != null) {        array[MONTH] = month;    } else {        getParsingFlags(config).invalidMonth = input;    }});// LOCALESvar defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(        '_'    ),    defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(        '_'    ),    MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,    defaultMonthsShortRegex = matchWord,    defaultMonthsRegex = matchWord;function localeMonths(m, format) {    if (!m) {        return isArray(this._months)            ? this._months            : this._months['standalone'];    }    return isArray(this._months)        ? this._months[m.month()]        : this._months[              (this._months.isFormat || MONTHS_IN_FORMAT).test(format)                  ? 'format'                  : 'standalone'          ][m.month()];}function localeMonthsShort(m, format) {    if (!m) {        return isArray(this._monthsShort)            ? this._monthsShort            : this._monthsShort['standalone'];    }    return isArray(this._monthsShort)        ? this._monthsShort[m.month()]        : this._monthsShort[              MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'          ][m.month()];}function handleStrictParse(monthName, format, strict) {    var i,        ii,        mom,        llc = monthName.toLocaleLowerCase();    if (!this._monthsParse) {        // this is not used        this._monthsParse = [];        this._longMonthsParse = [];        this._shortMonthsParse = [];        for (i = 0; i < 12; ++i) {            mom = createUTC([2000, i]);            this._shortMonthsParse[i] = this.monthsShort(                mom,                ''            ).toLocaleLowerCase();            this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();        }    }    if (strict) {        if (format === 'MMM') {            ii = indexOf.call(this._shortMonthsParse, llc);            return ii !== -1 ? ii : null;        } else {            ii = indexOf.call(this._longMonthsParse, llc);            return ii !== -1 ? ii : null;        }    } else {        if (format === 'MMM') {            ii = indexOf.call(this._shortMonthsParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf.call(this._longMonthsParse, llc);            return ii !== -1 ? ii : null;        } else {            ii = indexOf.call(this._longMonthsParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf.call(this._shortMonthsParse, llc);            return ii !== -1 ? ii : null;        }    }}function localeMonthsParse(monthName, format, strict) {    var i, mom, regex;    if (this._monthsParseExact) {        return handleStrictParse.call(this, monthName, format, strict);    }    if (!this._monthsParse) {        this._monthsParse = [];        this._longMonthsParse = [];        this._shortMonthsParse = [];    }    // TODO: add sorting    // Sorting makes sure if one month (or abbr) is a prefix of another    // see sorting in computeMonthsParse    for (i = 0; i < 12; i++) {        // make the regex if we don't have it already        mom = createUTC([2000, i]);        if (strict && !this._longMonthsParse[i]) {            this._longMonthsParse[i] = new RegExp(                '^' + this.months(mom, '').replace('.', '') + '$',                'i'            );            this._shortMonthsParse[i] = new RegExp(                '^' + this.monthsShort(mom, '').replace('.', '') + '$',                'i'            );        }        if (!strict && !this._monthsParse[i]) {            regex =                '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');            this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');        }        // test the regex        if (            strict &&            format === 'MMMM' &&            this._longMonthsParse[i].test(monthName)        ) {            return i;        } else if (            strict &&            format === 'MMM' &&            this._shortMonthsParse[i].test(monthName)        ) {            return i;        } else if (!strict && this._monthsParse[i].test(monthName)) {            return i;        }    }}// MOMENTSfunction setMonth(mom, value) {    var dayOfMonth;    if (!mom.isValid()) {        // No op        return mom;    }    if (typeof value === 'string') {        if (/^\d+$/.test(value)) {            value = toInt(value);        } else {            value = mom.localeData().monthsParse(value);            // TODO: Another silent failure?            if (!isNumber(value)) {                return mom;            }        }    }    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);    return mom;}function getSetMonth(value) {    if (value != null) {        setMonth(this, value);        hooks.updateOffset(this, true);        return this;    } else {        return get(this, 'Month');    }}function getDaysInMonth() {    return daysInMonth(this.year(), this.month());}function monthsShortRegex(isStrict) {    if (this._monthsParseExact) {        if (!hasOwnProp(this, '_monthsRegex')) {            computeMonthsParse.call(this);        }        if (isStrict) {            return this._monthsShortStrictRegex;        } else {            return this._monthsShortRegex;        }    } else {        if (!hasOwnProp(this, '_monthsShortRegex')) {            this._monthsShortRegex = defaultMonthsShortRegex;        }        return this._monthsShortStrictRegex && isStrict            ? this._monthsShortStrictRegex            : this._monthsShortRegex;    }}function monthsRegex(isStrict) {    if (this._monthsParseExact) {        if (!hasOwnProp(this, '_monthsRegex')) {            computeMonthsParse.call(this);        }        if (isStrict) {            return this._monthsStrictRegex;        } else {            return this._monthsRegex;        }    } else {        if (!hasOwnProp(this, '_monthsRegex')) {            this._monthsRegex = defaultMonthsRegex;        }        return this._monthsStrictRegex && isStrict            ? this._monthsStrictRegex            : this._monthsRegex;    }}function computeMonthsParse() {    function cmpLenRev(a, b) {        return b.length - a.length;    }    var shortPieces = [],        longPieces = [],        mixedPieces = [],        i,        mom;    for (i = 0; i < 12; i++) {        // make the regex if we don't have it already        mom = createUTC([2000, i]);        shortPieces.push(this.monthsShort(mom, ''));        longPieces.push(this.months(mom, ''));        mixedPieces.push(this.months(mom, ''));        mixedPieces.push(this.monthsShort(mom, ''));    }    // Sorting makes sure if one month (or abbr) is a prefix of another it    // will match the longer piece.    shortPieces.sort(cmpLenRev);    longPieces.sort(cmpLenRev);    mixedPieces.sort(cmpLenRev);    for (i = 0; i < 12; i++) {        shortPieces[i] = regexEscape(shortPieces[i]);        longPieces[i] = regexEscape(longPieces[i]);    }    for (i = 0; i < 24; i++) {        mixedPieces[i] = regexEscape(mixedPieces[i]);    }    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');    this._monthsShortRegex = this._monthsRegex;    this._monthsStrictRegex = new RegExp(        '^(' + longPieces.join('|') + ')',        'i'    );    this._monthsShortStrictRegex = new RegExp(        '^(' + shortPieces.join('|') + ')',        'i'    );}// FORMATTINGaddFormatToken('Y', 0, 0, function () {    var y = this.year();    return y <= 9999 ? zeroFill(y, 4) : '+' + y;});addFormatToken(0, ['YY', 2], 0, function () {    return this.year() % 100;});addFormatToken(0, ['YYYY', 4], 0, 'year');addFormatToken(0, ['YYYYY', 5], 0, 'year');addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');// ALIASESaddUnitAlias('year', 'y');// PRIORITIESaddUnitPriority('year', 1);// PARSINGaddRegexToken('Y', matchSigned);addRegexToken('YY', match1to2, match2);addRegexToken('YYYY', match1to4, match4);addRegexToken('YYYYY', match1to6, match6);addRegexToken('YYYYYY', match1to6, match6);addParseToken(['YYYYY', 'YYYYYY'], YEAR);addParseToken('YYYY', function (input, array) {    array[YEAR] =        input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);});addParseToken('YY', function (input, array) {    array[YEAR] = hooks.parseTwoDigitYear(input);});addParseToken('Y', function (input, array) {    array[YEAR] = parseInt(input, 10);});// HELPERSfunction daysInYear(year) {    return isLeapYear(year) ? 366 : 365;}// HOOKShooks.parseTwoDigitYear = function (input) {    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);};// MOMENTSvar getSetYear = makeGetSet('FullYear', true);function getIsLeapYear() {    return isLeapYear(this.year());}function createDate(y, m, d, h, M, s, ms) {    // can't just apply() to create a date:    // https://stackoverflow.com/q/181348    var date;    // the date constructor remaps years 0-99 to 1900-1999    if (y < 100 && y >= 0) {        // preserve leap years using a full 400 year cycle, then reset        date = new Date(y + 400, m, d, h, M, s, ms);        if (isFinite(date.getFullYear())) {            date.setFullYear(y);        }    } else {        date = new Date(y, m, d, h, M, s, ms);    }    return date;}function createUTCDate(y) {    var date, args;    // the Date.UTC function remaps years 0-99 to 1900-1999    if (y < 100 && y >= 0) {        args = Array.prototype.slice.call(arguments);        // preserve leap years using a full 400 year cycle, then reset        args[0] = y + 400;        date = new Date(Date.UTC.apply(null, args));        if (isFinite(date.getUTCFullYear())) {            date.setUTCFullYear(y);        }    } else {        date = new Date(Date.UTC.apply(null, arguments));    }    return date;}// start-of-first-week - start-of-yearfunction firstWeekOffset(year, dow, doy) {    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)        fwd = 7 + dow - doy,        // first-week day local weekday -- which local weekday is fwd        fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;    return -fwdlw + fwd - 1;}// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekdayfunction dayOfYearFromWeeks(year, week, weekday, dow, doy) {    var localWeekday = (7 + weekday - dow) % 7,        weekOffset = firstWeekOffset(year, dow, doy),        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,        resYear,        resDayOfYear;    if (dayOfYear <= 0) {        resYear = year - 1;        resDayOfYear = daysInYear(resYear) + dayOfYear;    } else if (dayOfYear > daysInYear(year)) {        resYear = year + 1;        resDayOfYear = dayOfYear - daysInYear(year);    } else {        resYear = year;        resDayOfYear = dayOfYear;    }    return {        year: resYear,        dayOfYear: resDayOfYear,    };}function weekOfYear(mom, dow, doy) {    var weekOffset = firstWeekOffset(mom.year(), dow, doy),        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,        resWeek,        resYear;    if (week < 1) {        resYear = mom.year() - 1;        resWeek = week + weeksInYear(resYear, dow, doy);    } else if (week > weeksInYear(mom.year(), dow, doy)) {        resWeek = week - weeksInYear(mom.year(), dow, doy);        resYear = mom.year() + 1;    } else {        resYear = mom.year();        resWeek = week;    }    return {        week: resWeek,        year: resYear,    };}function weeksInYear(year, dow, doy) {    var weekOffset = firstWeekOffset(year, dow, doy),        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;}// FORMATTINGaddFormatToken('w', ['ww', 2], 'wo', 'week');addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');// ALIASESaddUnitAlias('week', 'w');addUnitAlias('isoWeek', 'W');// PRIORITIESaddUnitPriority('week', 5);addUnitPriority('isoWeek', 5);// PARSINGaddRegexToken('w', match1to2);addRegexToken('ww', match1to2, match2);addRegexToken('W', match1to2);addRegexToken('WW', match1to2, match2);addWeekParseToken(['w', 'ww', 'W', 'WW'], function (    input,    week,    config,    token) {    week[token.substr(0, 1)] = toInt(input);});// HELPERS// LOCALESfunction localeWeek(mom) {    return weekOfYear(mom, this._week.dow, this._week.doy).week;}var defaultLocaleWeek = {    dow: 0, // Sunday is the first day of the week.    doy: 6, // The week that contains Jan 6th is the first week of the year.};function localeFirstDayOfWeek() {    return this._week.dow;}function localeFirstDayOfYear() {    return this._week.doy;}// MOMENTSfunction getSetWeek(input) {    var week = this.localeData().week(this);    return input == null ? week : this.add((input - week) * 7, 'd');}function getSetISOWeek(input) {    var week = weekOfYear(this, 1, 4).week;    return input == null ? week : this.add((input - week) * 7, 'd');}// FORMATTINGaddFormatToken('d', 0, 'do', 'day');addFormatToken('dd', 0, 0, function (format) {    return this.localeData().weekdaysMin(this, format);});addFormatToken('ddd', 0, 0, function (format) {    return this.localeData().weekdaysShort(this, format);});addFormatToken('dddd', 0, 0, function (format) {    return this.localeData().weekdays(this, format);});addFormatToken('e', 0, 0, 'weekday');addFormatToken('E', 0, 0, 'isoWeekday');// ALIASESaddUnitAlias('day', 'd');addUnitAlias('weekday', 'e');addUnitAlias('isoWeekday', 'E');// PRIORITYaddUnitPriority('day', 11);addUnitPriority('weekday', 11);addUnitPriority('isoWeekday', 11);// PARSINGaddRegexToken('d', match1to2);addRegexToken('e', match1to2);addRegexToken('E', match1to2);addRegexToken('dd', function (isStrict, locale) {    return locale.weekdaysMinRegex(isStrict);});addRegexToken('ddd', function (isStrict, locale) {    return locale.weekdaysShortRegex(isStrict);});addRegexToken('dddd', function (isStrict, locale) {    return locale.weekdaysRegex(isStrict);});addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {    var weekday = config._locale.weekdaysParse(input, token, config._strict);    // if we didn't get a weekday name, mark the date as invalid    if (weekday != null) {        week.d = weekday;    } else {        getParsingFlags(config).invalidWeekday = input;    }});addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {    week[token] = toInt(input);});// HELPERSfunction parseWeekday(input, locale) {    if (typeof input !== 'string') {        return input;    }    if (!isNaN(input)) {        return parseInt(input, 10);    }    input = locale.weekdaysParse(input);    if (typeof input === 'number') {        return input;    }    return null;}function parseIsoWeekday(input, locale) {    if (typeof input === 'string') {        return locale.weekdaysParse(input) % 7 || 7;    }    return isNaN(input) ? null : input;}// LOCALESfunction shiftWeekdays(ws, n) {    return ws.slice(n, 7).concat(ws.slice(0, n));}var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(        '_'    ),    defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),    defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),    defaultWeekdaysRegex = matchWord,    defaultWeekdaysShortRegex = matchWord,    defaultWeekdaysMinRegex = matchWord;function localeWeekdays(m, format) {    var weekdays = isArray(this._weekdays)        ? this._weekdays        : this._weekdays[              m && m !== true && this._weekdays.isFormat.test(format)                  ? 'format'                  : 'standalone'          ];    return m === true        ? shiftWeekdays(weekdays, this._week.dow)        : m        ? weekdays[m.day()]        : weekdays;}function localeWeekdaysShort(m) {    return m === true        ? shiftWeekdays(this._weekdaysShort, this._week.dow)        : m        ? this._weekdaysShort[m.day()]        : this._weekdaysShort;}function localeWeekdaysMin(m) {    return m === true        ? shiftWeekdays(this._weekdaysMin, this._week.dow)        : m        ? this._weekdaysMin[m.day()]        : this._weekdaysMin;}function handleStrictParse$1(weekdayName, format, strict) {    var i,        ii,        mom,        llc = weekdayName.toLocaleLowerCase();    if (!this._weekdaysParse) {        this._weekdaysParse = [];        this._shortWeekdaysParse = [];        this._minWeekdaysParse = [];        for (i = 0; i < 7; ++i) {            mom = createUTC([2000, 1]).day(i);            this._minWeekdaysParse[i] = this.weekdaysMin(                mom,                ''            ).toLocaleLowerCase();            this._shortWeekdaysParse[i] = this.weekdaysShort(                mom,                ''            ).toLocaleLowerCase();            this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();        }    }    if (strict) {        if (format === 'dddd') {            ii = indexOf.call(this._weekdaysParse, llc);            return ii !== -1 ? ii : null;        } else if (format === 'ddd') {            ii = indexOf.call(this._shortWeekdaysParse, llc);            return ii !== -1 ? ii : null;        } else {            ii = indexOf.call(this._minWeekdaysParse, llc);            return ii !== -1 ? ii : null;        }    } else {        if (format === 'dddd') {            ii = indexOf.call(this._weekdaysParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf.call(this._shortWeekdaysParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf.call(this._minWeekdaysParse, llc);            return ii !== -1 ? ii : null;        } else if (format === 'ddd') {            ii = indexOf.call(this._shortWeekdaysParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf.call(this._weekdaysParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf.call(this._minWeekdaysParse, llc);            return ii !== -1 ? ii : null;        } else {            ii = indexOf.call(this._minWeekdaysParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf.call(this._weekdaysParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf.call(this._shortWeekdaysParse, llc);            return ii !== -1 ? ii : null;        }    }}function localeWeekdaysParse(weekdayName, format, strict) {    var i, mom, regex;    if (this._weekdaysParseExact) {        return handleStrictParse$1.call(this, weekdayName, format, strict);    }    if (!this._weekdaysParse) {        this._weekdaysParse = [];        this._minWeekdaysParse = [];        this._shortWeekdaysParse = [];        this._fullWeekdaysParse = [];    }    for (i = 0; i < 7; i++) {        // make the regex if we don't have it already        mom = createUTC([2000, 1]).day(i);        if (strict && !this._fullWeekdaysParse[i]) {            this._fullWeekdaysParse[i] = new RegExp(                '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',                'i'            );            this._shortWeekdaysParse[i] = new RegExp(                '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',                'i'            );            this._minWeekdaysParse[i] = new RegExp(                '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',                'i'            );        }        if (!this._weekdaysParse[i]) {            regex =                '^' +                this.weekdays(mom, '') +                '|^' +                this.weekdaysShort(mom, '') +                '|^' +                this.weekdaysMin(mom, '');            this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');        }        // test the regex        if (            strict &&            format === 'dddd' &&            this._fullWeekdaysParse[i].test(weekdayName)        ) {            return i;        } else if (            strict &&            format === 'ddd' &&            this._shortWeekdaysParse[i].test(weekdayName)        ) {            return i;        } else if (            strict &&            format === 'dd' &&            this._minWeekdaysParse[i].test(weekdayName)        ) {            return i;        } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {            return i;        }    }}// MOMENTSfunction getSetDayOfWeek(input) {    if (!this.isValid()) {        return input != null ? this : NaN;    }    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();    if (input != null) {        input = parseWeekday(input, this.localeData());        return this.add(input - day, 'd');    } else {        return day;    }}function getSetLocaleDayOfWeek(input) {    if (!this.isValid()) {        return input != null ? this : NaN;    }    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;    return input == null ? weekday : this.add(input - weekday, 'd');}function getSetISODayOfWeek(input) {    if (!this.isValid()) {        return input != null ? this : NaN;    }    // behaves the same as moment#day except    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)    // as a setter, sunday should belong to the previous week.    if (input != null) {        var weekday = parseIsoWeekday(input, this.localeData());        return this.day(this.day() % 7 ? weekday : weekday - 7);    } else {        return this.day() || 7;    }}function weekdaysRegex(isStrict) {    if (this._weekdaysParseExact) {        if (!hasOwnProp(this, '_weekdaysRegex')) {            computeWeekdaysParse.call(this);        }        if (isStrict) {            return this._weekdaysStrictRegex;        } else {            return this._weekdaysRegex;        }    } else {        if (!hasOwnProp(this, '_weekdaysRegex')) {            this._weekdaysRegex = defaultWeekdaysRegex;        }        return this._weekdaysStrictRegex && isStrict            ? this._weekdaysStrictRegex            : this._weekdaysRegex;    }}function weekdaysShortRegex(isStrict) {    if (this._weekdaysParseExact) {        if (!hasOwnProp(this, '_weekdaysRegex')) {            computeWeekdaysParse.call(this);        }        if (isStrict) {            return this._weekdaysShortStrictRegex;        } else {            return this._weekdaysShortRegex;        }    } else {        if (!hasOwnProp(this, '_weekdaysShortRegex')) {            this._weekdaysShortRegex = defaultWeekdaysShortRegex;        }        return this._weekdaysShortStrictRegex && isStrict            ? this._weekdaysShortStrictRegex            : this._weekdaysShortRegex;    }}function weekdaysMinRegex(isStrict) {    if (this._weekdaysParseExact) {        if (!hasOwnProp(this, '_weekdaysRegex')) {            computeWeekdaysParse.call(this);        }        if (isStrict) {            return this._weekdaysMinStrictRegex;        } else {            return this._weekdaysMinRegex;        }    } else {        if (!hasOwnProp(this, '_weekdaysMinRegex')) {            this._weekdaysMinRegex = defaultWeekdaysMinRegex;        }        return this._weekdaysMinStrictRegex && isStrict            ? this._weekdaysMinStrictRegex            : this._weekdaysMinRegex;    }}function computeWeekdaysParse() {    function cmpLenRev(a, b) {        return b.length - a.length;    }    var minPieces = [],        shortPieces = [],        longPieces = [],        mixedPieces = [],        i,        mom,        minp,        shortp,        longp;    for (i = 0; i < 7; i++) {        // make the regex if we don't have it already        mom = createUTC([2000, 1]).day(i);        minp = regexEscape(this.weekdaysMin(mom, ''));        shortp = regexEscape(this.weekdaysShort(mom, ''));        longp = regexEscape(this.weekdays(mom, ''));        minPieces.push(minp);        shortPieces.push(shortp);        longPieces.push(longp);        mixedPieces.push(minp);        mixedPieces.push(shortp);        mixedPieces.push(longp);    }    // Sorting makes sure if one weekday (or abbr) is a prefix of another it    // will match the longer piece.    minPieces.sort(cmpLenRev);    shortPieces.sort(cmpLenRev);    longPieces.sort(cmpLenRev);    mixedPieces.sort(cmpLenRev);    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');    this._weekdaysShortRegex = this._weekdaysRegex;    this._weekdaysMinRegex = this._weekdaysRegex;    this._weekdaysStrictRegex = new RegExp(        '^(' + longPieces.join('|') + ')',        'i'    );    this._weekdaysShortStrictRegex = new RegExp(        '^(' + shortPieces.join('|') + ')',        'i'    );    this._weekdaysMinStrictRegex = new RegExp(        '^(' + minPieces.join('|') + ')',        'i'    );}// FORMATTINGfunction hFormat() {    return this.hours() % 12 || 12;}function kFormat() {    return this.hours() || 24;}addFormatToken('H', ['HH', 2], 0, 'hour');addFormatToken('h', ['hh', 2], 0, hFormat);addFormatToken('k', ['kk', 2], 0, kFormat);addFormatToken('hmm', 0, 0, function () {    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);});addFormatToken('hmmss', 0, 0, function () {    return (        '' +        hFormat.apply(this) +        zeroFill(this.minutes(), 2) +        zeroFill(this.seconds(), 2)    );});addFormatToken('Hmm', 0, 0, function () {    return '' + this.hours() + zeroFill(this.minutes(), 2);});addFormatToken('Hmmss', 0, 0, function () {    return (        '' +        this.hours() +        zeroFill(this.minutes(), 2) +        zeroFill(this.seconds(), 2)    );});function meridiem(token, lowercase) {    addFormatToken(token, 0, 0, function () {        return this.localeData().meridiem(            this.hours(),            this.minutes(),            lowercase        );    });}meridiem('a', true);meridiem('A', false);// ALIASESaddUnitAlias('hour', 'h');// PRIORITYaddUnitPriority('hour', 13);// PARSINGfunction matchMeridiem(isStrict, locale) {    return locale._meridiemParse;}addRegexToken('a', matchMeridiem);addRegexToken('A', matchMeridiem);addRegexToken('H', match1to2);addRegexToken('h', match1to2);addRegexToken('k', match1to2);addRegexToken('HH', match1to2, match2);addRegexToken('hh', match1to2, match2);addRegexToken('kk', match1to2, match2);addRegexToken('hmm', match3to4);addRegexToken('hmmss', match5to6);addRegexToken('Hmm', match3to4);addRegexToken('Hmmss', match5to6);addParseToken(['H', 'HH'], HOUR);addParseToken(['k', 'kk'], function (input, array, config) {    var kInput = toInt(input);    array[HOUR] = kInput === 24 ? 0 : kInput;});addParseToken(['a', 'A'], function (input, array, config) {    config._isPm = config._locale.isPM(input);    config._meridiem = input;});addParseToken(['h', 'hh'], function (input, array, config) {    array[HOUR] = toInt(input);    getParsingFlags(config).bigHour = true;});addParseToken('hmm', function (input, array, config) {    var pos = input.length - 2;    array[HOUR] = toInt(input.substr(0, pos));    array[MINUTE] = toInt(input.substr(pos));    getParsingFlags(config).bigHour = true;});addParseToken('hmmss', function (input, array, config) {    var pos1 = input.length - 4,        pos2 = input.length - 2;    array[HOUR] = toInt(input.substr(0, pos1));    array[MINUTE] = toInt(input.substr(pos1, 2));    array[SECOND] = toInt(input.substr(pos2));    getParsingFlags(config).bigHour = true;});addParseToken('Hmm', function (input, array, config) {    var pos = input.length - 2;    array[HOUR] = toInt(input.substr(0, pos));    array[MINUTE] = toInt(input.substr(pos));});addParseToken('Hmmss', function (input, array, config) {    var pos1 = input.length - 4,        pos2 = input.length - 2;    array[HOUR] = toInt(input.substr(0, pos1));    array[MINUTE] = toInt(input.substr(pos1, 2));    array[SECOND] = toInt(input.substr(pos2));});// LOCALESfunction localeIsPM(input) {    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays    // Using charAt should be more compatible.    return (input + '').toLowerCase().charAt(0) === 'p';}var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,    // Setting the hour should keep the time, because the user explicitly    // specified which hour they want. So trying to maintain the same hour (in    // a new timezone) makes sense. Adding/subtracting hours does not follow    // this rule.    getSetHour = makeGetSet('Hours', true);function localeMeridiem(hours, minutes, isLower) {    if (hours > 11) {        return isLower ? 'pm' : 'PM';    } else {        return isLower ? 'am' : 'AM';    }}var baseConfig = {    calendar: defaultCalendar,    longDateFormat: defaultLongDateFormat,    invalidDate: defaultInvalidDate,    ordinal: defaultOrdinal,    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,    relativeTime: defaultRelativeTime,    months: defaultLocaleMonths,    monthsShort: defaultLocaleMonthsShort,    week: defaultLocaleWeek,    weekdays: defaultLocaleWeekdays,    weekdaysMin: defaultLocaleWeekdaysMin,    weekdaysShort: defaultLocaleWeekdaysShort,    meridiemParse: defaultLocaleMeridiemParse,};// internal storage for locale config filesvar locales = {},    localeFamilies = {},    globalLocale;function commonPrefix(arr1, arr2) {    var i,        minl = Math.min(arr1.length, arr2.length);    for (i = 0; i < minl; i += 1) {        if (arr1[i] !== arr2[i]) {            return i;        }    }    return minl;}function normalizeLocale(key) {    return key ? key.toLowerCase().replace('_', '-') : key;}// pick the locale from the array// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each// substring from most specific to least, but move to the next array item if it's a more specific variant than the current rootfunction chooseLocale(names) {    var i = 0,        j,        next,        locale,        split;    while (i < names.length) {        split = normalizeLocale(names[i]).split('-');        j = split.length;        next = normalizeLocale(names[i + 1]);        next = next ? next.split('-') : null;        while (j > 0) {            locale = loadLocale(split.slice(0, j).join('-'));            if (locale) {                return locale;            }            if (                next &&                next.length >= j &&                commonPrefix(split, next) >= j - 1            ) {                //the next array item is better than a shallower substring of this one                break;            }            j--;        }        i++;    }    return globalLocale;}function loadLocale(name) {    var oldLocale = null,        aliasedRequire;    // TODO: Find a better way to register and load all the locales in Node    if (        locales[name] === undefined &&        typeof module !== 'undefined' &&        module &&        module.exports    ) {        try {            oldLocale = globalLocale._abbr;            aliasedRequire = require;            aliasedRequire('./locale/' + name);            getSetGlobalLocale(oldLocale);        } catch (e) {            // mark as not found to avoid repeating expensive file require call causing high CPU            // when trying to find en-US, en_US, en-us for every format call            locales[name] = null; // null means not found        }    }    return locales[name];}// This function will load locale and then set the global locale.  If// no arguments are passed in, it will simply return the current global// locale key.function getSetGlobalLocale(key, values) {    var data;    if (key) {        if (isUndefined(values)) {            data = getLocale(key);        } else {            data = defineLocale(key, values);        }        if (data) {            // moment.duration._locale = moment._locale = data;            globalLocale = data;        } else {            if (typeof console !== 'undefined' && console.warn) {                //warn user if arguments are passed but the locale could not be set                console.warn(                    'Locale ' + key + ' not found. Did you forget to load it?'                );            }        }    }    return globalLocale._abbr;}function defineLocale(name, config) {    if (config !== null) {        var locale,            parentConfig = baseConfig;        config.abbr = name;        if (locales[name] != null) {            deprecateSimple(                'defineLocaleOverride',                'use moment.updateLocale(localeName, config) to change ' +                    'an existing locale. moment.defineLocale(localeName, ' +                    'config) should only be used for creating a new locale ' +                    'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'            );            parentConfig = locales[name]._config;        } else if (config.parentLocale != null) {            if (locales[config.parentLocale] != null) {                parentConfig = locales[config.parentLocale]._config;            } else {                locale = loadLocale(config.parentLocale);                if (locale != null) {                    parentConfig = locale._config;                } else {                    if (!localeFamilies[config.parentLocale]) {                        localeFamilies[config.parentLocale] = [];                    }                    localeFamilies[config.parentLocale].push({                        name: name,                        config: config,                    });                    return null;                }            }        }        locales[name] = new Locale(mergeConfigs(parentConfig, config));        if (localeFamilies[name]) {            localeFamilies[name].forEach(function (x) {                defineLocale(x.name, x.config);            });        }        // backwards compat for now: also set the locale        // make sure we set the locale AFTER all child locales have been        // created, so we won't end up with the child locale set.        getSetGlobalLocale(name);        return locales[name];    } else {        // useful for testing        delete locales[name];        return null;    }}function updateLocale(name, config) {    if (config != null) {        var locale,            tmpLocale,            parentConfig = baseConfig;        if (locales[name] != null && locales[name].parentLocale != null) {            // Update existing child locale in-place to avoid memory-leaks            locales[name].set(mergeConfigs(locales[name]._config, config));        } else {            // MERGE            tmpLocale = loadLocale(name);            if (tmpLocale != null) {                parentConfig = tmpLocale._config;            }            config = mergeConfigs(parentConfig, config);            if (tmpLocale == null) {                // updateLocale is called for creating a new locale                // Set abbr so it will have a name (getters return                // undefined otherwise).                config.abbr = name;            }            locale = new Locale(config);            locale.parentLocale = locales[name];            locales[name] = locale;        }        // backwards compat for now: also set the locale        getSetGlobalLocale(name);    } else {        // pass null for config to unupdate, useful for tests        if (locales[name] != null) {            if (locales[name].parentLocale != null) {                locales[name] = locales[name].parentLocale;                if (name === getSetGlobalLocale()) {                    getSetGlobalLocale(name);                }            } else if (locales[name] != null) {                delete locales[name];            }        }    }    return locales[name];}// returns locale datafunction getLocale(key) {    var locale;    if (key && key._locale && key._locale._abbr) {        key = key._locale._abbr;    }    if (!key) {        return globalLocale;    }    if (!isArray(key)) {        //short-circuit everything else        locale = loadLocale(key);        if (locale) {            return locale;        }        key = [key];    }    return chooseLocale(key);}function listLocales() {    return keys(locales);}function checkOverflow(m) {    var overflow,        a = m._a;    if (a && getParsingFlags(m).overflow === -2) {        overflow =            a[MONTH] < 0 || a[MONTH] > 11                ? MONTH                : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])                ? DATE                : a[HOUR] < 0 ||                  a[HOUR] > 24 ||                  (a[HOUR] === 24 &&                      (a[MINUTE] !== 0 ||                          a[SECOND] !== 0 ||                          a[MILLISECOND] !== 0))                ? HOUR                : a[MINUTE] < 0 || a[MINUTE] > 59                ? MINUTE                : a[SECOND] < 0 || a[SECOND] > 59                ? SECOND                : a[MILLISECOND] < 0 || a[MILLISECOND] > 999                ? MILLISECOND                : -1;        if (            getParsingFlags(m)._overflowDayOfYear &&            (overflow < YEAR || overflow > DATE)        ) {            overflow = DATE;        }        if (getParsingFlags(m)._overflowWeeks && overflow === -1) {            overflow = WEEK;        }        if (getParsingFlags(m)._overflowWeekday && overflow === -1) {            overflow = WEEKDAY;        }        getParsingFlags(m).overflow = overflow;    }    return m;}// iso 8601 regex// 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)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)?)?$/,    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)?)?$/,    tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,    isoDates = [        ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],        ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],        ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],        ['GGGG-[W]WW', /\d{4}-W\d\d/, false],        ['YYYY-DDD', /\d{4}-\d{3}/],        ['YYYY-MM', /\d{4}-\d\d/, false],        ['YYYYYYMMDD', /[+-]\d{10}/],        ['YYYYMMDD', /\d{8}/],        ['GGGG[W]WWE', /\d{4}W\d{3}/],        ['GGGG[W]WW', /\d{4}W\d{2}/, false],        ['YYYYDDD', /\d{7}/],        ['YYYYMM', /\d{6}/, false],        ['YYYY', /\d{4}/, false],    ],    // iso time formats and regexes    isoTimes = [        ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],        ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],        ['HH:mm:ss', /\d\d:\d\d:\d\d/],        ['HH:mm', /\d\d:\d\d/],        ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],        ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],        ['HHmmss', /\d\d\d\d\d\d/],        ['HHmm', /\d\d\d\d/],        ['HH', /\d\d/],    ],    aspNetJsonRegex = /^\/?Date\((-?\d+)/i,    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3    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}))$/,    obsOffsets = {        UT: 0,        GMT: 0,        EDT: -4 * 60,        EST: -5 * 60,        CDT: -5 * 60,        CST: -6 * 60,        MDT: -6 * 60,        MST: -7 * 60,        PDT: -7 * 60,        PST: -8 * 60,    };// date from iso formatfunction configFromISO(config) {    var i,        l,        string = config._i,        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),        allowTime,        dateFormat,        timeFormat,        tzFormat;    if (match) {        getParsingFlags(config).iso = true;        for (i = 0, l = isoDates.length; i < l; i++) {            if (isoDates[i][1].exec(match[1])) {                dateFormat = isoDates[i][0];                allowTime = isoDates[i][2] !== false;                break;            }        }        if (dateFormat == null) {            config._isValid = false;            return;        }        if (match[3]) {            for (i = 0, l = isoTimes.length; i < l; i++) {                if (isoTimes[i][1].exec(match[3])) {                    // match[2] should be 'T' or space                    timeFormat = (match[2] || ' ') + isoTimes[i][0];                    break;                }            }            if (timeFormat == null) {                config._isValid = false;                return;            }        }        if (!allowTime && timeFormat != null) {            config._isValid = false;            return;        }        if (match[4]) {            if (tzRegex.exec(match[4])) {                tzFormat = 'Z';            } else {                config._isValid = false;                return;            }        }        config._f = dateFormat + (timeFormat || '') + (tzFormat || '');        configFromStringAndFormat(config);    } else {        config._isValid = false;    }}function extractFromRFC2822Strings(    yearStr,    monthStr,    dayStr,    hourStr,    minuteStr,    secondStr) {    var result = [        untruncateYear(yearStr),        defaultLocaleMonthsShort.indexOf(monthStr),        parseInt(dayStr, 10),        parseInt(hourStr, 10),        parseInt(minuteStr, 10),    ];    if (secondStr) {        result.push(parseInt(secondStr, 10));    }    return result;}function untruncateYear(yearStr) {    var year = parseInt(yearStr, 10);    if (year <= 49) {        return 2000 + year;    } else if (year <= 999) {        return 1900 + year;    }    return year;}function preprocessRFC2822(s) {    // Remove comments and folding whitespace and replace multiple-spaces with a single space    return s        .replace(/\([^)]*\)|[\n\t]/g, ' ')        .replace(/(\s\s+)/g, ' ')        .replace(/^\s\s*/, '')        .replace(/\s\s*$/, '');}function checkWeekday(weekdayStr, parsedInput, config) {    if (weekdayStr) {        // TODO: Replace the vanilla JS Date object with an independent day-of-week check.        var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),            weekdayActual = new Date(                parsedInput[0],                parsedInput[1],                parsedInput[2]            ).getDay();        if (weekdayProvided !== weekdayActual) {            getParsingFlags(config).weekdayMismatch = true;            config._isValid = false;            return false;        }    }    return true;}function calculateOffset(obsOffset, militaryOffset, numOffset) {    if (obsOffset) {        return obsOffsets[obsOffset];    } else if (militaryOffset) {        // the only allowed military tz is Z        return 0;    } else {        var hm = parseInt(numOffset, 10),            m = hm % 100,            h = (hm - m) / 100;        return h * 60 + m;    }}// date and time from ref 2822 formatfunction configFromRFC2822(config) {    var match = rfc2822.exec(preprocessRFC2822(config._i)),        parsedArray;    if (match) {        parsedArray = extractFromRFC2822Strings(            match[4],            match[3],            match[2],            match[5],            match[6],            match[7]        );        if (!checkWeekday(match[1], parsedArray, config)) {            return;        }        config._a = parsedArray;        config._tzm = calculateOffset(match[8], match[9], match[10]);        config._d = createUTCDate.apply(null, config._a);        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);        getParsingFlags(config).rfc2822 = true;    } else {        config._isValid = false;    }}// date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strictfunction configFromString(config) {    var matched = aspNetJsonRegex.exec(config._i);    if (matched !== null) {        config._d = new Date(+matched[1]);        return;    }    configFromISO(config);    if (config._isValid === false) {        delete config._isValid;    } else {        return;    }    configFromRFC2822(config);    if (config._isValid === false) {        delete config._isValid;    } else {        return;    }    if (config._strict) {        config._isValid = false;    } else {        // Final attempt, use Input Fallback        hooks.createFromInputFallback(config);    }}hooks.createFromInputFallback = deprecate(    'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +        'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',    function (config) {        config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));    });// Pick the first defined of two or three arguments.function defaults(a, b, c) {    if (a != null) {        return a;    }    if (b != null) {        return b;    }    return c;}function currentDateArray(config) {    // hooks is actually the exported moment object    var nowValue = new Date(hooks.now());    if (config._useUTC) {        return [            nowValue.getUTCFullYear(),            nowValue.getUTCMonth(),            nowValue.getUTCDate(),        ];    }    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];}// convert an array to a date.// the array should mirror the parameters below// note: all values past the year are optional and will default to the lowest possible value.// [year, month, day , hour, minute, second, millisecond]function configFromArray(config) {    var i,        date,        input = [],        currentDate,        expectedWeekday,        yearToUse;    if (config._d) {        return;    }    currentDate = currentDateArray(config);    //compute day of the year from weeks and weekdays    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {        dayOfYearFromWeekInfo(config);    }    //if the day of the year is set, figure out what it is    if (config._dayOfYear != null) {        yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);        if (            config._dayOfYear > daysInYear(yearToUse) ||            config._dayOfYear === 0        ) {            getParsingFlags(config)._overflowDayOfYear = true;        }        date = createUTCDate(yearToUse, 0, config._dayOfYear);        config._a[MONTH] = date.getUTCMonth();        config._a[DATE] = date.getUTCDate();    }    // Default to current date.    // * if no year, month, day of month are given, default to today    // * if day of month is given, default month and year    // * if month is given, default only year    // * if year is given, don't default anything    for (i = 0; i < 3 && config._a[i] == null; ++i) {        config._a[i] = input[i] = currentDate[i];    }    // Zero out whatever was not defaulted, including time    for (; i < 7; i++) {        config._a[i] = input[i] =            config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];    }    // Check for 24:00:00.000    if (        config._a[HOUR] === 24 &&        config._a[MINUTE] === 0 &&        config._a[SECOND] === 0 &&        config._a[MILLISECOND] === 0    ) {        config._nextDay = true;        config._a[HOUR] = 0;    }    config._d = (config._useUTC ? createUTCDate : createDate).apply(        null,        input    );    expectedWeekday = config._useUTC        ? config._d.getUTCDay()        : config._d.getDay();    // Apply timezone offset from input. The actual utcOffset can be changed    // with parseZone.    if (config._tzm != null) {        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);    }    if (config._nextDay) {        config._a[HOUR] = 24;    }    // check for mismatching day of week    if (        config._w &&        typeof config._w.d !== 'undefined' &&        config._w.d !== expectedWeekday    ) {        getParsingFlags(config).weekdayMismatch = true;    }}function dayOfYearFromWeekInfo(config) {    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;    w = config._w;    if (w.GG != null || w.W != null || w.E != null) {        dow = 1;        doy = 4;        // TODO: We need to take the current isoWeekYear, but that depends on        // how we interpret now (local, utc, fixed offset). So create        // a now version of current config (take local/utc/offset flags, and        // create now).        weekYear = defaults(            w.GG,            config._a[YEAR],            weekOfYear(createLocal(), 1, 4).year        );        week = defaults(w.W, 1);        weekday = defaults(w.E, 1);        if (weekday < 1 || weekday > 7) {            weekdayOverflow = true;        }    } else {        dow = config._locale._week.dow;        doy = config._locale._week.doy;        curWeek = weekOfYear(createLocal(), dow, doy);        weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);        // Default to current week.        week = defaults(w.w, curWeek.week);        if (w.d != null) {            // weekday -- low day numbers are considered next week            weekday = w.d;            if (weekday < 0 || weekday > 6) {                weekdayOverflow = true;            }        } else if (w.e != null) {            // local weekday -- counting starts from beginning of week            weekday = w.e + dow;            if (w.e < 0 || w.e > 6) {                weekdayOverflow = true;            }        } else {            // default to beginning of week            weekday = dow;        }    }    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {        getParsingFlags(config)._overflowWeeks = true;    } else if (weekdayOverflow != null) {        getParsingFlags(config)._overflowWeekday = true;    } else {        temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);        config._a[YEAR] = temp.year;        config._dayOfYear = temp.dayOfYear;    }}// constant that refers to the ISO standardhooks.ISO_8601 = function () {};// constant that refers to the RFC 2822 formhooks.RFC_2822 = function () {};// date from string and format stringfunction configFromStringAndFormat(config) {    // TODO: Move this to another part of the creation flow to prevent circular deps    if (config._f === hooks.ISO_8601) {        configFromISO(config);        return;    }    if (config._f === hooks.RFC_2822) {        configFromRFC2822(config);        return;    }    config._a = [];    getParsingFlags(config).empty = true;    // This array is used to make a Date, either with `new Date` or `Date.UTC`    var string = '' + config._i,        i,        parsedInput,        tokens,        token,        skipped,        stringLength = string.length,        totalParsedInputLength = 0,        era;    tokens =        expandFormat(config._f, config._locale).match(formattingTokens) || [];    for (i = 0; i < tokens.length; i++) {        token = tokens[i];        parsedInput = (string.match(getParseRegexForToken(token, config)) ||            [])[0];        if (parsedInput) {            skipped = string.substr(0, string.indexOf(parsedInput));            if (skipped.length > 0) {                getParsingFlags(config).unusedInput.push(skipped);            }            string = string.slice(                string.indexOf(parsedInput) + parsedInput.length            );            totalParsedInputLength += parsedInput.length;        }        // don't parse if it's not a known token        if (formatTokenFunctions[token]) {            if (parsedInput) {                getParsingFlags(config).empty = false;            } else {                getParsingFlags(config).unusedTokens.push(token);            }            addTimeToArrayFromToken(token, parsedInput, config);        } else if (config._strict && !parsedInput) {            getParsingFlags(config).unusedTokens.push(token);        }    }    // add remaining unparsed input length to the string    getParsingFlags(config).charsLeftOver =        stringLength - totalParsedInputLength;    if (string.length > 0) {        getParsingFlags(config).unusedInput.push(string);    }    // clear _12h flag if hour is <= 12    if (        config._a[HOUR] <= 12 &&        getParsingFlags(config).bigHour === true &&        config._a[HOUR] > 0    ) {        getParsingFlags(config).bigHour = undefined;    }    getParsingFlags(config).parsedDateParts = config._a.slice(0);    getParsingFlags(config).meridiem = config._meridiem;    // handle meridiem    config._a[HOUR] = meridiemFixWrap(        config._locale,        config._a[HOUR],        config._meridiem    );    // handle era    era = getParsingFlags(config).era;    if (era !== null) {        config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);    }    configFromArray(config);    checkOverflow(config);}function meridiemFixWrap(locale, hour, meridiem) {    var isPm;    if (meridiem == null) {        // nothing to do        return hour;    }    if (locale.meridiemHour != null) {        return locale.meridiemHour(hour, meridiem);    } else if (locale.isPM != null) {        // Fallback        isPm = locale.isPM(meridiem);        if (isPm && hour < 12) {            hour += 12;        }        if (!isPm && hour === 12) {            hour = 0;        }        return hour;    } else {        // this is not supposed to happen        return hour;    }}// date from string and array of format stringsfunction configFromStringAndArray(config) {    var tempConfig,        bestMoment,        scoreToBeat,        i,        currentScore,        validFormatFound,        bestFormatIsValid = false;    if (config._f.length === 0) {        getParsingFlags(config).invalidFormat = true;        config._d = new Date(NaN);        return;    }    for (i = 0; i < config._f.length; i++) {        currentScore = 0;        validFormatFound = false;        tempConfig = copyConfig({}, config);        if (config._useUTC != null) {            tempConfig._useUTC = config._useUTC;        }        tempConfig._f = config._f[i];        configFromStringAndFormat(tempConfig);        if (isValid(tempConfig)) {            validFormatFound = true;        }        // if there is any input that was not parsed add a penalty for that format        currentScore += getParsingFlags(tempConfig).charsLeftOver;        //or tokens        currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;        getParsingFlags(tempConfig).score = currentScore;        if (!bestFormatIsValid) {            if (                scoreToBeat == null ||                currentScore < scoreToBeat ||                validFormatFound            ) {                scoreToBeat = currentScore;                bestMoment = tempConfig;                if (validFormatFound) {                    bestFormatIsValid = true;                }            }        } else {            if (currentScore < scoreToBeat) {                scoreToBeat = currentScore;                bestMoment = tempConfig;            }        }    }    extend(config, bestMoment || tempConfig);}function configFromObject(config) {    if (config._d) {        return;    }    var i = normalizeObjectUnits(config._i),        dayOrDate = i.day === undefined ? i.date : i.day;    config._a = map(        [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],        function (obj) {            return obj && parseInt(obj, 10);        }    );    configFromArray(config);}function createFromConfig(config) {    var res = new Moment(checkOverflow(prepareConfig(config)));    if (res._nextDay) {        // Adding is smart enough around DST        res.add(1, 'd');        res._nextDay = undefined;    }    return res;}function prepareConfig(config) {    var input = config._i,        format = config._f;    config._locale = config._locale || getLocale(config._l);    if (input === null || (format === undefined && input === '')) {        return createInvalid({ nullInput: true });    }    if (typeof input === 'string') {        config._i = input = config._locale.preparse(input);    }    if (isMoment(input)) {        return new Moment(checkOverflow(input));    } else if (isDate(input)) {        config._d = input;    } else if (isArray(format)) {        configFromStringAndArray(config);    } else if (format) {        configFromStringAndFormat(config);    } else {        configFromInput(config);    }    if (!isValid(config)) {        config._d = null;    }    return config;}function configFromInput(config) {    var input = config._i;    if (isUndefined(input)) {        config._d = new Date(hooks.now());    } else if (isDate(input)) {        config._d = new Date(input.valueOf());    } else if (typeof input === 'string') {        configFromString(config);    } else if (isArray(input)) {        config._a = map(input.slice(0), function (obj) {            return parseInt(obj, 10);        });        configFromArray(config);    } else if (isObject(input)) {        configFromObject(config);    } else if (isNumber(input)) {        // from milliseconds        config._d = new Date(input);    } else {        hooks.createFromInputFallback(config);    }}function createLocalOrUTC(input, format, locale, strict, isUTC) {    var c = {};    if (format === true || format === false) {        strict = format;        format = undefined;    }    if (locale === true || locale === false) {        strict = locale;        locale = undefined;    }    if (        (isObject(input) && isObjectEmpty(input)) ||        (isArray(input) && input.length === 0)    ) {        input = undefined;    }    // object construction must be done this way.    // https://github.com/moment/moment/issues/1423    c._isAMomentObject = true;    c._useUTC = c._isUTC = isUTC;    c._l = locale;    c._i = input;    c._f = format;    c._strict = strict;    return createFromConfig(c);}function createLocal(input, format, locale, strict) {    return createLocalOrUTC(input, format, locale, strict, false);}var prototypeMin = deprecate(        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',        function () {            var other = createLocal.apply(null, arguments);            if (this.isValid() && other.isValid()) {                return other < this ? this : other;            } else {                return createInvalid();            }        }    ),    prototypeMax = deprecate(        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',        function () {            var other = createLocal.apply(null, arguments);            if (this.isValid() && other.isValid()) {                return other > this ? this : other;            } else {                return createInvalid();            }        }    );// Pick a moment m from moments so that m[fn](other) is true for all// other. This relies on the function fn to be transitive.//// moments should either be an array of moment objects or an array, whose// first element is an array of moment objects.function pickBy(fn, moments) {    var res, i;    if (moments.length === 1 && isArray(moments[0])) {        moments = moments[0];    }    if (!moments.length) {        return createLocal();    }    res = moments[0];    for (i = 1; i < moments.length; ++i) {        if (!moments[i].isValid() || moments[i][fn](res)) {            res = moments[i];        }    }    return res;}// TODO: Use [].sort instead?function min() {    var args = [].slice.call(arguments, 0);    return pickBy('isBefore', args);}function max() {    var args = [].slice.call(arguments, 0);    return pickBy('isAfter', args);}var now = function () {    return Date.now ? Date.now() : +new Date();};var ordering = [    'year',    'quarter',    'month',    'week',    'day',    'hour',    'minute',    'second',    'millisecond',];function isDurationValid(m) {    var key,        unitHasDecimal = false,        i;    for (key in m) {        if (            hasOwnProp(m, key) &&            !(                indexOf.call(ordering, key) !== -1 &&                (m[key] == null || !isNaN(m[key]))            )        ) {            return false;        }    }    for (i = 0; i < ordering.length; ++i) {        if (m[ordering[i]]) {            if (unitHasDecimal) {                return false; // only allow non-integers for smallest unit            }            if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {                unitHasDecimal = true;            }        }    }    return true;}function isValid$1() {    return this._isValid;}function createInvalid$1() {    return createDuration(NaN);}function Duration(duration) {    var normalizedInput = normalizeObjectUnits(duration),        years = normalizedInput.year || 0,        quarters = normalizedInput.quarter || 0,        months = normalizedInput.month || 0,        weeks = normalizedInput.week || normalizedInput.isoWeek || 0,        days = normalizedInput.day || 0,        hours = normalizedInput.hour || 0,        minutes = normalizedInput.minute || 0,        seconds = normalizedInput.second || 0,        milliseconds = normalizedInput.millisecond || 0;    this._isValid = isDurationValid(normalizedInput);    // representation for dateAddRemove    this._milliseconds =        +milliseconds +        seconds * 1e3 + // 1000        minutes * 6e4 + // 1000 * 60        hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978    // Because of dateAddRemove treats 24 hours as different from a    // day when working around DST, we need to store them separately    this._days = +days + weeks * 7;    // It is impossible to translate months into days without knowing    // which months you are are talking about, so we have to store    // it separately.    this._months = +months + quarters * 3 + years * 12;    this._data = {};    this._locale = getLocale();    this._bubble();}function isDuration(obj) {    return obj instanceof Duration;}function absRound(number) {    if (number < 0) {        return Math.round(-1 * number) * -1;    } else {        return Math.round(number);    }}// compare two arrays, return the number of differencesfunction compareArrays(array1, array2, dontConvert) {    var len = Math.min(array1.length, array2.length),        lengthDiff = Math.abs(array1.length - array2.length),        diffs = 0,        i;    for (i = 0; i < len; i++) {        if (            (dontConvert && array1[i] !== array2[i]) ||            (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))        ) {            diffs++;        }    }    return diffs + lengthDiff;}// FORMATTINGfunction offset(token, separator) {    addFormatToken(token, 0, 0, function () {        var offset = this.utcOffset(),            sign = '+';        if (offset < 0) {            offset = -offset;            sign = '-';        }        return (            sign +            zeroFill(~~(offset / 60), 2) +            separator +            zeroFill(~~offset % 60, 2)        );    });}offset('Z', ':');offset('ZZ', '');// PARSINGaddRegexToken('Z', matchShortOffset);addRegexToken('ZZ', matchShortOffset);addParseToken(['Z', 'ZZ'], function (input, array, config) {    config._useUTC = true;    config._tzm = offsetFromString(matchShortOffset, input);});// HELPERS// timezone chunker// '+10:00' > ['10',  '00']// '-1530'  > ['-15', '30']var chunkOffset = /([\+\-]|\d\d)/gi;function offsetFromString(matcher, string) {    var matches = (string || '').match(matcher),        chunk,        parts,        minutes;    if (matches === null) {        return null;    }    chunk = matches[matches.length - 1] || [];    parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];    minutes = +(parts[1] * 60) + toInt(parts[2]);    return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;}// Return a moment from input, that is local/utc/zone equivalent to model.function cloneWithOffset(input, model) {    var res, diff;    if (model._isUTC) {        res = model.clone();        diff =            (isMoment(input) || isDate(input)                ? input.valueOf()                : createLocal(input).valueOf()) - res.valueOf();        // Use low-level api, because this fn is low-level api.        res._d.setTime(res._d.valueOf() + diff);        hooks.updateOffset(res, false);        return res;    } else {        return createLocal(input).local();    }}function getDateOffset(m) {    // On Firefox.24 Date#getTimezoneOffset returns a floating point.    // https://github.com/moment/moment/pull/1871    return -Math.round(m._d.getTimezoneOffset());}// HOOKS// This function will be called whenever a moment is mutated.// It is intended to keep the offset in sync with the timezone.hooks.updateOffset = function () {};// MOMENTS// keepLocalTime = true means only change the timezone, without// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset// +0200, so we adjust the time as needed, to be valid.//// Keeping the time actually adds/subtracts (one hour)// from the actual represented time. That is why we call updateOffset// a second time. In case it wants us to change the offset again// _changeInProgress == true case, then we have to adjust, because// there is no such time in the given timezone.function getSetOffset(input, keepLocalTime, keepMinutes) {    var offset = this._offset || 0,        localAdjust;    if (!this.isValid()) {        return input != null ? this : NaN;    }    if (input != null) {        if (typeof input === 'string') {            input = offsetFromString(matchShortOffset, input);            if (input === null) {                return this;            }        } else if (Math.abs(input) < 16 && !keepMinutes) {            input = input * 60;        }        if (!this._isUTC && keepLocalTime) {            localAdjust = getDateOffset(this);        }        this._offset = input;        this._isUTC = true;        if (localAdjust != null) {            this.add(localAdjust, 'm');        }        if (offset !== input) {            if (!keepLocalTime || this._changeInProgress) {                addSubtract(                    this,                    createDuration(input - offset, 'm'),                    1,                    false                );            } else if (!this._changeInProgress) {                this._changeInProgress = true;                hooks.updateOffset(this, true);                this._changeInProgress = null;            }        }        return this;    } else {        return this._isUTC ? offset : getDateOffset(this);    }}function getSetZone(input, keepLocalTime) {    if (input != null) {        if (typeof input !== 'string') {            input = -input;        }        this.utcOffset(input, keepLocalTime);        return this;    } else {        return -this.utcOffset();    }}function setOffsetToUTC(keepLocalTime) {    return this.utcOffset(0, keepLocalTime);}function setOffsetToLocal(keepLocalTime) {    if (this._isUTC) {        this.utcOffset(0, keepLocalTime);        this._isUTC = false;        if (keepLocalTime) {            this.subtract(getDateOffset(this), 'm');        }    }    return this;}function setOffsetToParsedOffset() {    if (this._tzm != null) {        this.utcOffset(this._tzm, false, true);    } else if (typeof this._i === 'string') {        var tZone = offsetFromString(matchOffset, this._i);        if (tZone != null) {            this.utcOffset(tZone);        } else {            this.utcOffset(0, true);        }    }    return this;}function hasAlignedHourOffset(input) {    if (!this.isValid()) {        return false;    }    input = input ? createLocal(input).utcOffset() : 0;    return (this.utcOffset() - input) % 60 === 0;}function isDaylightSavingTime() {    return (        this.utcOffset() > this.clone().month(0).utcOffset() ||        this.utcOffset() > this.clone().month(5).utcOffset()    );}function isDaylightSavingTimeShifted() {    if (!isUndefined(this._isDSTShifted)) {        return this._isDSTShifted;    }    var c = {},        other;    copyConfig(c, this);    c = prepareConfig(c);    if (c._a) {        other = c._isUTC ? createUTC(c._a) : createLocal(c._a);        this._isDSTShifted =            this.isValid() && compareArrays(c._a, other.toArray()) > 0;    } else {        this._isDSTShifted = false;    }    return this._isDSTShifted;}function isLocal() {    return this.isValid() ? !this._isUTC : false;}function isUtcOffset() {    return this.isValid() ? this._isUTC : false;}function isUtc() {    return this.isValid() ? this._isUTC && this._offset === 0 : false;}// ASP.NET json date format regexvar aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere    // and further modified to allow for strings containing both week and day    isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function createDuration(input, key) {    var duration = input,        // matching against regexp is expensive, do it on demand        match = null,        sign,        ret,        diffRes;    if (isDuration(input)) {        duration = {            ms: input._milliseconds,            d: input._days,            M: input._months,        };    } else if (isNumber(input) || !isNaN(+input)) {        duration = {};        if (key) {            duration[key] = +input;        } else {            duration.milliseconds = +input;        }    } else if ((match = aspNetRegex.exec(input))) {        sign = match[1] === '-' ? -1 : 1;        duration = {            y: 0,            d: toInt(match[DATE]) * sign,            h: toInt(match[HOUR]) * sign,            m: toInt(match[MINUTE]) * sign,            s: toInt(match[SECOND]) * sign,            ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match        };    } else if ((match = isoRegex.exec(input))) {        sign = match[1] === '-' ? -1 : 1;        duration = {            y: parseIso(match[2], sign),            M: parseIso(match[3], sign),            w: parseIso(match[4], sign),            d: parseIso(match[5], sign),            h: parseIso(match[6], sign),            m: parseIso(match[7], sign),            s: parseIso(match[8], sign),        };    } else if (duration == null) {        // checks for null or undefined        duration = {};    } else if (        typeof duration === 'object' &&        ('from' in duration || 'to' in duration)    ) {        diffRes = momentsDifference(            createLocal(duration.from),            createLocal(duration.to)        );        duration = {};        duration.ms = diffRes.milliseconds;        duration.M = diffRes.months;    }    ret = new Duration(duration);    if (isDuration(input) && hasOwnProp(input, '_locale')) {        ret._locale = input._locale;    }    if (isDuration(input) && hasOwnProp(input, '_isValid')) {        ret._isValid = input._isValid;    }    return ret;}createDuration.fn = Duration.prototype;createDuration.invalid = createInvalid$1;function parseIso(inp, sign) {    // We'd normally use ~~inp for this, but unfortunately it also    // converts floats to ints.    // inp may be undefined, so careful calling replace on it.    var res = inp && parseFloat(inp.replace(',', '.'));    // apply sign while we're at it    return (isNaN(res) ? 0 : res) * sign;}function positiveMomentsDifference(base, other) {    var res = {};    res.months =        other.month() - base.month() + (other.year() - base.year()) * 12;    if (base.clone().add(res.months, 'M').isAfter(other)) {        --res.months;    }    res.milliseconds = +other - +base.clone().add(res.months, 'M');    return res;}function momentsDifference(base, other) {    var res;    if (!(base.isValid() && other.isValid())) {        return { milliseconds: 0, months: 0 };    }    other = cloneWithOffset(other, base);    if (base.isBefore(other)) {        res = positiveMomentsDifference(base, other);    } else {        res = positiveMomentsDifference(other, base);        res.milliseconds = -res.milliseconds;        res.months = -res.months;    }    return res;}// TODO: remove 'name' arg after deprecation is removedfunction createAdder(direction, name) {    return function (val, period) {        var dur, tmp;        //invert the arguments, but complain about it        if (period !== null && !isNaN(+period)) {            deprecateSimple(                name,                'moment().' +                    name +                    '(period, number) is deprecated. Please use moment().' +                    name +                    '(number, period). ' +                    'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'            );            tmp = val;            val = period;            period = tmp;        }        dur = createDuration(val, period);        addSubtract(this, dur, direction);        return this;    };}function addSubtract(mom, duration, isAdding, updateOffset) {    var milliseconds = duration._milliseconds,        days = absRound(duration._days),        months = absRound(duration._months);    if (!mom.isValid()) {        // No op        return;    }    updateOffset = updateOffset == null ? true : updateOffset;    if (months) {        setMonth(mom, get(mom, 'Month') + months * isAdding);    }    if (days) {        set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);    }    if (milliseconds) {        mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);    }    if (updateOffset) {        hooks.updateOffset(mom, days || months);    }}var add = createAdder(1, 'add'),    subtract = createAdder(-1, 'subtract');function isString(input) {    return typeof input === 'string' || input instanceof String;}// type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefinedfunction isMomentInput(input) {    return (        isMoment(input) ||        isDate(input) ||        isString(input) ||        isNumber(input) ||        isNumberOrStringArray(input) ||        isMomentInputObject(input) ||        input === null ||        input === undefined    );}function isMomentInputObject(input) {    var objectTest = isObject(input) && !isObjectEmpty(input),        propertyTest = false,        properties = [            'years',            'year',            'y',            'months',            'month',            'M',            'days',            'day',            'd',            'dates',            'date',            'D',            'hours',            'hour',            'h',            'minutes',            'minute',            'm',            'seconds',            'second',            's',            'milliseconds',            'millisecond',            'ms',        ],        i,        property;    for (i = 0; i < properties.length; i += 1) {        property = properties[i];        propertyTest = propertyTest || hasOwnProp(input, property);    }    return objectTest && propertyTest;}function isNumberOrStringArray(input) {    var arrayTest = isArray(input),        dataTypeTest = false;    if (arrayTest) {        dataTypeTest =            input.filter(function (item) {                return !isNumber(item) && isString(input);            }).length === 0;    }    return arrayTest && dataTypeTest;}function isCalendarSpec(input) {    var objectTest = isObject(input) && !isObjectEmpty(input),        propertyTest = false,        properties = [            'sameDay',            'nextDay',            'lastDay',            'nextWeek',            'lastWeek',            'sameElse',        ],        i,        property;    for (i = 0; i < properties.length; i += 1) {        property = properties[i];        propertyTest = propertyTest || hasOwnProp(input, property);    }    return objectTest && propertyTest;}function getCalendarFormat(myMoment, now) {    var diff = myMoment.diff(now, 'days', true);    return diff < -6        ? 'sameElse'        : diff < -1        ? 'lastWeek'        : diff < 0        ? 'lastDay'        : diff < 1        ? 'sameDay'        : diff < 2        ? 'nextDay'        : diff < 7        ? 'nextWeek'        : 'sameElse';}function calendar$1(time, formats) {    // Support for single parameter, formats only overload to the calendar function    if (arguments.length === 1) {        if (!arguments[0]) {            time = undefined;            formats = undefined;        } else if (isMomentInput(arguments[0])) {            time = arguments[0];            formats = undefined;        } else if (isCalendarSpec(arguments[0])) {            formats = arguments[0];            time = undefined;        }    }    // We want to compare the start of today, vs this.    // Getting start-of-today depends on whether we're local/utc/offset or not.    var now = time || createLocal(),        sod = cloneWithOffset(now, this).startOf('day'),        format = hooks.calendarFormat(this, sod) || 'sameElse',        output =            formats &&            (isFunction(formats[format])                ? formats[format].call(this, now)                : formats[format]);    return this.format(        output || this.localeData().calendar(format, this, createLocal(now))    );}function clone() {    return new Moment(this);}function isAfter(input, units) {    var localInput = isMoment(input) ? input : createLocal(input);    if (!(this.isValid() && localInput.isValid())) {        return false;    }    units = normalizeUnits(units) || 'millisecond';    if (units === 'millisecond') {        return this.valueOf() > localInput.valueOf();    } else {        return localInput.valueOf() < this.clone().startOf(units).valueOf();    }}function isBefore(input, units) {    var localInput = isMoment(input) ? input : createLocal(input);    if (!(this.isValid() && localInput.isValid())) {        return false;    }    units = normalizeUnits(units) || 'millisecond';    if (units === 'millisecond') {        return this.valueOf() < localInput.valueOf();    } else {        return this.clone().endOf(units).valueOf() < localInput.valueOf();    }}function isBetween(from, to, units, inclusivity) {    var localFrom = isMoment(from) ? from : createLocal(from),        localTo = isMoment(to) ? to : createLocal(to);    if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {        return false;    }    inclusivity = inclusivity || '()';    return (        (inclusivity[0] === '('            ? this.isAfter(localFrom, units)            : !this.isBefore(localFrom, units)) &&        (inclusivity[1] === ')'            ? this.isBefore(localTo, units)            : !this.isAfter(localTo, units))    );}function isSame(input, units) {    var localInput = isMoment(input) ? input : createLocal(input),        inputMs;    if (!(this.isValid() && localInput.isValid())) {        return false;    }    units = normalizeUnits(units) || 'millisecond';    if (units === 'millisecond') {        return this.valueOf() === localInput.valueOf();    } else {        inputMs = localInput.valueOf();        return (            this.clone().startOf(units).valueOf() <= inputMs &&            inputMs <= this.clone().endOf(units).valueOf()        );    }}function isSameOrAfter(input, units) {    return this.isSame(input, units) || this.isAfter(input, units);}function isSameOrBefore(input, units) {    return this.isSame(input, units) || this.isBefore(input, units);}function diff(input, units, asFloat) {    var that, zoneDelta, output;    if (!this.isValid()) {        return NaN;    }    that = cloneWithOffset(input, this);    if (!that.isValid()) {        return NaN;    }    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;    units = normalizeUnits(units);    switch (units) {        case 'year':            output = monthDiff(this, that) / 12;            break;        case 'month':            output = monthDiff(this, that);            break;        case 'quarter':            output = monthDiff(this, that) / 3;            break;        case 'second':            output = (this - that) / 1e3;            break; // 1000        case 'minute':            output = (this - that) / 6e4;            break; // 1000 * 60        case 'hour':            output = (this - that) / 36e5;            break; // 1000 * 60 * 60        case 'day':            output = (this - that - zoneDelta) / 864e5;            break; // 1000 * 60 * 60 * 24, negate dst        case 'week':            output = (this - that - zoneDelta) / 6048e5;            break; // 1000 * 60 * 60 * 24 * 7, negate dst        default:            output = this - that;    }    return asFloat ? output : absFloor(output);}function monthDiff(a, b) {    if (a.date() < b.date()) {        // end-of-month calculations work correct when the start month has more        // days than the end month.        return -monthDiff(b, a);    }    // difference in months    var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),        // b is in (anchor - 1 month, anchor + 1 month)        anchor = a.clone().add(wholeMonthDiff, 'months'),        anchor2,        adjust;    if (b - anchor < 0) {        anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');        // linear across the month        adjust = (b - anchor) / (anchor - anchor2);    } else {        anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');        // linear across the month        adjust = (b - anchor) / (anchor2 - anchor);    }    //check for negative zero, return zero if negative zero    return -(wholeMonthDiff + adjust) || 0;}hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';function toString() {    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');}function toISOString(keepOffset) {    if (!this.isValid()) {        return null;    }    var utc = keepOffset !== true,        m = utc ? this.clone().utc() : this;    if (m.year() < 0 || m.year() > 9999) {        return formatMoment(            m,            utc                ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'                : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'        );    }    if (isFunction(Date.prototype.toISOString)) {        // native implementation is ~50x faster, use it when we can        if (utc) {            return this.toDate().toISOString();        } else {            return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)                .toISOString()                .replace('Z', formatMoment(m, 'Z'));        }    }    return formatMoment(        m,        utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'    );}/** * Return a human readable representation of a moment that can * also be evaluated to get a new moment which is the same * * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects */function inspect() {    if (!this.isValid()) {        return 'moment.invalid(/* ' + this._i + ' */)';    }    var func = 'moment',        zone = '',        prefix,        year,        datetime,        suffix;    if (!this.isLocal()) {        func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';        zone = 'Z';    }    prefix = '[' + func + '("]';    year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';    datetime = '-MM-DD[T]HH:mm:ss.SSS';    suffix = zone + '[")]';    return this.format(prefix + year + datetime + suffix);}function format(inputString) {    if (!inputString) {        inputString = this.isUtc()            ? hooks.defaultFormatUtc            : hooks.defaultFormat;    }    var output = formatMoment(this, inputString);    return this.localeData().postformat(output);}function from(time, withoutSuffix) {    if (        this.isValid() &&        ((isMoment(time) && time.isValid()) || createLocal(time).isValid())    ) {        return createDuration({ to: this, from: time })            .locale(this.locale())            .humanize(!withoutSuffix);    } else {        return this.localeData().invalidDate();    }}function fromNow(withoutSuffix) {    return this.from(createLocal(), withoutSuffix);}function to(time, withoutSuffix) {    if (        this.isValid() &&        ((isMoment(time) && time.isValid()) || createLocal(time).isValid())    ) {        return createDuration({ from: this, to: time })            .locale(this.locale())            .humanize(!withoutSuffix);    } else {        return this.localeData().invalidDate();    }}function toNow(withoutSuffix) {    return this.to(createLocal(), withoutSuffix);}// If passed a locale key, it will set the locale for this// instance.  Otherwise, it will return the locale configuration// variables for this instance.function locale(key) {    var newLocaleData;    if (key === undefined) {        return this._locale._abbr;    } else {        newLocaleData = getLocale(key);        if (newLocaleData != null) {            this._locale = newLocaleData;        }        return this;    }}var lang = deprecate(    'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',    function (key) {        if (key === undefined) {            return this.localeData();        } else {            return this.locale(key);        }    });function localeData() {    return this._locale;}var MS_PER_SECOND = 1000,    MS_PER_MINUTE = 60 * MS_PER_SECOND,    MS_PER_HOUR = 60 * MS_PER_MINUTE,    MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;// actual modulo - handles negative numbers (for dates before 1970):function mod$1(dividend, divisor) {    return ((dividend % divisor) + divisor) % divisor;}function localStartOfDate(y, m, d) {    // the date constructor remaps years 0-99 to 1900-1999    if (y < 100 && y >= 0) {        // preserve leap years using a full 400 year cycle, then reset        return new Date(y + 400, m, d) - MS_PER_400_YEARS;    } else {        return new Date(y, m, d).valueOf();    }}function utcStartOfDate(y, m, d) {    // Date.UTC remaps years 0-99 to 1900-1999    if (y < 100 && y >= 0) {        // preserve leap years using a full 400 year cycle, then reset        return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;    } else {        return Date.UTC(y, m, d);    }}function startOf(units) {    var time, startOfDate;    units = normalizeUnits(units);    if (units === undefined || units === 'millisecond' || !this.isValid()) {        return this;    }    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;    switch (units) {        case 'year':            time = startOfDate(this.year(), 0, 1);            break;        case 'quarter':            time = startOfDate(                this.year(),                this.month() - (this.month() % 3),                1            );            break;        case 'month':            time = startOfDate(this.year(), this.month(), 1);            break;        case 'week':            time = startOfDate(                this.year(),                this.month(),                this.date() - this.weekday()            );            break;        case 'isoWeek':            time = startOfDate(                this.year(),                this.month(),                this.date() - (this.isoWeekday() - 1)            );            break;        case 'day':        case 'date':            time = startOfDate(this.year(), this.month(), this.date());            break;        case 'hour':            time = this._d.valueOf();            time -= mod$1(                time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),                MS_PER_HOUR            );            break;        case 'minute':            time = this._d.valueOf();            time -= mod$1(time, MS_PER_MINUTE);            break;        case 'second':            time = this._d.valueOf();            time -= mod$1(time, MS_PER_SECOND);            break;    }    this._d.setTime(time);    hooks.updateOffset(this, true);    return this;}function endOf(units) {    var time, startOfDate;    units = normalizeUnits(units);    if (units === undefined || units === 'millisecond' || !this.isValid()) {        return this;    }    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;    switch (units) {        case 'year':            time = startOfDate(this.year() + 1, 0, 1) - 1;            break;        case 'quarter':            time =                startOfDate(                    this.year(),                    this.month() - (this.month() % 3) + 3,                    1                ) - 1;            break;        case 'month':            time = startOfDate(this.year(), this.month() + 1, 1) - 1;            break;        case 'week':            time =                startOfDate(                    this.year(),                    this.month(),                    this.date() - this.weekday() + 7                ) - 1;            break;        case 'isoWeek':            time =                startOfDate(                    this.year(),                    this.month(),                    this.date() - (this.isoWeekday() - 1) + 7                ) - 1;            break;        case 'day':        case 'date':            time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;            break;        case 'hour':            time = this._d.valueOf();            time +=                MS_PER_HOUR -                mod$1(                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),                    MS_PER_HOUR                ) -                1;            break;        case 'minute':            time = this._d.valueOf();            time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;            break;        case 'second':            time = this._d.valueOf();            time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;            break;    }    this._d.setTime(time);    hooks.updateOffset(this, true);    return this;}function valueOf() {    return this._d.valueOf() - (this._offset || 0) * 60000;}function unix() {    return Math.floor(this.valueOf() / 1000);}function toDate() {    return new Date(this.valueOf());}function toArray() {    var m = this;    return [        m.year(),        m.month(),        m.date(),        m.hour(),        m.minute(),        m.second(),        m.millisecond(),    ];}function toObject() {    var m = this;    return {        years: m.year(),        months: m.month(),        date: m.date(),        hours: m.hours(),        minutes: m.minutes(),        seconds: m.seconds(),        milliseconds: m.milliseconds(),    };}function toJSON() {    // new Date(NaN).toJSON() === null    return this.isValid() ? this.toISOString() : null;}function isValid$2() {    return isValid(this);}function parsingFlags() {    return extend({}, getParsingFlags(this));}function invalidAt() {    return getParsingFlags(this).overflow;}function creationData() {    return {        input: this._i,        format: this._f,        locale: this._locale,        isUTC: this._isUTC,        strict: this._strict,    };}addFormatToken('N', 0, 0, 'eraAbbr');addFormatToken('NN', 0, 0, 'eraAbbr');addFormatToken('NNN', 0, 0, 'eraAbbr');addFormatToken('NNNN', 0, 0, 'eraName');addFormatToken('NNNNN', 0, 0, 'eraNarrow');addFormatToken('y', ['y', 1], 'yo', 'eraYear');addFormatToken('y', ['yy', 2], 0, 'eraYear');addFormatToken('y', ['yyy', 3], 0, 'eraYear');addFormatToken('y', ['yyyy', 4], 0, 'eraYear');addRegexToken('N', matchEraAbbr);addRegexToken('NN', matchEraAbbr);addRegexToken('NNN', matchEraAbbr);addRegexToken('NNNN', matchEraName);addRegexToken('NNNNN', matchEraNarrow);addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (    input,    array,    config,    token) {    var era = config._locale.erasParse(input, token, config._strict);    if (era) {        getParsingFlags(config).era = era;    } else {        getParsingFlags(config).invalidEra = input;    }});addRegexToken('y', matchUnsigned);addRegexToken('yy', matchUnsigned);addRegexToken('yyy', matchUnsigned);addRegexToken('yyyy', matchUnsigned);addRegexToken('yo', matchEraYearOrdinal);addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);addParseToken(['yo'], function (input, array, config, token) {    var match;    if (config._locale._eraYearOrdinalRegex) {        match = input.match(config._locale._eraYearOrdinalRegex);    }    if (config._locale.eraYearOrdinalParse) {        array[YEAR] = config._locale.eraYearOrdinalParse(input, match);    } else {        array[YEAR] = parseInt(input, 10);    }});function localeEras(m, format) {    var i,        l,        date,        eras = this._eras || getLocale('en')._eras;    for (i = 0, l = eras.length; i < l; ++i) {        switch (typeof eras[i].since) {            case 'string':                // truncate time                date = hooks(eras[i].since).startOf('day');                eras[i].since = date.valueOf();                break;        }        switch (typeof eras[i].until) {            case 'undefined':                eras[i].until = +Infinity;                break;            case 'string':                // truncate time                date = hooks(eras[i].until).startOf('day').valueOf();                eras[i].until = date.valueOf();                break;        }    }    return eras;}function localeErasParse(eraName, format, strict) {    var i,        l,        eras = this.eras(),        name,        abbr,        narrow;    eraName = eraName.toUpperCase();    for (i = 0, l = eras.length; i < l; ++i) {        name = eras[i].name.toUpperCase();        abbr = eras[i].abbr.toUpperCase();        narrow = eras[i].narrow.toUpperCase();        if (strict) {            switch (format) {                case 'N':                case 'NN':                case 'NNN':                    if (abbr === eraName) {                        return eras[i];                    }                    break;                case 'NNNN':                    if (name === eraName) {                        return eras[i];                    }                    break;                case 'NNNNN':                    if (narrow === eraName) {                        return eras[i];                    }                    break;            }        } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {            return eras[i];        }    }}function localeErasConvertYear(era, year) {    var dir = era.since <= era.until ? +1 : -1;    if (year === undefined) {        return hooks(era.since).year();    } else {        return hooks(era.since).year() + (year - era.offset) * dir;    }}function getEraName() {    var i,        l,        val,        eras = this.localeData().eras();    for (i = 0, l = eras.length; i < l; ++i) {        // truncate time        val = this.clone().startOf('day').valueOf();        if (eras[i].since <= val && val <= eras[i].until) {            return eras[i].name;        }        if (eras[i].until <= val && val <= eras[i].since) {            return eras[i].name;        }    }    return '';}function getEraNarrow() {    var i,        l,        val,        eras = this.localeData().eras();    for (i = 0, l = eras.length; i < l; ++i) {        // truncate time        val = this.clone().startOf('day').valueOf();        if (eras[i].since <= val && val <= eras[i].until) {            return eras[i].narrow;        }        if (eras[i].until <= val && val <= eras[i].since) {            return eras[i].narrow;        }    }    return '';}function getEraAbbr() {    var i,        l,        val,        eras = this.localeData().eras();    for (i = 0, l = eras.length; i < l; ++i) {        // truncate time        val = this.clone().startOf('day').valueOf();        if (eras[i].since <= val && val <= eras[i].until) {            return eras[i].abbr;        }        if (eras[i].until <= val && val <= eras[i].since) {            return eras[i].abbr;        }    }    return '';}function getEraYear() {    var i,        l,        dir,        val,        eras = this.localeData().eras();    for (i = 0, l = eras.length; i < l; ++i) {        dir = eras[i].since <= eras[i].until ? +1 : -1;        // truncate time        val = this.clone().startOf('day').valueOf();        if (            (eras[i].since <= val && val <= eras[i].until) ||            (eras[i].until <= val && val <= eras[i].since)        ) {            return (                (this.year() - hooks(eras[i].since).year()) * dir +                eras[i].offset            );        }    }    return this.year();}function erasNameRegex(isStrict) {    if (!hasOwnProp(this, '_erasNameRegex')) {        computeErasParse.call(this);    }    return isStrict ? this._erasNameRegex : this._erasRegex;}function erasAbbrRegex(isStrict) {    if (!hasOwnProp(this, '_erasAbbrRegex')) {        computeErasParse.call(this);    }    return isStrict ? this._erasAbbrRegex : this._erasRegex;}function erasNarrowRegex(isStrict) {    if (!hasOwnProp(this, '_erasNarrowRegex')) {        computeErasParse.call(this);    }    return isStrict ? this._erasNarrowRegex : this._erasRegex;}function matchEraAbbr(isStrict, locale) {    return locale.erasAbbrRegex(isStrict);}function matchEraName(isStrict, locale) {    return locale.erasNameRegex(isStrict);}function matchEraNarrow(isStrict, locale) {    return locale.erasNarrowRegex(isStrict);}function matchEraYearOrdinal(isStrict, locale) {    return locale._eraYearOrdinalRegex || matchUnsigned;}function computeErasParse() {    var abbrPieces = [],        namePieces = [],        narrowPieces = [],        mixedPieces = [],        i,        l,        eras = this.eras();    for (i = 0, l = eras.length; i < l; ++i) {        namePieces.push(regexEscape(eras[i].name));        abbrPieces.push(regexEscape(eras[i].abbr));        narrowPieces.push(regexEscape(eras[i].narrow));        mixedPieces.push(regexEscape(eras[i].name));        mixedPieces.push(regexEscape(eras[i].abbr));        mixedPieces.push(regexEscape(eras[i].narrow));    }    this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');    this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');    this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');    this._erasNarrowRegex = new RegExp(        '^(' + narrowPieces.join('|') + ')',        'i'    );}// FORMATTINGaddFormatToken(0, ['gg', 2], 0, function () {    return this.weekYear() % 100;});addFormatToken(0, ['GG', 2], 0, function () {    return this.isoWeekYear() % 100;});function addWeekYearFormatToken(token, getter) {    addFormatToken(0, [token, token.length], 0, getter);}addWeekYearFormatToken('gggg', 'weekYear');addWeekYearFormatToken('ggggg', 'weekYear');addWeekYearFormatToken('GGGG', 'isoWeekYear');addWeekYearFormatToken('GGGGG', 'isoWeekYear');// ALIASESaddUnitAlias('weekYear', 'gg');addUnitAlias('isoWeekYear', 'GG');// PRIORITYaddUnitPriority('weekYear', 1);addUnitPriority('isoWeekYear', 1);// PARSINGaddRegexToken('G', matchSigned);addRegexToken('g', matchSigned);addRegexToken('GG', match1to2, match2);addRegexToken('gg', match1to2, match2);addRegexToken('GGGG', match1to4, match4);addRegexToken('gggg', match1to4, match4);addRegexToken('GGGGG', match1to6, match6);addRegexToken('ggggg', match1to6, match6);addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (    input,    week,    config,    token) {    week[token.substr(0, 2)] = toInt(input);});addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {    week[token] = hooks.parseTwoDigitYear(input);});// MOMENTSfunction getSetWeekYear(input) {    return getSetWeekYearHelper.call(        this,        input,        this.week(),        this.weekday(),        this.localeData()._week.dow,        this.localeData()._week.doy    );}function getSetISOWeekYear(input) {    return getSetWeekYearHelper.call(        this,        input,        this.isoWeek(),        this.isoWeekday(),        1,        4    );}function getISOWeeksInYear() {    return weeksInYear(this.year(), 1, 4);}function getISOWeeksInISOWeekYear() {    return weeksInYear(this.isoWeekYear(), 1, 4);}function getWeeksInYear() {    var weekInfo = this.localeData()._week;    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);}function getWeeksInWeekYear() {    var weekInfo = this.localeData()._week;    return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);}function getSetWeekYearHelper(input, week, weekday, dow, doy) {    var weeksTarget;    if (input == null) {        return weekOfYear(this, dow, doy).year;    } else {        weeksTarget = weeksInYear(input, dow, doy);        if (week > weeksTarget) {            week = weeksTarget;        }        return setWeekAll.call(this, input, week, weekday, dow, doy);    }}function setWeekAll(weekYear, week, weekday, dow, doy) {    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);    this.year(date.getUTCFullYear());    this.month(date.getUTCMonth());    this.date(date.getUTCDate());    return this;}// FORMATTINGaddFormatToken('Q', 0, 'Qo', 'quarter');// ALIASESaddUnitAlias('quarter', 'Q');// PRIORITYaddUnitPriority('quarter', 7);// PARSINGaddRegexToken('Q', match1);addParseToken('Q', function (input, array) {    array[MONTH] = (toInt(input) - 1) * 3;});// MOMENTSfunction getSetQuarter(input) {    return input == null        ? Math.ceil((this.month() + 1) / 3)        : this.month((input - 1) * 3 + (this.month() % 3));}// FORMATTINGaddFormatToken('D', ['DD', 2], 'Do', 'date');// ALIASESaddUnitAlias('date', 'D');// PRIORITYaddUnitPriority('date', 9);// PARSINGaddRegexToken('D', match1to2);addRegexToken('DD', match1to2, match2);addRegexToken('Do', function (isStrict, locale) {    // TODO: Remove "ordinalParse" fallback in next major release.    return isStrict        ? locale._dayOfMonthOrdinalParse || locale._ordinalParse        : locale._dayOfMonthOrdinalParseLenient;});addParseToken(['D', 'DD'], DATE);addParseToken('Do', function (input, array) {    array[DATE] = toInt(input.match(match1to2)[0]);});// MOMENTSvar getSetDayOfMonth = makeGetSet('Date', true);// FORMATTINGaddFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');// ALIASESaddUnitAlias('dayOfYear', 'DDD');// PRIORITYaddUnitPriority('dayOfYear', 4);// PARSINGaddRegexToken('DDD', match1to3);addRegexToken('DDDD', match3);addParseToken(['DDD', 'DDDD'], function (input, array, config) {    config._dayOfYear = toInt(input);});// HELPERS// MOMENTSfunction getSetDayOfYear(input) {    var dayOfYear =        Math.round(            (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5        ) + 1;    return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');}// FORMATTINGaddFormatToken('m', ['mm', 2], 0, 'minute');// ALIASESaddUnitAlias('minute', 'm');// PRIORITYaddUnitPriority('minute', 14);// PARSINGaddRegexToken('m', match1to2);addRegexToken('mm', match1to2, match2);addParseToken(['m', 'mm'], MINUTE);// MOMENTSvar getSetMinute = makeGetSet('Minutes', false);// FORMATTINGaddFormatToken('s', ['ss', 2], 0, 'second');// ALIASESaddUnitAlias('second', 's');// PRIORITYaddUnitPriority('second', 15);// PARSINGaddRegexToken('s', match1to2);addRegexToken('ss', match1to2, match2);addParseToken(['s', 'ss'], SECOND);// MOMENTSvar getSetSecond = makeGetSet('Seconds', false);// FORMATTINGaddFormatToken('S', 0, 0, function () {    return ~~(this.millisecond() / 100);});addFormatToken(0, ['SS', 2], 0, function () {    return ~~(this.millisecond() / 10);});addFormatToken(0, ['SSS', 3], 0, 'millisecond');addFormatToken(0, ['SSSS', 4], 0, function () {    return this.millisecond() * 10;});addFormatToken(0, ['SSSSS', 5], 0, function () {    return this.millisecond() * 100;});addFormatToken(0, ['SSSSSS', 6], 0, function () {    return this.millisecond() * 1000;});addFormatToken(0, ['SSSSSSS', 7], 0, function () {    return this.millisecond() * 10000;});addFormatToken(0, ['SSSSSSSS', 8], 0, function () {    return this.millisecond() * 100000;});addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {    return this.millisecond() * 1000000;});// ALIASESaddUnitAlias('millisecond', 'ms');// PRIORITYaddUnitPriority('millisecond', 16);// PARSINGaddRegexToken('S', match1to3, match1);addRegexToken('SS', match1to3, match2);addRegexToken('SSS', match1to3, match3);var token, getSetMillisecond;for (token = 'SSSS'; token.length <= 9; token += 'S') {    addRegexToken(token, matchUnsigned);}function parseMs(input, array) {    array[MILLISECOND] = toInt(('0.' + input) * 1000);}for (token = 'S'; token.length <= 9; token += 'S') {    addParseToken(token, parseMs);}getSetMillisecond = makeGetSet('Milliseconds', false);// FORMATTINGaddFormatToken('z', 0, 0, 'zoneAbbr');addFormatToken('zz', 0, 0, 'zoneName');// MOMENTSfunction getZoneAbbr() {    return this._isUTC ? 'UTC' : '';}function getZoneName() {    return this._isUTC ? 'Coordinated Universal Time' : '';}var proto = Moment.prototype;proto.add = add;proto.calendar = calendar$1;proto.clone = clone;proto.diff = diff;proto.endOf = endOf;proto.format = format;proto.from = from;proto.fromNow = fromNow;proto.to = to;proto.toNow = toNow;proto.get = stringGet;proto.invalidAt = invalidAt;proto.isAfter = isAfter;proto.isBefore = isBefore;proto.isBetween = isBetween;proto.isSame = isSame;proto.isSameOrAfter = isSameOrAfter;proto.isSameOrBefore = isSameOrBefore;proto.isValid = isValid$2;proto.lang = lang;proto.locale = locale;proto.localeData = localeData;proto.max = prototypeMax;proto.min = prototypeMin;proto.parsingFlags = parsingFlags;proto.set = stringSet;proto.startOf = startOf;proto.subtract = subtract;proto.toArray = toArray;proto.toObject = toObject;proto.toDate = toDate;proto.toISOString = toISOString;proto.inspect = inspect;if (typeof Symbol !== 'undefined' && Symbol.for != null) {    proto[Symbol.for('nodejs.util.inspect.custom')] = function () {        return 'Moment<' + this.format() + '>';    };}proto.toJSON = toJSON;proto.toString = toString;proto.unix = unix;proto.valueOf = valueOf;proto.creationData = creationData;proto.eraName = getEraName;proto.eraNarrow = getEraNarrow;proto.eraAbbr = getEraAbbr;proto.eraYear = getEraYear;proto.year = getSetYear;proto.isLeapYear = getIsLeapYear;proto.weekYear = getSetWeekYear;proto.isoWeekYear = getSetISOWeekYear;proto.quarter = proto.quarters = getSetQuarter;proto.month = getSetMonth;proto.daysInMonth = getDaysInMonth;proto.week = proto.weeks = getSetWeek;proto.isoWeek = proto.isoWeeks = getSetISOWeek;proto.weeksInYear = getWeeksInYear;proto.weeksInWeekYear = getWeeksInWeekYear;proto.isoWeeksInYear = getISOWeeksInYear;proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;proto.date = getSetDayOfMonth;proto.day = proto.days = getSetDayOfWeek;proto.weekday = getSetLocaleDayOfWeek;proto.isoWeekday = getSetISODayOfWeek;proto.dayOfYear = getSetDayOfYear;proto.hour = proto.hours = getSetHour;proto.minute = proto.minutes = getSetMinute;proto.second = proto.seconds = getSetSecond;proto.millisecond = proto.milliseconds = getSetMillisecond;proto.utcOffset = getSetOffset;proto.utc = setOffsetToUTC;proto.local = setOffsetToLocal;proto.parseZone = setOffsetToParsedOffset;proto.hasAlignedHourOffset = hasAlignedHourOffset;proto.isDST = isDaylightSavingTime;proto.isLocal = isLocal;proto.isUtcOffset = isUtcOffset;proto.isUtc = isUtc;proto.isUTC = isUtc;proto.zoneAbbr = getZoneAbbr;proto.zoneName = getZoneName;proto.dates = deprecate(    'dates accessor is deprecated. Use date instead.',    getSetDayOfMonth);proto.months = deprecate(    'months accessor is deprecated. Use month instead',    getSetMonth);proto.years = deprecate(    'years accessor is deprecated. Use year instead',    getSetYear);proto.zone = deprecate(    'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',    getSetZone);proto.isDSTShifted = deprecate(    'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',    isDaylightSavingTimeShifted);function createUnix(input) {    return createLocal(input * 1000);}function createInZone() {    return createLocal.apply(null, arguments).parseZone();}function preParsePostFormat(string) {    return string;}var proto$1 = Locale.prototype;proto$1.calendar = calendar;proto$1.longDateFormat = longDateFormat;proto$1.invalidDate = invalidDate;proto$1.ordinal = ordinal;proto$1.preparse = preParsePostFormat;proto$1.postformat = preParsePostFormat;proto$1.relativeTime = relativeTime;proto$1.pastFuture = pastFuture;proto$1.set = set;proto$1.eras = localeEras;proto$1.erasParse = localeErasParse;proto$1.erasConvertYear = localeErasConvertYear;proto$1.erasAbbrRegex = erasAbbrRegex;proto$1.erasNameRegex = erasNameRegex;proto$1.erasNarrowRegex = erasNarrowRegex;proto$1.months = localeMonths;proto$1.monthsShort = localeMonthsShort;proto$1.monthsParse = localeMonthsParse;proto$1.monthsRegex = monthsRegex;proto$1.monthsShortRegex = monthsShortRegex;proto$1.week = localeWeek;proto$1.firstDayOfYear = localeFirstDayOfYear;proto$1.firstDayOfWeek = localeFirstDayOfWeek;proto$1.weekdays = localeWeekdays;proto$1.weekdaysMin = localeWeekdaysMin;proto$1.weekdaysShort = localeWeekdaysShort;proto$1.weekdaysParse = localeWeekdaysParse;proto$1.weekdaysRegex = weekdaysRegex;proto$1.weekdaysShortRegex = weekdaysShortRegex;proto$1.weekdaysMinRegex = weekdaysMinRegex;proto$1.isPM = localeIsPM;proto$1.meridiem = localeMeridiem;function get$1(format, index, field, setter) {    var locale = getLocale(),        utc = createUTC().set(setter, index);    return locale[field](utc, format);}function listMonthsImpl(format, index, field) {    if (isNumber(format)) {        index = format;        format = undefined;    }    format = format || '';    if (index != null) {        return get$1(format, index, field, 'month');    }    var i,        out = [];    for (i = 0; i < 12; i++) {        out[i] = get$1(format, i, field, 'month');    }    return out;}// ()// (5)// (fmt, 5)// (fmt)// (true)// (true, 5)// (true, fmt, 5)// (true, fmt)function listWeekdaysImpl(localeSorted, format, index, field) {    if (typeof localeSorted === 'boolean') {        if (isNumber(format)) {            index = format;            format = undefined;        }        format = format || '';    } else {        format = localeSorted;        index = format;        localeSorted = false;        if (isNumber(format)) {            index = format;            format = undefined;        }        format = format || '';    }    var locale = getLocale(),        shift = localeSorted ? locale._week.dow : 0,        i,        out = [];    if (index != null) {        return get$1(format, (index + shift) % 7, field, 'day');    }    for (i = 0; i < 7; i++) {        out[i] = get$1(format, (i + shift) % 7, field, 'day');    }    return out;}function listMonths(format, index) {    return listMonthsImpl(format, index, 'months');}function listMonthsShort(format, index) {    return listMonthsImpl(format, index, 'monthsShort');}function listWeekdays(localeSorted, format, index) {    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');}function listWeekdaysShort(localeSorted, format, index) {    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');}function listWeekdaysMin(localeSorted, format, index) {    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');}getSetGlobalLocale('en', {    eras: [        {            since: '0001-01-01',            until: +Infinity,            offset: 1,            name: 'Anno Domini',            narrow: 'AD',            abbr: 'AD',        },        {            since: '0000-12-31',            until: -Infinity,            offset: 1,            name: 'Before Christ',            narrow: 'BC',            abbr: 'BC',        },    ],    dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,    ordinal: function (number) {        var b = number % 10,            output =                toInt((number % 100) / 10) === 1                    ? 'th'                    : b === 1                    ? 'st'                    : b === 2                    ? 'nd'                    : b === 3                    ? 'rd'                    : 'th';        return number + output;    },});// Side effect importshooks.lang = deprecate(    'moment.lang is deprecated. Use moment.locale instead.',    getSetGlobalLocale);hooks.langData = deprecate(    'moment.langData is deprecated. Use moment.localeData instead.',    getLocale);var mathAbs = Math.abs;function abs() {    var data = this._data;    this._milliseconds = mathAbs(this._milliseconds);    this._days = mathAbs(this._days);    this._months = mathAbs(this._months);    data.milliseconds = mathAbs(data.milliseconds);    data.seconds = mathAbs(data.seconds);    data.minutes = mathAbs(data.minutes);    data.hours = mathAbs(data.hours);    data.months = mathAbs(data.months);    data.years = mathAbs(data.years);    return this;}function addSubtract$1(duration, input, value, direction) {    var other = createDuration(input, value);    duration._milliseconds += direction * other._milliseconds;    duration._days += direction * other._days;    duration._months += direction * other._months;    return duration._bubble();}// supports only 2.0-style add(1, 's') or add(duration)function add$1(input, value) {    return addSubtract$1(this, input, value, 1);}// supports only 2.0-style subtract(1, 's') or subtract(duration)function subtract$1(input, value) {    return addSubtract$1(this, input, value, -1);}function absCeil(number) {    if (number < 0) {        return Math.floor(number);    } else {        return Math.ceil(number);    }}function bubble() {    var milliseconds = this._milliseconds,        days = this._days,        months = this._months,        data = this._data,        seconds,        minutes,        hours,        years,        monthsFromDays;    // if we have a mix of positive and negative values, bubble down first    // check: https://github.com/moment/moment/issues/2166    if (        !(            (milliseconds >= 0 && days >= 0 && months >= 0) ||            (milliseconds <= 0 && days <= 0 && months <= 0)        )    ) {        milliseconds += absCeil(monthsToDays(months) + days) * 864e5;        days = 0;        months = 0;    }    // The following code bubbles up values, see the tests for    // examples of what that means.    data.milliseconds = milliseconds % 1000;    seconds = absFloor(milliseconds / 1000);    data.seconds = seconds % 60;    minutes = absFloor(seconds / 60);    data.minutes = minutes % 60;    hours = absFloor(minutes / 60);    data.hours = hours % 24;    days += absFloor(hours / 24);    // convert days to months    monthsFromDays = absFloor(daysToMonths(days));    months += monthsFromDays;    days -= absCeil(monthsToDays(monthsFromDays));    // 12 months -> 1 year    years = absFloor(months / 12);    months %= 12;    data.days = days;    data.months = months;    data.years = years;    return this;}function daysToMonths(days) {    // 400 years have 146097 days (taking into account leap year rules)    // 400 years have 12 months === 4800    return (days * 4800) / 146097;}function monthsToDays(months) {    // the reverse of daysToMonths    return (months * 146097) / 4800;}function as(units) {    if (!this.isValid()) {        return NaN;    }    var days,        months,        milliseconds = this._milliseconds;    units = normalizeUnits(units);    if (units === 'month' || units === 'quarter' || units === 'year') {        days = this._days + milliseconds / 864e5;        months = this._months + daysToMonths(days);        switch (units) {            case 'month':                return months;            case 'quarter':                return months / 3;            case 'year':                return months / 12;        }    } else {        // handle milliseconds separately because of floating point math errors (issue #1867)        days = this._days + Math.round(monthsToDays(this._months));        switch (units) {            case 'week':                return days / 7 + milliseconds / 6048e5;            case 'day':                return days + milliseconds / 864e5;            case 'hour':                return days * 24 + milliseconds / 36e5;            case 'minute':                return days * 1440 + milliseconds / 6e4;            case 'second':                return days * 86400 + milliseconds / 1000;            // Math.floor prevents floating point math errors here            case 'millisecond':                return Math.floor(days * 864e5) + milliseconds;            default:                throw new Error('Unknown unit ' + units);        }    }}// TODO: Use this.as('ms')?function valueOf$1() {    if (!this.isValid()) {        return NaN;    }    return (        this._milliseconds +        this._days * 864e5 +        (this._months % 12) * 2592e6 +        toInt(this._months / 12) * 31536e6    );}function makeAs(alias) {    return function () {        return this.as(alias);    };}var asMilliseconds = makeAs('ms'),    asSeconds = makeAs('s'),    asMinutes = makeAs('m'),    asHours = makeAs('h'),    asDays = makeAs('d'),    asWeeks = makeAs('w'),    asMonths = makeAs('M'),    asQuarters = makeAs('Q'),    asYears = makeAs('y');function clone$1() {    return createDuration(this);}function get$2(units) {    units = normalizeUnits(units);    return this.isValid() ? this[units + 's']() : NaN;}function makeGetter(name) {    return function () {        return this.isValid() ? this._data[name] : NaN;    };}var milliseconds = makeGetter('milliseconds'),    seconds = makeGetter('seconds'),    minutes = makeGetter('minutes'),    hours = makeGetter('hours'),    days = makeGetter('days'),    months = makeGetter('months'),    years = makeGetter('years');function weeks() {    return absFloor(this.days() / 7);}var round = Math.round,    thresholds = {        ss: 44, // a few seconds to seconds        s: 45, // seconds to minute        m: 45, // minutes to hour        h: 22, // hours to day        d: 26, // days to month/week        w: null, // weeks to month        M: 11, // months to year    };// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanizefunction substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);}function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {    var duration = createDuration(posNegDuration).abs(),        seconds = round(duration.as('s')),        minutes = round(duration.as('m')),        hours = round(duration.as('h')),        days = round(duration.as('d')),        months = round(duration.as('M')),        weeks = round(duration.as('w')),        years = round(duration.as('y')),        a =            (seconds <= thresholds.ss && ['s', seconds]) ||            (seconds < thresholds.s && ['ss', seconds]) ||            (minutes <= 1 && ['m']) ||            (minutes < thresholds.m && ['mm', minutes]) ||            (hours <= 1 && ['h']) ||            (hours < thresholds.h && ['hh', hours]) ||            (days <= 1 && ['d']) ||            (days < thresholds.d && ['dd', days]);    if (thresholds.w != null) {        a =            a ||            (weeks <= 1 && ['w']) ||            (weeks < thresholds.w && ['ww', weeks]);    }    a = a ||        (months <= 1 && ['M']) ||        (months < thresholds.M && ['MM', months]) ||        (years <= 1 && ['y']) || ['yy', years];    a[2] = withoutSuffix;    a[3] = +posNegDuration > 0;    a[4] = locale;    return substituteTimeAgo.apply(null, a);}// This function allows you to set the rounding function for relative time stringsfunction getSetRelativeTimeRounding(roundingFunction) {    if (roundingFunction === undefined) {        return round;    }    if (typeof roundingFunction === 'function') {        round = roundingFunction;        return true;    }    return false;}// This function allows you to set a threshold for relative time stringsfunction getSetRelativeTimeThreshold(threshold, limit) {    if (thresholds[threshold] === undefined) {        return false;    }    if (limit === undefined) {        return thresholds[threshold];    }    thresholds[threshold] = limit;    if (threshold === 's') {        thresholds.ss = limit - 1;    }    return true;}function humanize(argWithSuffix, argThresholds) {    if (!this.isValid()) {        return this.localeData().invalidDate();    }    var withSuffix = false,        th = thresholds,        locale,        output;    if (typeof argWithSuffix === 'object') {        argThresholds = argWithSuffix;        argWithSuffix = false;    }    if (typeof argWithSuffix === 'boolean') {        withSuffix = argWithSuffix;    }    if (typeof argThresholds === 'object') {        th = Object.assign({}, thresholds, argThresholds);        if (argThresholds.s != null && argThresholds.ss == null) {            th.ss = argThresholds.s - 1;        }    }    locale = this.localeData();    output = relativeTime$1(this, !withSuffix, th, locale);    if (withSuffix) {        output = locale.pastFuture(+this, output);    }    return locale.postformat(output);}var abs$1 = Math.abs;function sign(x) {    return (x > 0) - (x < 0) || +x;}function toISOString$1() {    // for ISO strings we do not use the normal bubbling rules:    //  * milliseconds bubble up until they become hours    //  * days do not bubble at all    //  * months bubble up until they become years    // This is because there is no context-free conversion between hours and days    // (think of clock changes)    // and also not between days and months (28-31 days per month)    if (!this.isValid()) {        return this.localeData().invalidDate();    }    var seconds = abs$1(this._milliseconds) / 1000,        days = abs$1(this._days),        months = abs$1(this._months),        minutes,        hours,        years,        s,        total = this.asSeconds(),        totalSign,        ymSign,        daysSign,        hmsSign;    if (!total) {        // this is the same as C#'s (Noda) and python (isodate)...        // but not other JS (goog.date)        return 'P0D';    }    // 3600 seconds -> 60 minutes -> 1 hour    minutes = absFloor(seconds / 60);    hours = absFloor(minutes / 60);    seconds %= 60;    minutes %= 60;    // 12 months -> 1 year    years = absFloor(months / 12);    months %= 12;    // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js    s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';    totalSign = total < 0 ? '-' : '';    ymSign = sign(this._months) !== sign(total) ? '-' : '';    daysSign = sign(this._days) !== sign(total) ? '-' : '';    hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';    return (        totalSign +        'P' +        (years ? ymSign + years + 'Y' : '') +        (months ? ymSign + months + 'M' : '') +        (days ? daysSign + days + 'D' : '') +        (hours || minutes || seconds ? 'T' : '') +        (hours ? hmsSign + hours + 'H' : '') +        (minutes ? hmsSign + minutes + 'M' : '') +        (seconds ? hmsSign + s + 'S' : '')    );}var proto$2 = Duration.prototype;proto$2.isValid = isValid$1;proto$2.abs = abs;proto$2.add = add$1;proto$2.subtract = subtract$1;proto$2.as = as;proto$2.asMilliseconds = asMilliseconds;proto$2.asSeconds = asSeconds;proto$2.asMinutes = asMinutes;proto$2.asHours = asHours;proto$2.asDays = asDays;proto$2.asWeeks = asWeeks;proto$2.asMonths = asMonths;proto$2.asQuarters = asQuarters;proto$2.asYears = asYears;proto$2.valueOf = valueOf$1;proto$2._bubble = bubble;proto$2.clone = clone$1;proto$2.get = get$2;proto$2.milliseconds = milliseconds;proto$2.seconds = seconds;proto$2.minutes = minutes;proto$2.hours = hours;proto$2.days = days;proto$2.weeks = weeks;proto$2.months = months;proto$2.years = years;proto$2.humanize = humanize;proto$2.toISOString = toISOString$1;proto$2.toString = toISOString$1;proto$2.toJSON = toISOString$1;proto$2.locale = locale;proto$2.localeData = localeData;proto$2.toIsoString = deprecate(    'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',    toISOString$1);proto$2.lang = lang;// FORMATTINGaddFormatToken('X', 0, 0, 'unix');addFormatToken('x', 0, 0, 'valueOf');// PARSINGaddRegexToken('x', matchSigned);addRegexToken('X', matchTimestamp);addParseToken('X', function (input, array, config) {    config._d = new Date(parseFloat(input) * 1000);});addParseToken('x', function (input, array, config) {    config._d = new Date(toInt(input));});//! moment.jshooks.version = '2.29.1';setHookCallback(createLocal);hooks.fn = proto;hooks.min = min;hooks.max = max;hooks.now = now;hooks.utc = createUTC;hooks.unix = createUnix;hooks.months = listMonths;hooks.isDate = isDate;hooks.locale = getSetGlobalLocale;hooks.invalid = createInvalid;hooks.duration = createDuration;hooks.isMoment = isMoment;hooks.weekdays = listWeekdays;hooks.parseZone = createInZone;hooks.localeData = getLocale;hooks.isDuration = isDuration;hooks.monthsShort = listMonthsShort;hooks.weekdaysMin = listWeekdaysMin;hooks.defineLocale = defineLocale;hooks.updateLocale = updateLocale;hooks.locales = listLocales;hooks.weekdaysShort = listWeekdaysShort;hooks.normalizeUnits = normalizeUnits;hooks.relativeTimeRounding = getSetRelativeTimeRounding;hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;hooks.calendarFormat = getCalendarFormat;hooks.prototype = proto;// currently HTML5 input type only supports 24-hour formatshooks.HTML5_FMT = {    DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />    DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />    DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />    DATE: 'YYYY-MM-DD', // <input type="date" />    TIME: 'HH:mm', // <input type="time" />    TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />    TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />    WEEK: 'GGGG-[W]WW', // <input type="week" />    MONTH: 'YYYY-MM', // <input type="month" />};export default hooks;
 |