{"version":3,"sources":["webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/globalize/dist/globalize/date.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/griffin-paypal/lib/client/utils/time-zone.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/griffin-paypal/relative-time.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/griffin-paypal/lib/client/relative-time.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/globalize/dist/globalize/message.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/globalize/dist/globalize/plural.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/globalize/dist/globalize/currency.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/globalize/dist/globalize/relative-time.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/globalize/dist/globalize/unit.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/griffin-paypal/lib/globalize-override/relative-time.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/make-plural/cardinals.mjs","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/griffin-paypal/lib/relativeTimeCommon.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/relative-time/dist/relative-time.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/zoned-date-time/src/zoned-date-time.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/griffin-paypal/date.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/griffin-paypal/lib/client/date.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/griffin-paypal/lib/dateCommon.js","webpack:///./transfer/utils/date-utils.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/globalize/dist/node-main.js","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/make-plural/plurals.mjs","webpack:////home/jenkins/agent/workspace/rAlWnROk32481EutLuZS/node_modules/griffin-paypal/lib/globalize-override/plural.js"],"names":["factory","Cldr","Globalize","createError","_createError","createErrorUnsupportedFeature","_createErrorUnsupportedFeature","formatMessage","_formatMessage","isPlainObject","_isPlainObject","looseMatching","_looseMatching","numberNumberingSystemDigitsMap","_numberNumberingSystemDigitsMap","numberSymbol","_numberSymbol","partsJoin","_partsJoin","partsPush","_partsPush","regexpEscape","_regexpEscape","removeLiteralQuotes","_removeLiteralQuotes","runtimeBind","_runtimeBind","stringPad","_stringPad","validate","_validate","validateCldr","_validateCldr","validateDefaultLocale","_validateDefaultLocale","validateParameterPresence","_validateParameterPresence","validateParameterType","_validateParameterType","validateParameterTypePlainObject","_validateParameterTypePlainObject","validateParameterTypeString","_validateParameterTypeString","validateParameterTypeDate","value","name","undefined","Date","validateSkeletonFieldsPosMap","split","reduce","memo","item","i","objectInvert","object","fn","key","Object","keys","newObject","dateExpandPatternSimilarFieldsMap","forEach","field","dateExpandPatternNormalizePatternType","character","datePatternRe","stringRepeat","str","count","result","dateExpandPatternAugmentFormat","requestedSkeleton","bestMatchFormat","decimalSeparator","countOfFractionalSeconds","fractionalSecondMatch","lastSecondIdx","match","length","skeletonWithoutFractionalSeconds","j","bestMatchFormatParts","matchedType","matchedLength","requestedType","requestedLength","requestedSkeletonParts","normalizePatternType","charAt","join","expandBestMatchFormat","replace","lastIndexOf","slice","dateExpandPatternCompareFormats","formatA","formatB","a","b","distance","lenA","lenB","typeA","typeB","Math","abs","dateExpandPatternGetBestMatchPattern","cldr","askedSkeleton","availableFormats","pattern","ratedFormats","skeleton","path","augmentFormat","compareFormats","main","push","rate","filter","format","sort","dateExpandPattern","options","dateSkeleton","timeSkeleton","type","getBestMatchPattern","combineDateTime","datePattern","timePattern","last","fieldsPosMap","invalidField","every","validateSkeleton","supplemental","timeData","preferred","test","date","time","datetime","raw","dateWeekDays","dateFirstDayOfWeek","indexOf","weekData","firstDay","dateGetTimeZoneName","timeZone","metaZone","dateTimezoneHourFormatH","hourFormat","map","dateTimezoneHourFormatHm","hFormat","parts","splice","runtimeCacheDataBind","data","dataCacheKey","ZonedDateTime","definePrivateProperty","property","defineProperty","getUntilsIndex","original","untils","index","originalTime","getTime","setWrap","offset1","this","getTimezoneOffset","ret","setTime","offset2","setMinutes","getMinutes","timeZoneData","offsets","isdsts","Error","local","prototype","clone","method","utcMethod","substr","valueOf","isDST","Boolean","inspect","abbrs","toISOString","toDate","dateStartOf","unit","setMonth","setDate","setHours","setSeconds","setMilliseconds","dateSetMonth","month","originalDate","getDate","day","lastDay","getFullYear","getMonth","dateSetDate","outOfRange","low","high","dateParse","_value","tokens","properties","amPm","daysOfYear","era","hour","hour12","timezoneOffset","year","truncateAt","token","chr","preferredTimeData","floor","setFullYear","feature","round","pow","dateLastDayOfMonth","getHours","max","apply","dateParserFn","numberParser","parseProperties","tokenizerProperties","digitsRe","valid","widths","current","numeric","tokenRe","hourFormatParse","aux","isPositive","oneDigitIfLengthOne","oneOrTwoDigitsIfLengthOneOrTwo","RegExp","source","twoDigitsIfLengthTwo","lookup","array","some","standardOrDaylightTzName","genericTzName","timeZoneName","timeZoneNameRe","oneOrTwoDigitsIfLengthOne","hourFormatRe","x","lexeme","isNaN","dateTokenizer","dateDayOfWeek","getDay","dateDayOfYear","from","dateFieldsMap","symbol","dateTimezoneHourFormat","timeSeparator","formatNumber","absOffset","offset","1","2","dateFormat","numberFormatters","dateField","preferredTime","daylightTzName","standardTzName","eras","String","minDays","ceil","quarters","months","days","dayPeriods","getSeconds","getMilliseconds","dateMillisecondsInDay","gmtZeroFormat","gmtFormat","optionsHasStyle","validateRequiredCldr","skip","validateOptionsPreset","validateOptionsPresetEach","validateOptionsSkeleton","validateRequiredIana","loadTimeZone","json","customData","load","dateFormatter","args","dateToPartsFormatter","returnFn","dateFormatterFn","pad","ianaListener","on","setNumberFormatterPattern","get","am","pm","exemplarCity","dateFormatProperties","off","numberFormatter","dateToPartsFormatterFn","dateParser","digitsReSource","re","part","populateProperties","testRe","copy","objectFilter","dateTokenizerProperties","dateParseProperties","formatDate","formatDateToParts","parseDate","module","exports","normalizeTimeZone","primaryTimeZone","timeZones","concat","getTimeZone","Intl","DateTimeFormat","resolvedOptions","error","intlGetTimeZone","assertion","basic","relativeTimeCommon","assertMetadata","assertType","RelativeTimeHandler","metadata","griffin","countrySupportedTimezones","ianaTimeZoneData","zoneData","griffinLocale","setConstants","formatRelativeTime","enumerable","createHandler","MessageFormat","alwaysArray","_alwaysArray","propname","obj","jkey","JSON","stringify","locale","pluralFunc","formatters","lc","runtime","pluralFuncs","fmt","f","_parse","SyntaxError","message","expected","found","line","column","child","parent","ctor","constructor","peg$subclass","parse","input","peg$result","arguments","peg$FAILED","peg$startRuleFunctions","start","peg$parsestart","peg$startRuleFunction","peg$c1","st","statements","peg$c2","peg$c3","peg$c4","description","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","argIdx","efmt","res","argumentIndex","elementFormat","output","peg$c11","peg$c12","peg$c13","t","s","val","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","p","peg$c19","op","pf","pluralForms","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","d","peg$c25","k","mfp","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$c35","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","chars","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$c47","peg$c48","peg$c49","peg$c50","peg$c51","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","peg$c57","peg$c58","peg$c59","h1","h2","h3","h4","fromCharCode","parseInt","peg$c60","peg$c61","peg$c62","ds","peg$c63","peg$c64","peg$c65","peg$c66","w","peg$c67","peg$c68","peg$currPos","peg$cachedPos","peg$cachedPosDetails","seenCR","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","startRule","peg$computePosDetails","pos","details","startPos","endPos","ch","advance","peg$fail","peg$buildException","posDetails","cleanupExpected","expectedDescs","Array","hex","charCodeAt","toString","toUpperCase","stringEscape","buildMessage","peg$parsemessageFormatPattern","s1","s2","peg$parsemessageFormatElement","peg$parsestring","peg$parseoctothorpe","s0","s3","s4","s5","s6","peg$parse_","peg$parseid","peg$parseelementFormat","peg$parsepluralFormatPattern","peg$parseselectFormatPattern","peg$parseargStylePattern","peg$parseoffsetPattern","peg$parsepluralForm","peg$parsedigits","s8","peg$parsepluralKey","peg$parseselectForm","peg$parsechars","peg$parsewhitespace","substring","peg$parsechar","peg$parsehexDigit","plurals","number","plural","lcfunc","isOrdinal","hasOwnProperty","call","other","select","_stringify","o","level","funcStr","indent","exec","_precompile","ast","tmp","r","pf_count","withIntlSupport","needOther","data_copy","compile","messages","opt","lc0","compileMsg","self","msg","e","Function","ns","global","createErrorPluralModulePresence","validateMessageBundle","attributes","bundle","validateMessagePresence","validateMessageType","validateParameterTypeMessageVariables","isArray","messageFormatterFn","formatter","variables","messageFormatterRuntimeBind","messageformatter","origToString","loadMessages","messageFormatter","pluralGenerator","MakePlural","_toConsumableArray","arr","arr2","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","configurable","writable","protoProps","staticProps","Parser","cond","_this","v0","m","sym","noteq","sn","num","se","x0","x1","Number","t0","_vars","vars","v","n10","n100","k0","_ref","cardinals","ordinals","categories","cardinal","ordinal","parser","buildFunction","_obj","fnToString","bind","req","cases","rules","_rules$r$trim$split","trim","_rules$r$trim$split2","cat","c","_this3","fold","body","_len","_key","validateParameterTypeNumber","pluralGeneratorFn","language","formatMessageToParts","_formatMessageToParts","numberNumberingSystem","_numberNumberingSystem","numberPattern","_numberPattern","_validateParameterTypeNumber","validateParameterTypeCurrency","currencySupplementalOverride","currency","digits","fraction","fractionData","_digits","_rounding","currencyUnitPatterns","currencyNameProperties","displayNames","unitPatterns","regexpNotS","regexpNotSAndZ","currencySymbolProperties","currencySpacing","symbolEntries","regexp","style","symbolForm","unshift","symbolEntry","position","currencyMatch","surroundingMatch","insertBetween","currencyToPartsFormatterFn","numberToPartsFormatter","formattedNumber","pluralForm","displayName","unitPattern","currencyNameFormat","currencyFormatter","currencyToPartsFormatter","currencyFormatterFn","accounting","code","objectOmit","currencyParser","formatCurrency","formatCurrencyToParts","parseCurrency","relativeTimeFormatterFn","relativeTimeFormat","relativeTimeFormatter","form","relativeTimeProperties","unitFormatterFn","unitProperties","dividend","dividendProperties","formattedValue","divisor","divisorProperties","pluralValue","oneProperty","compoundUnitPattern","unitFormat","unitCategories","category","pluralCount","stripPluralGarbage","unitGet","formatUnit","unitFormatter","Cardinals","relativeTime","n","af","ak","an","ar","ars","as","asa","az","bal","be","bem","bez","bg","bho","bm","bn","bo","br","n1000000","brx","bs","i10","i100","f10","f100","ca","i1000000","ce","ceb","cgg","ckb","cs","cy","da","de","doi","dsb","dv","dz","ee","el","en","eo","es","et","eu","fa","ff","fi","fil","fo","fr","fur","fy","ga","gd","gl","gsw","gu","guw","gv","ha","haw","he","hi","hnj","hr","hsb","hu","hy","ia","id","ig","ii","io","is","it","iu","ja","jbo","jgo","jmc","jv","jw","ka","kab","kaj","kcg","kde","kea","kk","kkj","kl","km","kn","ko","ks","ksb","ksh","ku","kw","n1000","n100000","ky","lag","lb","lg","lij","lkt","ln","lo","lt","lv","mas","mg","mgo","mk","ml","mn","mo","mr","ms","mt","my","nah","naq","nb","nd","ne","nl","nn","nnh","no","nqo","nr","nso","ny","nyn","om","or","os","osa","pa","pap","pcm","pl","prg","ps","pt","pt_PT","rm","ro","rof","ru","rwk","sah","saq","sat","sc","scn","sd","sdh","seh","ses","sg","sh","shi","si","sk","sl","sma","smi","smj","smn","sms","so","sq","sr","ss","ssy","su","sv","sw","syr","ta","te","teo","th","ti","tig","tk","tl","tn","to","tpi","tr","ts","tzm","ug","uk","und","ur","uz","ve","vec","vi","vo","vun","wa","wae","wo","xh","xog","yi","yo","yue","zh","zu","RelativeTime","default","getTimeInDurationNarrowStyle","threshold","minute","second","initializeFormatters","globalize","relativeTimeFormatters","assertRange","getValueOrDefault","objectValues","UNITS","RELATIVE_TIME_BEST_FIT","RELATIVE_TIME_SECOND","RELATIVE_TIME_MINUTE","RELATIVE_TIME_HOUR","RELATIVE_TIME_DAY","RELATIVE_TIME_MONTH","RELATIVE_TIME_YEAR","UNITS_VALUES","node","getTimeZoneData","getRelativeTimeFormatter","stack","globalizeToGriffinError","_globalize2","_interopRequireDefault","_zonedDateTime2","__esModule","defineCachedGetter","prop","defineGetter","_","startOf","_ref$timeZoneData","_ref$unit","now","diff","years","absDiff","hours","minutes","seconds","bestFit","core","dateCommon","PRESETS","globalizeOptions","PART_NAMES_STYLE_MAP","long","short","MESSAGES","errors","DATE_PARSE_ERROR","DateHandler","RangeError","DATE_CREDIT_CARD_EXP","formatFunction","dateString","globalizeResult","addError","partTypes","cldrFields","dateFields","partType","cldrFieldKey","cldrField","partsArray","dummyDate","datePartMasks","maskArray","partObj","partMask","handler","dates","fields","DATE_FORMAT_SHORT","DATE_FORMAT_MEDIUM","DATE_FORMAT_LONG","DATE_FORMAT_FULL","TIME_FORMAT_SHORT","TIME_FORMAT_MEDIUM","TIME_FORMAT_LONG","TIME_FORMAT_FULL","DATETIME_FORMAT_SHORT","DATETIME_FORMAT_MEDIUM","DATETIME_FORMAT_LONG","DATETIME_FORMAT_FULL","PRESETS_VALUES","presetKey","griffinMetadata","getGriffinMetadata","griffinDate","formatDateInputMask","griffinHandler","EXPIRY","SHORT","FULL","mask","dateInputMask","useGriffinDateHandler","useGriffinMetadata","useGriffinRelativeTimeHandler","griffinRelativeTime","isToday","today","getCanonicalRelativeDate","yesterday","isYesterday","RELATIVE_DATES","YESTERDAY","TODAY","ord","i1000"],"mappings":"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","file":"default~ReferralChecklist~addCardMessenger~addCardOverpanel~chatComponent~contact-list~guest~pay-req~72755bf8.esm.js","sourcesContent":["/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"./number\",\n\t\t\t\"cldr/event\",\n\t\t\t\"cldr/supplemental\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Extend global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar createError = Globalize._createError,\n\tcreateErrorUnsupportedFeature = Globalize._createErrorUnsupportedFeature,\n\tformatMessage = Globalize._formatMessage,\n\tisPlainObject = Globalize._isPlainObject,\n\tlooseMatching = Globalize._looseMatching,\n\tnumberNumberingSystemDigitsMap = Globalize._numberNumberingSystemDigitsMap,\n\tnumberSymbol = Globalize._numberSymbol,\n\tpartsJoin = Globalize._partsJoin,\n\tpartsPush = Globalize._partsPush,\n\tregexpEscape = Globalize._regexpEscape,\n\tremoveLiteralQuotes = Globalize._removeLiteralQuotes,\n\truntimeBind = Globalize._runtimeBind,\n\tstringPad = Globalize._stringPad,\n\tvalidate = Globalize._validate,\n\tvalidateCldr = Globalize._validateCldr,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterType = Globalize._validateParameterType,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject,\n\tvalidateParameterTypeString = Globalize._validateParameterTypeString;\n\n\nvar validateParameterTypeDate = function( value, name ) {\n\tvalidateParameterType( value, name, value === undefined || value instanceof Date, \"Date\" );\n};\n\n\n\n\nvar createErrorInvalidParameterValue = function( name, value ) {\n\treturn createError( \"E_INVALID_PAR_VALUE\", \"Invalid `{name}` value ({value}).\", {\n\t\tname: name,\n\t\tvalue: value\n\t});\n};\n\n\n\n\n/**\n * Create a map between the skeleton fields and their positions, e.g.,\n * {\n * G: 0\n * y: 1\n * ...\n * }\n */\nvar validateSkeletonFieldsPosMap = \"GyYuUrQqMLlwWEecdDFghHKkmsSAzZOvVXx\".split( \"\" ).reduce(function( memo, item, i ) {\n\tmemo[ item ] = i;\n\treturn memo;\n}, {});\n\n\n\n\n/**\n * validateSkeleton( skeleton )\n *\n * skeleton: Assume `j` has already been converted into a localized hour field.\n */\nvar validateSkeleton = function validateSkeleton( skeleton ) {\n\tvar last,\n\n\t\t// Using easier to read variable.\n\t\tfieldsPosMap = validateSkeletonFieldsPosMap;\n\n\t// \"The fields are from the Date Field Symbol Table in Date Format Patterns\"\n\t// Ref: http://www.unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems\n\t// I.e., check for invalid characters.\n\tskeleton.replace( /[^GyYuUrQqMLlwWEecdDFghHKkmsSAzZOvVXx]/, function( field ) {\n\t\tthrow createError(\n\t\t\t\"E_INVALID_OPTIONS\", \"Invalid field `{invalidField}` of skeleton `{value}`\",\n\t\t\t{\n\t\t\t\tinvalidField: field,\n\t\t\t\ttype: \"skeleton\",\n\t\t\t\tvalue: skeleton\n\t\t\t}\n\t\t);\n\t});\n\n\t// \"The canonical order is from top to bottom in that table; that is, yM not My\".\n\t// http://www.unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems\n\t// I.e., check for invalid order.\n\tskeleton.split( \"\" ).every(function( field ) {\n\t\tif ( fieldsPosMap[ field ] < last ) {\n\t\t\tthrow createError(\n\t\t\t\t\"E_INVALID_OPTIONS\", \"Invalid order `{invalidField}` of skeleton `{value}`\",\n\t\t\t\t{\n\t\t\t\t\tinvalidField: field,\n\t\t\t\t\ttype: \"skeleton\",\n\t\t\t\t\tvalue: skeleton\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\tlast = fieldsPosMap[ field ];\n\t\treturn true;\n\t});\n};\n\n\n\n\n/**\n * Returns a new object created by using `object`'s values as keys, and the keys as values.\n */\nvar objectInvert = function( object, fn ) {\n\tfn = fn || function( object, key, value ) {\n\t\tobject[ value ] = key;\n\t\treturn object;\n\t};\n\treturn Object.keys( object ).reduce(function( newObject, key ) {\n\t\treturn fn( newObject, key, object[ key ] );\n\t}, {});\n};\n\n\n\n\n// Invert key and values, e.g., {\"e\": \"eEc\"} ==> {\"e\": \"e\", \"E\": \"e\", \"c\": \"e\"}.\nvar dateExpandPatternSimilarFieldsMap = objectInvert({\n\t\"e\": \"eEc\",\n\t\"L\": \"ML\"\n}, function( object, key, value ) {\n\tvalue.split( \"\" ).forEach(function( field ) {\n\t\tobject[ field ] = key;\n\t});\n\treturn object;\n});\n\n\n\n\nvar dateExpandPatternNormalizePatternType = function( character ) {\n\treturn dateExpandPatternSimilarFieldsMap[ character ] || character;\n};\n\n\n\n\nvar datePatternRe = ( /([a-z])\\1*|'([^']|'')+'|''|./ig );\n\n\n\n\nvar stringRepeat = function( str, count ) {\n\tvar i, result = \"\";\n\tfor ( i = 0; i < count; i++ ) {\n\t\tresult = result + str;\n\t}\n\treturn result;\n};\n\n\n\n\nfunction expandBestMatchFormat( skeletonWithoutFractionalSeconds, bestMatchFormat ) {\n\tvar i, j, bestMatchFormatParts, matchedType, matchedLength, requestedType,\n\t\trequestedLength, requestedSkeletonParts,\n\n\t\t// Using an easier to read variable.\n\t\tnormalizePatternType = dateExpandPatternNormalizePatternType;\n\n\trequestedSkeletonParts = skeletonWithoutFractionalSeconds.match( datePatternRe );\n\tbestMatchFormatParts = bestMatchFormat.match( datePatternRe );\n\n\tfor ( i = 0; i < bestMatchFormatParts.length; i++ ) {\n\t\tmatchedType = bestMatchFormatParts[ i ].charAt( 0 );\n\t\tmatchedLength = bestMatchFormatParts[ i ].length;\n\t\tfor ( j = 0; j < requestedSkeletonParts.length; j++ ) {\n\t\t\trequestedType = requestedSkeletonParts[ j ].charAt( 0 );\n\t\t\trequestedLength = requestedSkeletonParts[ j ].length;\n\t\t\tif ( normalizePatternType( matchedType ) === normalizePatternType( requestedType ) &&\n\t\t\t\tmatchedLength < requestedLength\n\t\t\t) {\n\t\t\t\tbestMatchFormatParts[ i ] = stringRepeat( matchedType, requestedLength );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn bestMatchFormatParts.join( \"\" );\n}\n\n// See: http://www.unicode.org/reports/tr35/tr35-dates.html#Matching_Skeletons\nvar dateExpandPatternAugmentFormat = function( requestedSkeleton, bestMatchFormat, decimalSeparator ) {\n\tvar countOfFractionalSeconds, fractionalSecondMatch, lastSecondIdx,\n\t\tskeletonWithoutFractionalSeconds;\n\n\tfractionalSecondMatch = requestedSkeleton.match( /S/g );\n\tcountOfFractionalSeconds = fractionalSecondMatch ? fractionalSecondMatch.length : 0;\n\tskeletonWithoutFractionalSeconds = requestedSkeleton.replace( /S/g, \"\" );\n\n\tbestMatchFormat = expandBestMatchFormat( skeletonWithoutFractionalSeconds, bestMatchFormat );\n\n\tlastSecondIdx = bestMatchFormat.lastIndexOf( \"s\" );\n\tif ( lastSecondIdx !== -1 && countOfFractionalSeconds !== 0 ) {\n\t\tbestMatchFormat =\n\t\t\tbestMatchFormat.slice( 0, lastSecondIdx + 1 ) +\n\t\t\tdecimalSeparator +\n\t\t\tstringRepeat( \"S\", countOfFractionalSeconds ) +\n\t\t\tbestMatchFormat.slice( lastSecondIdx + 1 );\n\t}\n\treturn bestMatchFormat;\n};\n\n\n\n\nvar dateExpandPatternCompareFormats = function( formatA, formatB ) {\n\tvar a, b, distance, lenA, lenB, typeA, typeB, i, j,\n\n\t\t// Using easier to read variables.\n\t\tnormalizePatternType = dateExpandPatternNormalizePatternType;\n\n\tif ( formatA === formatB ) {\n\t\treturn 0;\n\t}\n\n\tformatA = formatA.match( datePatternRe );\n\tformatB = formatB.match( datePatternRe );\n\n\tif ( formatA.length !== formatB.length ) {\n\t\treturn -1;\n\t}\n\n\tdistance = 1;\n\tfor ( i = 0; i < formatA.length; i++ ) {\n\t\ta = formatA[ i ].charAt( 0 );\n\t\ttypeA = normalizePatternType( a );\n\t\ttypeB = null;\n\t\tfor ( j = 0; j < formatB.length; j++ ) {\n\t\t\tb = formatB[ j ].charAt( 0 );\n\t\t\ttypeB = normalizePatternType( b );\n\t\t\tif ( typeA === typeB ) {\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\ttypeB = null;\n\t\t\t}\n\t\t}\n\t\tif ( typeB === null ) {\n\t\t\treturn -1;\n\t\t}\n\t\tlenA = formatA[ i ].length;\n\t\tlenB = formatB[ j ].length;\n\t\tdistance = distance + Math.abs( lenA - lenB );\n\n\t\t// Most symbols have a small distance from each other, e.g., M ≅ L; E ≅ c; a ≅ b ≅ B;\n\t\t// H ≅ k ≅ h ≅ K; ...\n\t\tif ( a !== b ) {\n\t\t\tdistance += 1;\n\t\t}\n\n\t\t// Numeric (l<3) and text fields (l>=3) are given a larger distance from each other.\n\t\tif ( ( lenA < 3 && lenB >= 3 ) || ( lenA >= 3 && lenB < 3 ) ) {\n\t\t\tdistance += 20;\n\t\t}\n\t}\n\treturn distance;\n};\n\n\n\n\nvar dateExpandPatternGetBestMatchPattern = function( cldr, askedSkeleton ) {\n\tvar availableFormats, decimalSeparator, pattern, ratedFormats, skeleton,\n\t\tpath = \"dates/calendars/gregorian/dateTimeFormats/availableFormats\",\n\n\t\t// Using easier to read variables.\n\t\taugmentFormat = dateExpandPatternAugmentFormat,\n\t\tcompareFormats = dateExpandPatternCompareFormats;\n\n\tpattern = cldr.main([ path, askedSkeleton ]);\n\n\tif ( askedSkeleton && !pattern ) {\n\t\tavailableFormats = cldr.main([ path ]);\n\t\tratedFormats = [];\n\n\t\tfor ( skeleton in availableFormats ) {\n\t\t\tratedFormats.push({\n\t\t\t\tskeleton: skeleton,\n\t\t\t\tpattern: availableFormats[ skeleton ],\n\t\t\t\trate: compareFormats( askedSkeleton, skeleton )\n\t\t\t});\n\t\t}\n\n\t\tratedFormats = ratedFormats\n\t\t\t.filter( function( format ) {\n\t\t\t\treturn format.rate > -1;\n\t\t\t} )\n\t\t\t.sort( function( formatA, formatB ) {\n\t\t\t\treturn formatA.rate - formatB.rate;\n\t\t\t});\n\n\t\tif ( ratedFormats.length ) {\n\t\t\tdecimalSeparator = numberSymbol( \"decimal\", cldr );\n\t\t\tpattern = augmentFormat( askedSkeleton, ratedFormats[ 0 ].pattern, decimalSeparator );\n\t\t}\n\t}\n\n\treturn pattern;\n};\n\n\n\n\n/**\n * expandPattern( options, cldr )\n *\n * @options [Object] if String, it's considered a skeleton. Object accepts:\n * - skeleton: [String] lookup availableFormat;\n * - date: [String] ( \"full\" | \"long\" | \"medium\" | \"short\" );\n * - time: [String] ( \"full\" | \"long\" | \"medium\" | \"short\" );\n * - datetime: [String] ( \"full\" | \"long\" | \"medium\" | \"short\" );\n * - raw: [String] For more info see datetime/format.js.\n *\n * @cldr [Cldr instance].\n *\n * Return the corresponding pattern.\n * Eg for \"en\":\n * - \"GyMMMd\" returns \"MMM d, y G\";\n * - { skeleton: \"GyMMMd\" } returns \"MMM d, y G\";\n * - { date: \"full\" } returns \"EEEE, MMMM d, y\";\n * - { time: \"full\" } returns \"h:mm:ss a zzzz\";\n * - { datetime: \"full\" } returns \"EEEE, MMMM d, y 'at' h:mm:ss a zzzz\";\n * - { raw: \"dd/mm\" } returns \"dd/mm\";\n */\nvar dateExpandPattern = function( options, cldr ) {\n\tvar dateSkeleton, result, skeleton, timeSkeleton, type,\n\n\t\t// Using easier to read variables.\n\t\tgetBestMatchPattern = dateExpandPatternGetBestMatchPattern;\n\n\tfunction combineDateTime( type, datePattern, timePattern ) {\n\t\treturn formatMessage(\n\t\t\tcldr.main([\n\t\t\t\t\"dates/calendars/gregorian/dateTimeFormats\",\n\t\t\t\ttype\n\t\t\t]),\n\t\t\t[ timePattern, datePattern ]\n\t\t);\n\t}\n\n\tswitch ( true ) {\n\t\tcase \"skeleton\" in options:\n\t\t\tskeleton = options.skeleton;\n\n\t\t\t// Preferred hour (j).\n\t\t\tskeleton = skeleton.replace( /j/g, function() {\n\t\t\t\treturn cldr.supplemental.timeData.preferred();\n\t\t\t});\n\n\t\t\tvalidateSkeleton( skeleton );\n\n\t\t\t// Try direct map (note that getBestMatchPattern handles it).\n\t\t\t// ... or, try to \"best match\" the whole skeleton.\n\t\t\tresult = getBestMatchPattern(\n\t\t\t\tcldr,\n\t\t\t\tskeleton\n\t\t\t);\n\t\t\tif ( result ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// ... or, try to \"best match\" the date and time parts individually.\n\t\t\ttimeSkeleton = skeleton.split( /[^hHKkmsSAzZOvVXx]/ ).slice( -1 )[ 0 ];\n\t\t\tdateSkeleton = skeleton.split( /[^GyYuUrQqMLlwWdDFgEec]/ )[ 0 ];\n\t\t\tdateSkeleton = getBestMatchPattern(\n\t\t\t\tcldr,\n\t\t\t\tdateSkeleton\n\t\t\t);\n\t\t\ttimeSkeleton = getBestMatchPattern(\n\t\t\t\tcldr,\n\t\t\t\ttimeSkeleton\n\t\t\t);\n\n\t\t\tif ( /(MMMM|LLLL).*[Ec]/.test( dateSkeleton ) ) {\n\t\t\t\ttype = \"full\";\n\t\t\t} else if ( /MMMM|LLLL/.test( dateSkeleton ) ) {\n\t\t\t\ttype = \"long\";\n\t\t\t} else if ( /MMM|LLL/.test( dateSkeleton ) ) {\n\t\t\t\ttype = \"medium\";\n\t\t\t} else {\n\t\t\t\ttype = \"short\";\n\t\t\t}\n\n\t\t\tif ( dateSkeleton && timeSkeleton ) {\n\t\t\t\tresult = combineDateTime( type, dateSkeleton, timeSkeleton );\n\t\t\t} else {\n\t\t\t\tresult = dateSkeleton || timeSkeleton;\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase \"date\" in options:\n\t\tcase \"time\" in options:\n\t\t\tresult = cldr.main([\n\t\t\t\t\"dates/calendars/gregorian\",\n\t\t\t\t\"date\" in options ? \"dateFormats\" : \"timeFormats\",\n\t\t\t\t( options.date || options.time )\n\t\t\t]);\n\t\t\tbreak;\n\n\t\tcase \"datetime\" in options:\n\t\t\tresult = combineDateTime( options.datetime,\n\t\t\t\tcldr.main([ \"dates/calendars/gregorian/dateFormats\", options.datetime ]),\n\t\t\t\tcldr.main([ \"dates/calendars/gregorian/timeFormats\", options.datetime ])\n\t\t\t);\n\t\t\tbreak;\n\n\t\tcase \"raw\" in options:\n\t\t\tresult = options.raw;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow createErrorInvalidParameterValue({\n\t\t\t\tname: \"options\",\n\t\t\t\tvalue: options\n\t\t\t});\n\t}\n\n\treturn result;\n};\n\n\n\n\nvar dateWeekDays = [ \"sun\", \"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\" ];\n\n\n\n\n/**\n * firstDayOfWeek\n */\nvar dateFirstDayOfWeek = function( cldr ) {\n\treturn dateWeekDays.indexOf( cldr.supplemental.weekData.firstDay() );\n};\n\n\n\n\n/**\n * getTimeZoneName( length, type )\n */\nvar dateGetTimeZoneName = function( length, type, timeZone, cldr ) {\n\tvar metaZone, result;\n\n\tif ( !timeZone ) {\n\t\treturn;\n\t}\n\n\tresult = cldr.main([\n\t\t\"dates/timeZoneNames/zone\",\n\t\ttimeZone,\n\t\tlength < 4 ? \"short\" : \"long\",\n\t\ttype\n\t]);\n\n\tif ( result ) {\n\t\treturn result;\n\t}\n\n\t// The latest metazone data of the metazone array.\n\t// TODO expand to support the historic metazones based on the given date.\n\tmetaZone = cldr.supplemental([\n\t\t\"metaZones/metazoneInfo/timezone\", timeZone, 0,\n\t\t\"usesMetazone/_mzone\"\n\t]);\n\n\treturn cldr.main([\n\t\t\"dates/timeZoneNames/metazone\",\n\t\tmetaZone,\n\t\tlength < 4 ? \"short\" : \"long\",\n\t\ttype\n\t]);\n};\n\n\n\n\n/**\n * timezoneHourFormatShortH( hourFormat )\n *\n * @hourFormat [String]\n *\n * Unofficial deduction of the short hourFormat given time zone `hourFormat` element.\n * Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293\n *\n * Example:\n * - \"+HH.mm;-HH.mm\" => \"+H;-H\"\n * - \"+HH:mm;-HH:mm\" => \"+H;-H\"\n * - \"+HH:mm;−HH:mm\" => \"+H;−H\" (Note MINUS SIGN \\u2212)\n * - \"+HHmm;-HHmm\" => \"+H:-H\"\n */\nvar dateTimezoneHourFormatH = function( hourFormat ) {\n\treturn hourFormat\n\t\t.split( \";\" )\n\t\t.map(function( format ) {\n\t\t\treturn format.slice( 0, format.indexOf( \"H\" ) + 1 );\n\t\t})\n\t\t.join( \";\" );\n};\n\n\n\n\n/**\n * timezoneHourFormatLongHm( hourFormat )\n *\n * @hourFormat [String]\n *\n * Unofficial deduction of the short hourFormat given time zone `hourFormat` element.\n * Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293\n *\n * Example (hFormat === \"H\"): (used for short Hm)\n * - \"+HH.mm;-HH.mm\" => \"+H.mm;-H.mm\"\n * - \"+HH:mm;-HH:mm\" => \"+H:mm;-H:mm\"\n * - \"+HH:mm;−HH:mm\" => \"+H:mm;−H:mm\" (Note MINUS SIGN \\u2212)\n * - \"+HHmm;-HHmm\" => \"+Hmm:-Hmm\"\n *\n * Example (hFormat === \"HH\": (used for long Hm)\n * - \"+HH.mm;-HH.mm\" => \"+HH.mm;-HH.mm\"\n * - \"+HH:mm;-HH:mm\" => \"+HH:mm;-HH:mm\"\n * - \"+H:mm;-H:mm\" => \"+HH:mm;-HH:mm\"\n * - \"+HH:mm;−HH:mm\" => \"+HH:mm;−HH:mm\" (Note MINUS SIGN \\u2212)\n * - \"+HHmm;-HHmm\" => \"+HHmm:-HHmm\"\n */\nvar dateTimezoneHourFormatHm = function( hourFormat, hFormat ) {\n\treturn hourFormat\n\t\t.split( \";\" )\n\t\t.map(function( format ) {\n\t\t\tvar parts = format.split( /H+/ );\n\t\t\tparts.splice( 1, 0, hFormat );\n\t\t\treturn parts.join( \"\" );\n\t\t})\n\t\t.join( \";\" );\n};\n\n\n\n\nvar runtimeCacheDataBind = function( key, data ) {\n\tvar fn = function() {\n\t\treturn data;\n\t};\n\tfn.dataCacheKey = key;\n\treturn fn;\n};\n\n\n\n\n/**\n * properties( pattern, cldr )\n *\n * @pattern [String] raw pattern.\n * ref: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n *\n * @cldr [Cldr instance].\n *\n * Return the properties given the pattern and cldr.\n *\n * TODO Support other calendar types.\n */\nvar dateFormatProperties = function( pattern, cldr, timeZone ) {\n\tvar properties = {\n\t\t\tnumberFormatters: {},\n\t\t\tpattern: pattern,\n\t\t\ttimeSeparator: numberSymbol( \"timeSeparator\", cldr )\n\t\t},\n\t\twidths = [ \"abbreviated\", \"wide\", \"narrow\" ];\n\n\tfunction setNumberFormatterPattern( pad ) {\n\t\tproperties.numberFormatters[ pad ] = stringPad( \"\", pad );\n\t}\n\n\tif ( timeZone ) {\n\t\tproperties.timeZoneData = runtimeCacheDataBind( \"iana/\" + timeZone, {\n\t\t\toffsets: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"offsets\" ]),\n\t\t\tuntils: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"untils\" ]),\n\t\t\tisdsts: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"isdsts\" ])\n\t\t});\n\t}\n\n\tpattern.replace( datePatternRe, function( current ) {\n\t\tvar aux, chr, daylightTzName, formatNumber, genericTzName, length, standardTzName;\n\n\t\tchr = current.charAt( 0 );\n\t\tlength = current.length;\n\n\t\tif ( chr === \"j\" ) {\n\n\t\t\t// Locale preferred hHKk.\n\t\t\t// http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data\n\t\t\tproperties.preferredTime = chr = cldr.supplemental.timeData.preferred();\n\t\t}\n\n\t\t// ZZZZ: same as \"OOOO\".\n\t\tif ( chr === \"Z\" && length === 4 ) {\n\t\t\tchr = \"O\";\n\t\t\tlength = 4;\n\t\t}\n\n\t\t// z...zzz: \"{shortRegion}\", eg. \"PST\" or \"PDT\".\n\t\t// zzzz: \"{regionName} {Standard Time}\" or \"{regionName} {Daylight Time}\",\n\t\t// e.g., \"Pacific Standard Time\" or \"Pacific Daylight Time\".\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"z\" ) {\n\t\t\tstandardTzName = dateGetTimeZoneName( length, \"standard\", timeZone, cldr );\n\t\t\tdaylightTzName = dateGetTimeZoneName( length, \"daylight\", timeZone, cldr );\n\t\t\tif ( standardTzName ) {\n\t\t\t\tproperties.standardTzName = standardTzName;\n\t\t\t}\n\t\t\tif ( daylightTzName ) {\n\t\t\t\tproperties.daylightTzName = daylightTzName;\n\t\t\t}\n\n\t\t\t// Fall through the \"O\" format in case one name is missing.\n\t\t\tif ( !standardTzName || !daylightTzName ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tif ( length < 4 ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// v...vvv: \"{shortRegion}\", eg. \"PT\".\n\t\t// vvvv: \"{regionName} {Time}\" or \"{regionName} {Time}\",\n\t\t// e.g., \"Pacific Time\"\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"v\" ) {\n\t\t\tgenericTzName = dateGetTimeZoneName( length, \"generic\", timeZone, cldr );\n\n\t\t\t// Fall back to \"V\" format.\n\t\t\tif ( !genericTzName ) {\n\t\t\t\tchr = \"V\";\n\t\t\t\tlength = 4;\n\t\t\t}\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\tproperties.eras = cldr.main([\n\t\t\t\t\t\"dates/calendars/gregorian/eras\",\n\t\t\t\t\tlength <= 3 ? \"eraAbbr\" : ( length === 4 ? \"eraNames\" : \"eraNarrow\" )\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"y\":\n\n\t\t\t\t// Plain year.\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"Y\":\n\n\t\t\t\t// Year in \"Week of Year\"\n\t\t\t\tproperties.firstDay = dateFirstDayOfWeek( cldr );\n\t\t\t\tproperties.minDays = cldr.supplemental.weekData.minDays();\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"u\": // Extended year. Need to be implemented.\n\t\t\tcase \"U\": // Cyclic year name. Need to be implemented.\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"year pattern `\" + chr + \"`\"\n\t\t\t\t});\n\n\t\t\t// Quarter\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tif ( !properties.quarters ) {\n\t\t\t\t\t\tproperties.quarters = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( !properties.quarters[ chr ] ) {\n\t\t\t\t\t\tproperties.quarters[ chr ] = {};\n\t\t\t\t\t}\n\t\t\t\t\tproperties.quarters[ chr ][ length ] = cldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/quarters\",\n\t\t\t\t\t\tchr === \"Q\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tformatNumber = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tif ( !properties.months ) {\n\t\t\t\t\t\tproperties.months = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( !properties.months[ chr ] ) {\n\t\t\t\t\t\tproperties.months[ chr ] = {};\n\t\t\t\t\t}\n\t\t\t\t\tproperties.months[ chr ][ length ] = cldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/months\",\n\t\t\t\t\t\tchr === \"M\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tformatNumber = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Week - Week of Year (w) or Week of Month (W).\n\t\t\tcase \"w\":\n\t\t\tcase \"W\":\n\t\t\t\tproperties.firstDay = dateFirstDayOfWeek( cldr );\n\t\t\t\tproperties.minDays = cldr.supplemental.weekData.minDays();\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"d\":\n\t\t\tcase \"D\":\n\t\t\tcase \"F\":\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"g\":\n\n\t\t\t\t// Modified Julian day. Need to be implemented.\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"Julian day pattern `g`\"\n\t\t\t\t});\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\t\t\t\tif ( length <= 2 ) {\n\t\t\t\t\tproperties.firstDay = dateFirstDayOfWeek( cldr );\n\t\t\t\t\tformatNumber = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"E\":\n\t\t\t\tif ( !properties.days ) {\n\t\t\t\t\tproperties.days = {};\n\t\t\t\t}\n\t\t\t\tif ( !properties.days[ chr ] ) {\n\t\t\t\t\tproperties.days[ chr ] = {};\n\t\t\t\t}\n\t\t\t\tif ( length === 6 ) {\n\n\t\t\t\t\t// If short day names are not explicitly specified, abbreviated day names are\n\t\t\t\t\t// used instead.\n\t\t\t\t\t// http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras\n\t\t\t\t\t// http://unicode.org/cldr/trac/ticket/6790\n\t\t\t\t\tproperties.days[ chr ][ length ] = cldr.main([\n\t\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t\tchr === \"c\" ? \"stand-alone\" : \"format\",\n\t\t\t\t\t\t\t\"short\"\n\t\t\t\t\t\t]) || cldr.main([\n\t\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t\tchr === \"c\" ? \"stand-alone\" : \"format\",\n\t\t\t\t\t\t\t\"abbreviated\"\n\t\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tproperties.days[ chr ][ length ] = cldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\tchr === \"c\" ? \"stand-alone\" : \"format\",\n\t\t\t\t\t\twidths[ length < 3 ? 0 : length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tproperties.dayPeriods = {\n\t\t\t\t\tam: cldr.main(\n\t\t\t\t\t\t\"dates/calendars/gregorian/dayPeriods/format/wide/am\"\n\t\t\t\t\t),\n\t\t\t\t\tpm: cldr.main(\n\t\t\t\t\t\t\"dates/calendars/gregorian/dayPeriods/format/wide/pm\"\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t\tbreak;\n\n\t\t\t// Hour\n\t\t\tcase \"h\": // 1-12\n\t\t\tcase \"H\": // 0-23\n\t\t\tcase \"K\": // 0-11\n\t\t\tcase \"k\": // 1-24\n\n\t\t\t// Minute\n\t\t\tcase \"m\":\n\n\t\t\t// Second\n\t\t\tcase \"s\":\n\t\t\tcase \"S\":\n\t\t\tcase \"A\":\n\t\t\t\tformatNumber = true;\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"v\":\n\t\t\t\tif ( length !== 1 && length !== 4 ) {\n\t\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\t\tfeature: \"timezone pattern `\" + pattern + \"`\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tproperties.genericTzName = genericTzName;\n\t\t\t\tbreak;\n\n\t\t\tcase \"V\":\n\n\t\t\t\tif ( length === 1 ) {\n\t\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\t\tfeature: \"timezone pattern `\" + pattern + \"`\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif ( timeZone ) {\n\t\t\t\t\tif ( length === 2 ) {\n\t\t\t\t\t\tproperties.timeZoneName = timeZone;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar timeZoneName,\n\t\t\t\t\t\texemplarCity = cldr.main([\n\t\t\t\t\t\t\t\"dates/timeZoneNames/zone\", timeZone, \"exemplarCity\"\n\t\t\t\t\t\t]);\n\n\t\t\t\t\tif ( length === 3 ) {\n\t\t\t\t\t\tif ( !exemplarCity ) {\n\t\t\t\t\t\t\texemplarCity = cldr.main([\n\t\t\t\t\t\t\t\t\"dates/timeZoneNames/zone/Etc/Unknown/exemplarCity\"\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimeZoneName = exemplarCity;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( exemplarCity && length === 4 ) {\n\t\t\t\t\t\ttimeZoneName = formatMessage(\n\t\t\t\t\t\t\tcldr.main(\n\t\t\t\t\t\t\t\t\"dates/timeZoneNames/regionFormat\"\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t[ exemplarCity ]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( timeZoneName ) {\n\t\t\t\t\t\tproperties.timeZoneName = timeZoneName;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( current === \"v\" ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"O\":\n\n\t\t\t\t// O: \"{gmtFormat}+H;{gmtFormat}-H\" or \"{gmtZeroFormat}\", eg. \"GMT-8\" or \"GMT\".\n\t\t\t\t// OOOO: \"{gmtFormat}{hourFormat}\" or \"{gmtZeroFormat}\", eg. \"GMT-08:00\" or \"GMT\".\n\t\t\t\tproperties.gmtFormat = cldr.main( \"dates/timeZoneNames/gmtFormat\" );\n\t\t\t\tproperties.gmtZeroFormat = cldr.main( \"dates/timeZoneNames/gmtZeroFormat\" );\n\n\t\t\t\t// Unofficial deduction of the hourFormat variations.\n\t\t\t\t// Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293\n\t\t\t\taux = cldr.main( \"dates/timeZoneNames/hourFormat\" );\n\t\t\t\tproperties.hourFormat = length < 4 ?\n\t\t\t\t\t[ dateTimezoneHourFormatH( aux ), dateTimezoneHourFormatHm( aux, \"H\" ) ] :\n\t\t\t\t\tdateTimezoneHourFormatHm( aux, \"HH\" );\n\n\t\t\t/* falls through */\n\t\t\tcase \"Z\":\n\t\t\tcase \"X\":\n\t\t\tcase \"x\":\n\t\t\t\tsetNumberFormatterPattern( 1 );\n\t\t\t\tsetNumberFormatterPattern( 2 );\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif ( formatNumber ) {\n\t\t\tsetNumberFormatterPattern( length );\n\t\t}\n\t});\n\n\treturn properties;\n};\n\n\n\n\nvar dateFormatterFn = function( dateToPartsFormatter ) {\n\treturn function dateFormatter( value ) {\n\t\treturn partsJoin( dateToPartsFormatter( value ));\n\t};\n};\n\n\n\n\n/**\n * parseProperties( cldr )\n *\n * @cldr [Cldr instance].\n *\n * @timeZone [String] FIXME.\n *\n * Return parser properties.\n */\nvar dateParseProperties = function( cldr, timeZone ) {\n\tvar properties = {\n\t\tpreferredTimeData: cldr.supplemental.timeData.preferred()\n\t};\n\n\tif ( timeZone ) {\n\t\tproperties.timeZoneData = runtimeCacheDataBind( \"iana/\" + timeZone, {\n\t\t\toffsets: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"offsets\" ]),\n\t\t\tuntils: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"untils\" ]),\n\t\t\tisdsts: cldr.get([ \"globalize-iana/zoneData\", timeZone, \"isdsts\" ])\n\t\t});\n\t}\n\n\treturn properties;\n};\n\n\nvar ZonedDateTime = (function() {\nfunction definePrivateProperty(object, property, value) {\n Object.defineProperty(object, property, {\n value: value\n });\n}\n\nfunction getUntilsIndex(original, untils) {\n var index = 0;\n var originalTime = original.getTime();\n\n // TODO Should we do binary search for improved performance?\n while (index < untils.length - 1 && originalTime >= untils[index]) {\n index++;\n }\n return index;\n}\n\nfunction setWrap(fn) {\n var offset1 = this.getTimezoneOffset();\n var ret = fn();\n this.original.setTime(new Date(this.getTime()));\n var offset2 = this.getTimezoneOffset();\n if (offset2 - offset1) {\n this.original.setMinutes(this.original.getMinutes() + offset2 - offset1);\n }\n return ret;\n}\n\nvar ZonedDateTime = function(date, timeZoneData) {\n definePrivateProperty(this, \"original\", new Date(date.getTime()));\n definePrivateProperty(this, \"local\", new Date(date.getTime()));\n definePrivateProperty(this, \"timeZoneData\", timeZoneData);\n definePrivateProperty(this, \"setWrap\", setWrap);\n if (!(timeZoneData.untils && timeZoneData.offsets && timeZoneData.isdsts)) {\n throw new Error(\"Invalid IANA data\");\n }\n this.setTime(this.local.getTime() - this.getTimezoneOffset() * 60 * 1000);\n};\n\nZonedDateTime.prototype.clone = function() {\n return new ZonedDateTime(this.original, this.timeZoneData);\n};\n\n// Date field getters.\n[\"getFullYear\", \"getMonth\", \"getDate\", \"getDay\", \"getHours\", \"getMinutes\",\n\"getSeconds\", \"getMilliseconds\"].forEach(function(method) {\n // Corresponding UTC method, e.g., \"getUTCFullYear\" if method === \"getFullYear\".\n var utcMethod = \"getUTC\" + method.substr(3);\n ZonedDateTime.prototype[method] = function() {\n return this.local[utcMethod]();\n };\n});\n\n// Note: Define .valueOf = .getTime for arithmetic operations like date1 - date2.\nZonedDateTime.prototype.valueOf =\nZonedDateTime.prototype.getTime = function() {\n return this.local.getTime() + this.getTimezoneOffset() * 60 * 1000;\n};\n\nZonedDateTime.prototype.getTimezoneOffset = function() {\n var index = getUntilsIndex(this.original, this.timeZoneData.untils);\n return this.timeZoneData.offsets[index];\n};\n\n// Date field setters.\n[\"setFullYear\", \"setMonth\", \"setDate\", \"setHours\", \"setMinutes\", \"setSeconds\", \"setMilliseconds\"].forEach(function(method) {\n // Corresponding UTC method, e.g., \"setUTCFullYear\" if method === \"setFullYear\".\n var utcMethod = \"setUTC\" + method.substr(3);\n ZonedDateTime.prototype[method] = function(value) {\n var local = this.local;\n // Note setWrap is needed for seconds and milliseconds just because\n // abs(value) could be >= a minute.\n return this.setWrap(function() {\n return local[utcMethod](value);\n });\n };\n});\n\nZonedDateTime.prototype.setTime = function(time) {\n return this.local.setTime(time);\n};\n\nZonedDateTime.prototype.isDST = function() {\n var index = getUntilsIndex(this.original, this.timeZoneData.untils);\n return Boolean(this.timeZoneData.isdsts[index]);\n};\n\nZonedDateTime.prototype.inspect = function() {\n var index = getUntilsIndex(this.original, this.timeZoneData.untils);\n var abbrs = this.timeZoneData.abbrs;\n return this.local.toISOString().replace(/Z$/, \"\") + \" \" +\n (abbrs && abbrs[index] + \" \" || (this.getTimezoneOffset() * -1) + \" \") +\n (this.isDST() ? \"(daylight savings)\" : \"\");\n};\n\nZonedDateTime.prototype.toDate = function() {\n return new Date(this.getTime());\n};\n\n// Type cast getters.\n[\"toISOString\", \"toJSON\", \"toUTCString\"].forEach(function(method) {\n ZonedDateTime.prototype[method] = function() {\n return this.toDate()[method]();\n };\n});\n\nreturn ZonedDateTime;\n}());\n\n\n/**\n * isLeapYear( year )\n *\n * @year [Number]\n *\n * Returns an indication whether the specified year is a leap year.\n */\nvar dateIsLeapYear = function( year ) {\n\treturn new Date( year, 1, 29 ).getMonth() === 1;\n};\n\n\n\n\n/**\n * lastDayOfMonth( date )\n *\n * @date [Date]\n *\n * Return the last day of the given date's month\n */\nvar dateLastDayOfMonth = function( date ) {\n\treturn new Date( date.getFullYear(), date.getMonth() + 1, 0 ).getDate();\n};\n\n\n\n\n/**\n * startOf changes the input to the beginning of the given unit.\n *\n * For example, starting at the start of a day, resets hours, minutes\n * seconds and milliseconds to 0. Starting at the month does the same, but\n * also sets the date to 1.\n *\n * Returns the modified date\n */\nvar dateStartOf = function( date, unit ) {\n\tdate = date instanceof ZonedDateTime ? date.clone() : new Date( date.getTime() );\n\tswitch ( unit ) {\n\t\tcase \"year\":\n\t\t\tdate.setMonth( 0 );\n\t\t/* falls through */\n\t\tcase \"month\":\n\t\t\tdate.setDate( 1 );\n\t\t/* falls through */\n\t\tcase \"day\":\n\t\t\tdate.setHours( 0 );\n\t\t/* falls through */\n\t\tcase \"hour\":\n\t\t\tdate.setMinutes( 0 );\n\t\t/* falls through */\n\t\tcase \"minute\":\n\t\t\tdate.setSeconds( 0 );\n\t\t/* falls through */\n\t\tcase \"second\":\n\t\t\tdate.setMilliseconds( 0 );\n\t}\n\treturn date;\n};\n\n\n\n\n/**\n * Differently from native date.setDate(), this function returns a date whose\n * day remains inside the month boundaries. For example:\n *\n * setDate( FebDate, 31 ): a \"Feb 28\" date.\n * setDate( SepDate, 31 ): a \"Sep 30\" date.\n */\nvar dateSetDate = function( date, day ) {\n\tvar lastDay = new Date( date.getFullYear(), date.getMonth() + 1, 0 ).getDate();\n\n\tdate.setDate( day < 1 ? 1 : day < lastDay ? day : lastDay );\n};\n\n\n\n\n/**\n * Differently from native date.setMonth(), this function adjusts date if\n * needed, so final month is always the one set.\n *\n * setMonth( Jan31Date, 1 ): a \"Feb 28\" date.\n * setDate( Jan31Date, 8 ): a \"Sep 30\" date.\n */\nvar dateSetMonth = function( date, month ) {\n\tvar originalDate = date.getDate();\n\n\tdate.setDate( 1 );\n\tdate.setMonth( month );\n\tdateSetDate( date, originalDate );\n};\n\n\n\n\nvar outOfRange = function( value, low, high ) {\n\treturn value < low || value > high;\n};\n\n\n\n\n/**\n * parse( value, tokens, properties )\n *\n * @value [String] string date.\n *\n * @tokens [Object] tokens returned by date/tokenizer.\n *\n * @properties [Object] output returned by date/tokenizer-properties.\n *\n * ref: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n */\nvar dateParse = function( _value, tokens, properties ) {\n\tvar amPm, day, daysOfYear, month, era, hour, hour12, timezoneOffset, valid,\n\t\tYEAR = 0,\n\t\tMONTH = 1,\n\t\tDAY = 2,\n\t\tHOUR = 3,\n\t\tMINUTE = 4,\n\t\tSECOND = 5,\n\t\tMILLISECONDS = 6,\n\t\tdate = new Date(),\n\t\ttruncateAt = [],\n\t\tunits = [ \"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"milliseconds\" ];\n\n\t// Create globalize date with given timezone data.\n\tif ( properties.timeZoneData ) {\n\t\tdate = new ZonedDateTime( date, properties.timeZoneData() );\n\t}\n\n\tif ( !tokens.length ) {\n\t\treturn null;\n\t}\n\n\tvalid = tokens.every(function( token ) {\n\t\tvar century, chr, value, length;\n\n\t\tif ( token.type === \"literal\" ) {\n\n\t\t\t// continue\n\t\t\treturn true;\n\t\t}\n\n\t\tchr = token.type.charAt( 0 );\n\t\tlength = token.type.length;\n\n\t\tif ( chr === \"j\" ) {\n\n\t\t\t// Locale preferred hHKk.\n\t\t\t// http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data\n\t\t\tchr = properties.preferredTimeData;\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\ttruncateAt.push( YEAR );\n\t\t\t\tera = +token.value;\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"y\":\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( length === 2 ) {\n\t\t\t\t\tif ( outOfRange( value, 0, 99 ) ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\t// mimic dojo/date/locale: choose century to apply, according to a sliding\n\t\t\t\t\t// window of 80 years before and 20 years after present year.\n\t\t\t\t\tcentury = Math.floor( date.getFullYear() / 100 ) * 100;\n\t\t\t\t\tvalue += century;\n\t\t\t\t\tif ( value > date.getFullYear() + 20 ) {\n\t\t\t\t\t\tvalue -= 100;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdate.setFullYear( value );\n\t\t\t\ttruncateAt.push( YEAR );\n\t\t\t\tbreak;\n\n\t\t\tcase \"Y\": // Year in \"Week of Year\"\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"year pattern `\" + chr + \"`\"\n\t\t\t\t});\n\n\t\t\t// Quarter (skip)\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\t\t\t\tif ( length <= 2 ) {\n\t\t\t\t\tvalue = token.value;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = +token.value;\n\t\t\t\t}\n\t\t\t\tif ( outOfRange( value, 1, 12 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Setting the month later so that we have the correct year and can determine\n\t\t\t\t// the correct last day of February in case of leap year.\n\t\t\t\tmonth = value;\n\t\t\t\ttruncateAt.push( MONTH );\n\t\t\t\tbreak;\n\n\t\t\t// Week (skip)\n\t\t\tcase \"w\": // Week of Year.\n\t\t\tcase \"W\": // Week of Month.\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"d\":\n\t\t\t\tday = token.value;\n\t\t\t\ttruncateAt.push( DAY );\n\t\t\t\tbreak;\n\n\t\t\tcase \"D\":\n\t\t\t\tdaysOfYear = token.value;\n\t\t\t\ttruncateAt.push( DAY );\n\t\t\t\tbreak;\n\n\t\t\tcase \"F\":\n\n\t\t\t\t// Day of Week in month. eg. 2nd Wed in July.\n\t\t\t\t// Skip\n\t\t\t\tbreak;\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\t\t\tcase \"E\":\n\n\t\t\t\t// Skip.\n\t\t\t\t// value = arrayIndexOf( dateWeekDays, token.value );\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tamPm = token.value;\n\t\t\t\tbreak;\n\n\t\t\t// Hour\n\t\t\tcase \"h\": // 1-12\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 1, 12 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\thour = hour12 = true;\n\t\t\t\tdate.setHours( value === 12 ? 0 : value );\n\t\t\t\ttruncateAt.push( HOUR );\n\t\t\t\tbreak;\n\n\t\t\tcase \"K\": // 0-11\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 0, 11 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\thour = hour12 = true;\n\t\t\t\tdate.setHours( value );\n\t\t\t\ttruncateAt.push( HOUR );\n\t\t\t\tbreak;\n\n\t\t\tcase \"k\": // 1-24\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 1, 24 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\thour = true;\n\t\t\t\tdate.setHours( value === 24 ? 0 : value );\n\t\t\t\ttruncateAt.push( HOUR );\n\t\t\t\tbreak;\n\n\t\t\tcase \"H\": // 0-23\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 0, 23 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\thour = true;\n\t\t\t\tdate.setHours( value );\n\t\t\t\ttruncateAt.push( HOUR );\n\t\t\t\tbreak;\n\n\t\t\t// Minute\n\t\t\tcase \"m\":\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 0, 59 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tdate.setMinutes( value );\n\t\t\t\ttruncateAt.push( MINUTE );\n\t\t\t\tbreak;\n\n\t\t\t// Second\n\t\t\tcase \"s\":\n\t\t\t\tvalue = token.value;\n\t\t\t\tif ( outOfRange( value, 0, 59 ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tdate.setSeconds( value );\n\t\t\t\ttruncateAt.push( SECOND );\n\t\t\t\tbreak;\n\n\t\t\tcase \"A\":\n\t\t\t\tdate.setHours( 0 );\n\t\t\t\tdate.setMinutes( 0 );\n\t\t\t\tdate.setSeconds( 0 );\n\n\t\t\t/* falls through */\n\t\t\tcase \"S\":\n\t\t\t\tvalue = Math.round( token.value * Math.pow( 10, 3 - length ) );\n\t\t\t\tdate.setMilliseconds( value );\n\t\t\t\ttruncateAt.push( MILLISECONDS );\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"z\":\n\t\t\tcase \"Z\":\n\t\t\tcase \"O\":\n\t\t\tcase \"v\":\n\t\t\tcase \"V\":\n\t\t\tcase \"X\":\n\t\t\tcase \"x\":\n\t\t\t\tif ( typeof token.value === \"number\" ) {\n\t\t\t\t\ttimezoneOffset = token.value;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn true;\n\t});\n\n\tif ( !valid ) {\n\t\treturn null;\n\t}\n\n\t// 12-hour format needs AM or PM, 24-hour format doesn't, ie. return null\n\t// if amPm && !hour12 || !amPm && hour12.\n\tif ( hour && !( !amPm ^ hour12 ) ) {\n\t\treturn null;\n\t}\n\n\tif ( era === 0 ) {\n\n\t\t// 1 BC = year 0\n\t\tdate.setFullYear( date.getFullYear() * -1 + 1 );\n\t}\n\n\tif ( month !== undefined ) {\n\t\tdateSetMonth( date, month - 1 );\n\t}\n\n\tif ( day !== undefined ) {\n\t\tif ( outOfRange( day, 1, dateLastDayOfMonth( date ) ) ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setDate( day );\n\t} else if ( daysOfYear !== undefined ) {\n\t\tif ( outOfRange( daysOfYear, 1, dateIsLeapYear( date.getFullYear() ) ? 366 : 365 ) ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setMonth( 0 );\n\t\tdate.setDate( daysOfYear );\n\t}\n\n\tif ( hour12 && amPm === \"pm\" ) {\n\t\tdate.setHours( date.getHours() + 12 );\n\t}\n\n\tif ( timezoneOffset !== undefined ) {\n\t\tdate.setMinutes( date.getMinutes() + timezoneOffset - date.getTimezoneOffset() );\n\t}\n\n\t// Truncate date at the most precise unit defined. Eg.\n\t// If value is \"12/31\", and pattern is \"MM/dd\":\n\t// => new Date( , 12, 31, 0, 0, 0, 0 );\n\ttruncateAt = Math.max.apply( null, truncateAt );\n\tdate = dateStartOf( date, units[ truncateAt ] );\n\n\t// Get date back from globalize date.\n\tif ( date instanceof ZonedDateTime ) {\n\t\tdate = date.toDate();\n\t}\n\n\treturn date;\n};\n\n\n/* eslint-disable no-unused-expressions */\n\n\n\n/**\n * tokenizer( value, numberParser, properties )\n *\n * @value [String] string date.\n *\n * @numberParser [Function]\n *\n * @properties [Object] output returned by date/tokenizer-properties.\n *\n * Returns an Array of tokens, eg. value \"5 o'clock PM\", pattern \"h 'o''clock' a\":\n * [{\n * type: \"h\",\n * lexeme: \"5\"\n * }, {\n * type: \"literal\",\n * lexeme: \" \"\n * }, {\n * type: \"literal\",\n * lexeme: \"o'clock\"\n * }, {\n * type: \"literal\",\n * lexeme: \" \"\n * }, {\n * type: \"a\",\n * lexeme: \"PM\",\n * value: \"pm\"\n * }]\n *\n * OBS: lexeme's are always String and may return invalid ranges depending of the token type.\n * Eg. \"99\" for month number.\n *\n * Return an empty Array when not successfully parsed.\n */\nvar dateTokenizer = function( value, numberParser, properties ) {\n\tvar digitsRe, valid,\n\t\ttokens = [],\n\t\twidths = [ \"abbreviated\", \"wide\", \"narrow\" ];\n\n\tdigitsRe = properties.digitsRe;\n\tvalue = looseMatching( value );\n\n\tvalid = properties.pattern.match( datePatternRe ).every(function( current ) {\n\t\tvar aux, chr, length, numeric, tokenRe,\n\t\t\ttoken = {};\n\n\t\tfunction hourFormatParse( tokenRe, numberParser ) {\n\t\t\tvar aux, isPositive,\n\t\t\t\tmatch = value.match( tokenRe );\n\t\t\tnumberParser = numberParser || function( value ) {\n\t\t\t\treturn +value;\n\t\t\t};\n\n\t\t\tif ( !match ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tisPositive = match[ 1 ];\n\n\t\t\t// hourFormat containing H only, e.g., `+H;-H`\n\t\t\tif ( match.length < 6 ) {\n\t\t\t\taux = isPositive ? 1 : 3;\n\t\t\t\ttoken.value = numberParser( match[ aux ] ) * 60;\n\n\t\t\t// hourFormat containing H and m, e.g., `+HHmm;-HHmm`\n\t\t\t} else if ( match.length < 10 ) {\n\t\t\t\taux = isPositive ? [ 1, 3 ] : [ 5, 7 ];\n\t\t\t\ttoken.value = numberParser( match[ aux[ 0 ] ] ) * 60 +\n\t\t\t\t\tnumberParser( match[ aux[ 1 ] ] );\n\n\t\t\t// hourFormat containing H, m, and s e.g., `+HHmmss;-HHmmss`\n\t\t\t} else {\n\t\t\t\taux = isPositive ? [ 1, 3, 5 ] : [ 7, 9, 11 ];\n\t\t\t\ttoken.value = numberParser( match[ aux[ 0 ] ] ) * 60 +\n\t\t\t\t\tnumberParser( match[ aux[ 1 ] ] ) +\n\t\t\t\t\tnumberParser( match[ aux[ 2 ] ] ) / 60;\n\t\t\t}\n\n\t\t\tif ( isPositive ) {\n\t\t\t\ttoken.value *= -1;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction oneDigitIfLengthOne() {\n\t\t\tif ( length === 1 ) {\n\n\t\t\t\t// Unicode equivalent to /\\d/\n\t\t\t\tnumeric = true;\n\t\t\t\treturn tokenRe = digitsRe;\n\t\t\t}\n\t\t}\n\n\t\tfunction oneOrTwoDigitsIfLengthOne() {\n\t\t\tif ( length === 1 ) {\n\n\t\t\t\t// Unicode equivalent to /\\d\\d?/\n\t\t\t\tnumeric = true;\n\t\t\t\treturn tokenRe = new RegExp( \"^(\" + digitsRe.source + \"){1,2}\" );\n\t\t\t}\n\t\t}\n\n\t\tfunction oneOrTwoDigitsIfLengthOneOrTwo() {\n\t\t\tif ( length === 1 || length === 2 ) {\n\n\t\t\t\t// Unicode equivalent to /\\d\\d?/\n\t\t\t\tnumeric = true;\n\t\t\t\treturn tokenRe = new RegExp( \"^(\" + digitsRe.source + \"){1,2}\" );\n\t\t\t}\n\t\t}\n\n\t\tfunction twoDigitsIfLengthTwo() {\n\t\t\tif ( length === 2 ) {\n\n\t\t\t\t// Unicode equivalent to /\\d\\d/\n\t\t\t\tnumeric = true;\n\t\t\t\treturn tokenRe = new RegExp( \"^(\" + digitsRe.source + \"){2}\" );\n\t\t\t}\n\t\t}\n\n\t\t// Brute-force test every locale entry in an attempt to match the given value.\n\t\t// Return the first found one (and set token accordingly), or null.\n\t\tfunction lookup( path ) {\n\t\t\tvar array = properties[ path.join( \"/\" ) ];\n\n\t\t\tif ( !array ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// array of pairs [key, value] sorted by desc value length.\n\t\t\tarray.some(function( item ) {\n\t\t\t\tvar valueRe = item[ 1 ];\n\t\t\t\tif ( valueRe.test( value ) ) {\n\t\t\t\t\ttoken.value = item[ 0 ];\n\t\t\t\t\ttokenRe = item[ 1 ];\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn null;\n\t\t}\n\n\t\ttoken.type = current;\n\t\tchr = current.charAt( 0 );\n\t\tlength = current.length;\n\n\t\tif ( chr === \"Z\" ) {\n\n\t\t\t// Z..ZZZ: same as \"xxxx\".\n\t\t\tif ( length < 4 ) {\n\t\t\t\tchr = \"x\";\n\t\t\t\tlength = 4;\n\n\t\t\t// ZZZZ: same as \"OOOO\".\n\t\t\t} else if ( length < 5 ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tlength = 4;\n\n\t\t\t// ZZZZZ: same as \"XXXXX\"\n\t\t\t} else {\n\t\t\t\tchr = \"X\";\n\t\t\t\tlength = 5;\n\t\t\t}\n\t\t}\n\n\t\tif ( chr === \"z\" ) {\n\t\t\tif ( properties.standardOrDaylightTzName ) {\n\t\t\t\ttoken.value = null;\n\t\t\t\ttokenRe = properties.standardOrDaylightTzName;\n\t\t\t}\n\t\t}\n\n\t\t// v...vvv: \"{shortRegion}\", eg. \"PT\".\n\t\t// vvvv: \"{regionName} {Time}\" or \"{regionName} {Time}\",\n\t\t// e.g., \"Pacific Time\"\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"v\" ) {\n\t\t\tif ( properties.genericTzName ) {\n\t\t\t\ttoken.value = null;\n\t\t\t\ttokenRe = properties.genericTzName;\n\n\t\t\t// Fall back to \"V\" format.\n\t\t\t} else {\n\t\t\t\tchr = \"V\";\n\t\t\t\tlength = 4;\n\t\t\t}\n\t\t}\n\n\t\tif ( chr === \"V\" && properties.timeZoneName ) {\n\t\t\ttoken.value = length === 2 ? properties.timeZoneName : null;\n\t\t\ttokenRe = properties.timeZoneNameRe;\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\tlookup([\n\t\t\t\t\t\"gregorian/eras\",\n\t\t\t\t\tlength <= 3 ? \"eraAbbr\" : ( length === 4 ? \"eraNames\" : \"eraNarrow\" )\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"y\":\n\t\t\tcase \"Y\":\n\t\t\t\tnumeric = true;\n\n\t\t\t\t// number l=1:+, l=2:{2}, l=3:{3,}, l=4:{4,}, ...\n\t\t\t\tif ( length === 1 ) {\n\n\t\t\t\t\t// Unicode equivalent to /\\d+/.\n\t\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \")+\" );\n\t\t\t\t} else if ( length === 2 ) {\n\n\t\t\t\t\t// Lenient parsing: there's no year pattern to indicate non-zero-padded 2-digits\n\t\t\t\t\t// year, so parser accepts both zero-padded and non-zero-padded for `yy`.\n\t\t\t\t\t//\n\t\t\t\t\t// Unicode equivalent to /\\d\\d?/\n\t\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){1,2}\" );\n\t\t\t\t} else {\n\n\t\t\t\t\t// Unicode equivalent to /\\d{length,}/\n\t\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){\" + length + \",}\" );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Quarter\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\n\t\t\t\t// number l=1:{1}, l=2:{2}.\n\t\t\t\t// lookup l=3...\n\t\t\t\toneDigitIfLengthOne() || twoDigitsIfLengthTwo() ||\n\t\t\t\t\tlookup([\n\t\t\t\t\t\t\"gregorian/quarters\",\n\t\t\t\t\t\tchr === \"Q\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\n\t\t\t\t// number l=1:{1,2}, l=2:{2}.\n\t\t\t\t// lookup l=3...\n\t\t\t\t//\n\t\t\t\t// Lenient parsing: skeleton \"yMd\" (i.e., one M) may include MM for the pattern,\n\t\t\t\t// therefore parser accepts both zero-padded and non-zero-padded for M and MM.\n\t\t\t\t// Similar for L.\n\t\t\t\toneOrTwoDigitsIfLengthOneOrTwo() || lookup([\n\t\t\t\t\t\"gregorian/months\",\n\t\t\t\t\tchr === \"M\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"D\":\n\n\t\t\t\t// number {l,3}.\n\t\t\t\tif ( length <= 3 ) {\n\n\t\t\t\t\t// Equivalent to /\\d{length,3}/\n\t\t\t\t\tnumeric = true;\n\t\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){\" + length + \",3}\" );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"W\":\n\t\t\tcase \"F\":\n\n\t\t\t\t// number l=1:{1}.\n\t\t\t\toneDigitIfLengthOne();\n\t\t\t\tbreak;\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\n\t\t\t\t// number l=1:{1}, l=2:{2}.\n\t\t\t\t// lookup for length >=3.\n\t\t\t\tif ( length <= 2 ) {\n\t\t\t\t\toneDigitIfLengthOne() || twoDigitsIfLengthTwo();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"E\":\n\t\t\t\tif ( length === 6 ) {\n\n\t\t\t\t\t// Note: if short day names are not explicitly specified, abbreviated day\n\t\t\t\t\t// names are used instead http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras\n\t\t\t\t\tlookup([\n\t\t\t\t\t\t\"gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\t\"short\"\n\t\t\t\t\t]) || lookup([\n\t\t\t\t\t\t\"gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\t\"abbreviated\"\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tlookup([\n\t\t\t\t\t\t\"gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\twidths[ length < 3 ? 0 : length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tlookup([\n\t\t\t\t\t\"gregorian/dayPeriods/format/wide\"\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Week\n\t\t\tcase \"w\":\n\n\t\t\t\t// number l1:{1,2}, l2:{2}.\n\t\t\t\toneOrTwoDigitsIfLengthOne() || twoDigitsIfLengthTwo();\n\t\t\t\tbreak;\n\n\t\t\t// Day, Hour, Minute, or Second\n\t\t\tcase \"d\":\n\t\t\tcase \"h\":\n\t\t\tcase \"H\":\n\t\t\tcase \"K\":\n\t\t\tcase \"k\":\n\t\t\tcase \"j\":\n\t\t\tcase \"m\":\n\t\t\tcase \"s\":\n\n\t\t\t\t// number l1:{1,2}, l2:{2}.\n\t\t\t\t//\n\t\t\t\t// Lenient parsing:\n\t\t\t\t// - skeleton \"hms\" (i.e., one m) always includes mm for the pattern, i.e., it's\n\t\t\t\t// impossible to use a different skeleton to parse non-zero-padded minutes,\n\t\t\t\t// therefore parser accepts both zero-padded and non-zero-padded for m. Similar\n\t\t\t\t// for seconds s.\n\t\t\t\t// - skeleton \"hms\" (i.e., one h) may include h or hh for the pattern, i.e., it's\n\t\t\t\t// impossible to use a different skeleton to parser non-zero-padded hours for some\n\t\t\t\t// locales, therefore parser accepts both zero-padded and non-zero-padded for h.\n\t\t\t\t// Similar for d (in skeleton yMd).\n\t\t\t\toneOrTwoDigitsIfLengthOneOrTwo();\n\t\t\t\tbreak;\n\n\t\t\tcase \"S\":\n\n\t\t\t\t// number {l}.\n\n\t\t\t\t// Unicode equivalent to /\\d{length}/\n\t\t\t\tnumeric = true;\n\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){\" + length + \"}\" );\n\t\t\t\tbreak;\n\n\t\t\tcase \"A\":\n\n\t\t\t\t// number {l+5}.\n\n\t\t\t\t// Unicode equivalent to /\\d{length+5}/\n\t\t\t\tnumeric = true;\n\t\t\t\ttokenRe = new RegExp( \"^(\" + digitsRe.source + \"){\" + ( length + 5 ) + \"}\" );\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"v\":\n\t\t\tcase \"V\":\n\t\t\tcase \"z\":\n\t\t\t\tif ( tokenRe && tokenRe.test( value ) ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( chr === \"V\" && length === 2 ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"O\":\n\n\t\t\t\t// O: \"{gmtFormat}+H;{gmtFormat}-H\" or \"{gmtZeroFormat}\", eg. \"GMT-8\" or \"GMT\".\n\t\t\t\t// OOOO: \"{gmtFormat}{hourFormat}\" or \"{gmtZeroFormat}\", eg. \"GMT-08:00\" or \"GMT\".\n\t\t\t\tif ( value === properties[ \"timeZoneNames/gmtZeroFormat\" ] ) {\n\t\t\t\t\ttoken.value = 0;\n\t\t\t\t\ttokenRe = properties[ \"timeZoneNames/gmtZeroFormatRe\" ];\n\t\t\t\t} else {\n\t\t\t\t\taux = properties[ \"timeZoneNames/hourFormat\" ].some(function( hourFormatRe ) {\n\t\t\t\t\t\tif ( hourFormatParse( hourFormatRe, numberParser ) ) {\n\t\t\t\t\t\t\ttokenRe = hourFormatRe;\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif ( !aux ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"X\":\n\n\t\t\t\t// Same as x*, except it uses \"Z\" for zero offset.\n\t\t\t\tif ( value === \"Z\" ) {\n\t\t\t\t\ttoken.value = 0;\n\t\t\t\t\ttokenRe = /^Z/;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"x\":\n\n\t\t\t\t// x: hourFormat(\"+HH[mm];-HH[mm]\")\n\t\t\t\t// xx: hourFormat(\"+HHmm;-HHmm\")\n\t\t\t\t// xxx: hourFormat(\"+HH:mm;-HH:mm\")\n\t\t\t\t// xxxx: hourFormat(\"+HHmm[ss];-HHmm[ss]\")\n\t\t\t\t// xxxxx: hourFormat(\"+HH:mm[:ss];-HH:mm[:ss]\")\n\t\t\t\taux = properties.x.some(function( hourFormatRe ) {\n\t\t\t\t\tif ( hourFormatParse( hourFormatRe ) ) {\n\t\t\t\t\t\ttokenRe = hourFormatRe;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif ( !aux ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"'\":\n\t\t\t\ttoken.type = \"literal\";\n\t\t\t\ttokenRe = new RegExp( \"^\" + regexpEscape( removeLiteralQuotes( current ) ) );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\ttoken.type = \"literal\";\n\t\t\t\ttokenRe = new RegExp( \"^\" + regexpEscape( current ) );\n\t\t}\n\n\t\tif ( !tokenRe ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Get lexeme and consume it.\n\t\tvalue = value.replace( tokenRe, function( lexeme ) {\n\t\t\ttoken.lexeme = lexeme;\n\t\t\tif ( numeric ) {\n\t\t\t\ttoken.value = numberParser( lexeme );\n\t\t\t}\n\t\t\treturn \"\";\n\t\t});\n\n\t\tif ( !token.lexeme ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( numeric && isNaN( token.value ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttokens.push( token );\n\t\treturn true;\n\t});\n\n\tif ( value !== \"\" ) {\n\t\tvalid = false;\n\t}\n\n\treturn valid ? tokens : [];\n};\n\n\n\n\nvar dateParserFn = function( numberParser, parseProperties, tokenizerProperties ) {\n\treturn function dateParser( value ) {\n\t\tvar tokens;\n\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeString( value, \"value\" );\n\n\t\ttokens = dateTokenizer( value, numberParser, tokenizerProperties );\n\t\treturn dateParse( value, tokens, parseProperties ) || null;\n\t};\n};\n\n\n\n\nvar objectFilter = function( object, testRe ) {\n\tvar key,\n\t\tcopy = {};\n\n\tfor ( key in object ) {\n\t\tif ( testRe.test( key ) ) {\n\t\t\tcopy[ key ] = object[ key ];\n\t\t}\n\t}\n\n\treturn copy;\n};\n\n\n\n\n/**\n * tokenizerProperties( pattern, cldr )\n *\n * @pattern [String] raw pattern.\n *\n * @cldr [Cldr instance].\n *\n * Return Object with data that will be used by tokenizer.\n */\nvar dateTokenizerProperties = function( pattern, cldr, timeZone ) {\n\tvar digitsReSource,\n\t\tproperties = {\n\t\t\tpattern: looseMatching( pattern )\n\t\t},\n\t\ttimeSeparator = numberSymbol( \"timeSeparator\", cldr ),\n\t\twidths = [ \"abbreviated\", \"wide\", \"narrow\" ];\n\n\tdigitsReSource = numberNumberingSystemDigitsMap( cldr );\n\tdigitsReSource = digitsReSource ? \"[\" + digitsReSource + \"]\" : \"\\\\d\";\n\tproperties.digitsRe = new RegExp( digitsReSource );\n\n\t// Transform:\n\t// - \"+H;-H\" -> /\\+(\\d\\d?)|-(\\d\\d?)/\n\t// - \"+HH;-HH\" -> /\\+(\\d\\d)|-(\\d\\d)/\n\t// - \"+HHmm;-HHmm\" -> /\\+(\\d\\d)(\\d\\d)|-(\\d\\d)(\\d\\d)/\n\t// - \"+HH:mm;-HH:mm\" -> /\\+(\\d\\d):(\\d\\d)|-(\\d\\d):(\\d\\d)/\n\t//\n\t// If gmtFormat is GMT{0}, the regexp must fill {0} in each side, e.g.:\n\t// - \"+H;-H\" -> /GMT\\+(\\d\\d?)|GMT-(\\d\\d?)/\n\tfunction hourFormatRe( hourFormat, gmtFormat, digitsReSource, timeSeparator ) {\n\t\tvar re;\n\n\t\tif ( !digitsReSource ) {\n\t\t\tdigitsReSource = \"\\\\d\";\n\t\t}\n\t\tif ( !gmtFormat ) {\n\t\t\tgmtFormat = \"{0}\";\n\t\t}\n\n\t\tre = hourFormat\n\t\t\t.replace( \"+\", \"\\\\+\" )\n\n\t\t\t// Unicode equivalent to (\\\\d\\\\d)\n\t\t\t.replace( /HH|mm|ss/g, \"((\" + digitsReSource + \"){2})\" )\n\n\t\t\t// Unicode equivalent to (\\\\d\\\\d?)\n\t\t\t.replace( /H|m/g, \"((\" + digitsReSource + \"){1,2})\" );\n\n\t\tif ( timeSeparator ) {\n\t\t\tre = re.replace( /:/g, timeSeparator );\n\t\t}\n\n\t\tre = re.split( \";\" ).map(function( part ) {\n\t\t\treturn gmtFormat.replace( \"{0}\", part );\n\t\t}).join( \"|\" );\n\n\t\treturn new RegExp( \"^\" + re );\n\t}\n\n\tfunction populateProperties( path, value ) {\n\n\t\t// Skip\n\t\tvar skipRe = /(timeZoneNames\\/zone|supplemental\\/metaZones|timeZoneNames\\/metazone|timeZoneNames\\/regionFormat|timeZoneNames\\/gmtFormat)/;\n\t\tif ( skipRe.test( path ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !value ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// The `dates` and `calendars` trim's purpose is to reduce properties' key size only.\n\t\tpath = path.replace( /^.*\\/dates\\//, \"\" ).replace( /calendars\\//, \"\" );\n\n\t\t// Specific filter for \"gregorian/dayPeriods/format/wide\".\n\t\tif ( path === \"gregorian/dayPeriods/format/wide\" ) {\n\t\t\tvalue = objectFilter( value, /^am|^pm/ );\n\t\t}\n\n\t\t// Transform object into array of pairs [key, /value/], sort by desc value length.\n\t\tif ( isPlainObject( value ) ) {\n\t\t\tvalue = Object.keys( value ).map(function( key ) {\n\t\t\t\treturn [ key, new RegExp( \"^\" + regexpEscape( looseMatching( value[ key ] ) ) ) ];\n\t\t\t}).sort(function( a, b ) {\n\t\t\t\treturn b[ 1 ].source.length - a[ 1 ].source.length;\n\t\t\t});\n\n\t\t// If typeof value === \"string\".\n\t\t} else {\n\t\t\tvalue = looseMatching( value );\n\t\t}\n\t\tproperties[ path ] = value;\n\t}\n\n\tfunction regexpSourceSomeTerm( terms ) {\n\t\treturn \"(\" + terms.filter(function( item ) {\n\t\t\treturn item;\n\t\t}).reduce(function( memo, item ) {\n\t\t\treturn memo + \"|\" + item;\n\t\t}) + \")\";\n\t}\n\n\tcldr.on( \"get\", populateProperties );\n\n\tpattern.match( datePatternRe ).forEach(function( current ) {\n\t\tvar aux, chr, daylightTzName, gmtFormat, length, standardTzName;\n\n\t\tchr = current.charAt( 0 );\n\t\tlength = current.length;\n\n\t\tif ( chr === \"Z\" ) {\n\t\t\tif ( length < 5 ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tlength = 4;\n\t\t\t} else {\n\t\t\t\tchr = \"X\";\n\t\t\t\tlength = 5;\n\t\t\t}\n\t\t}\n\n\t\t// z...zzz: \"{shortRegion}\", eg. \"PST\" or \"PDT\".\n\t\t// zzzz: \"{regionName} {Standard Time}\" or \"{regionName} {Daylight Time}\",\n\t\t// e.g., \"Pacific Standard Time\" or \"Pacific Daylight Time\".\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"z\" ) {\n\t\t\tstandardTzName = dateGetTimeZoneName( length, \"standard\", timeZone, cldr );\n\t\t\tdaylightTzName = dateGetTimeZoneName( length, \"daylight\", timeZone, cldr );\n\t\t\tif ( standardTzName ) {\n\t\t\t\tstandardTzName = regexpEscape( looseMatching( standardTzName ) );\n\t\t\t}\n\t\t\tif ( daylightTzName ) {\n\t\t\t\tdaylightTzName = regexpEscape( looseMatching( daylightTzName ) );\n\t\t\t}\n\t\t\tif ( standardTzName || daylightTzName ) {\n\t\t\t\tproperties.standardOrDaylightTzName = new RegExp(\n\t\t\t\t\t\"^\" + regexpSourceSomeTerm([ standardTzName, daylightTzName ])\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Fall through the \"O\" format in case one name is missing.\n\t\t\tif ( !standardTzName || !daylightTzName ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tif ( length < 4 ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// v...vvv: \"{shortRegion}\", eg. \"PT\".\n\t\t// vvvv: \"{regionName} {Time}\" or \"{regionName} {Time}\",\n\t\t// e.g., \"Pacific Time\"\n\t\t// http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns\n\t\tif ( chr === \"v\" ) {\n\t\t\tif ( length !== 1 && length !== 4 ) {\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"timezone pattern `\" + pattern + \"`\"\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar genericTzName = dateGetTimeZoneName( length, \"generic\", timeZone, cldr );\n\t\t\tif ( genericTzName ) {\n\t\t\t\tproperties.genericTzName = new RegExp(\n\t\t\t\t\t\"^\" + regexpEscape( looseMatching( genericTzName ) )\n\t\t\t\t);\n\t\t\t\tchr = \"O\";\n\n\t\t\t// Fall back to \"V\" format.\n\t\t\t} else {\n\t\t\t\tchr = \"V\";\n\t\t\t\tlength = 4;\n\t\t\t}\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\tcldr.main([\n\t\t\t\t\t\"dates/calendars/gregorian/eras\",\n\t\t\t\t\tlength <= 3 ? \"eraAbbr\" : ( length === 4 ? \"eraNames\" : \"eraNarrow\" )\n\t\t\t\t]);\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"u\": // Extended year. Need to be implemented.\n\t\t\tcase \"U\": // Cyclic year name. Need to be implemented.\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"year pattern `\" + chr + \"`\"\n\t\t\t\t});\n\n\t\t\t// Quarter\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tcldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/quarters\",\n\t\t\t\t\t\tchr === \"Q\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\n\t\t\t\t// number l=1:{1,2}, l=2:{2}.\n\t\t\t\t// lookup l=3...\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tcldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/months\",\n\t\t\t\t\t\tchr === \"M\" ? \"format\" : \"stand-alone\",\n\t\t\t\t\t\twidths[ length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"g\":\n\n\t\t\t\t// Modified Julian day. Need to be implemented.\n\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\tfeature: \"Julian day pattern `g`\"\n\t\t\t\t});\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\n\t\t\t\t// lookup for length >=3.\n\t\t\t\tif ( length <= 2 ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"E\":\n\t\t\t\tif ( length === 6 ) {\n\n\t\t\t\t\t// Note: if short day names are not explicitly specified, abbreviated day\n\t\t\t\t\t// names are used instead http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tcldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\t\"short\"\n\t\t\t\t\t]) || cldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\t\"abbreviated\"\n\t\t\t\t\t]);\n\t\t\t\t} else {\n\t\t\t\t\tcldr.main([\n\t\t\t\t\t\t\"dates/calendars/gregorian/days\",\n\t\t\t\t\t\t[ chr === \"c\" ? \"stand-alone\" : \"format\" ],\n\t\t\t\t\t\twidths[ length < 3 ? 0 : length - 3 ]\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tcldr.main(\n\t\t\t\t\t\"dates/calendars/gregorian/dayPeriods/format/wide\"\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"V\":\n\n\t\t\t\tif ( length === 1 ) {\n\t\t\t\t\tthrow createErrorUnsupportedFeature({\n\t\t\t\t\t\tfeature: \"timezone pattern `\" + pattern + \"`\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif ( timeZone ) {\n\t\t\t\t\tif ( length === 2 ) {\n\n\t\t\t\t\t\t// Skip looseMatching processing since timeZone is a canonical posix value.\n\t\t\t\t\t\tproperties.timeZoneName = timeZone;\n\t\t\t\t\t\tproperties.timeZoneNameRe = new RegExp( \"^\" + regexpEscape( timeZone ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar timeZoneName,\n\t\t\t\t\t\texemplarCity = cldr.main([\n\t\t\t\t\t\t\t\"dates/timeZoneNames/zone\", timeZone, \"exemplarCity\"\n\t\t\t\t\t\t]);\n\n\t\t\t\t\tif ( length === 3 ) {\n\t\t\t\t\t\tif ( !exemplarCity ) {\n\t\t\t\t\t\t\texemplarCity = cldr.main([\n\t\t\t\t\t\t\t\t\"dates/timeZoneNames/zone/Etc/Unknown/exemplarCity\"\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimeZoneName = exemplarCity;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( exemplarCity && length === 4 ) {\n\t\t\t\t\t\ttimeZoneName = formatMessage(\n\t\t\t\t\t\t\tcldr.main(\n\t\t\t\t\t\t\t\t\"dates/timeZoneNames/regionFormat\"\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t[ exemplarCity ]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( timeZoneName ) {\n\t\t\t\t\t\ttimeZoneName = looseMatching( timeZoneName );\n\t\t\t\t\t\tproperties.timeZoneName = timeZoneName;\n\t\t\t\t\t\tproperties.timeZoneNameRe = new RegExp(\n\t\t\t\t\t\t\t\"^\" + regexpEscape( timeZoneName )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( current === \"v\" ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"z\":\n\t\t\tcase \"O\":\n\t\t\t\tgmtFormat = cldr.main( \"dates/timeZoneNames/gmtFormat\" );\n\t\t\t\tcldr.main( \"dates/timeZoneNames/gmtZeroFormat\" );\n\t\t\t\tcldr.main( \"dates/timeZoneNames/hourFormat\" );\n\t\t\t\tproperties[ \"timeZoneNames/gmtZeroFormatRe\" ] =\n\t\t\t\t\tnew RegExp( \"^\" + regexpEscape( properties[ \"timeZoneNames/gmtZeroFormat\" ] ) );\n\t\t\t\taux = properties[ \"timeZoneNames/hourFormat\" ];\n\t\t\t\tproperties[ \"timeZoneNames/hourFormat\" ] = (\n\t\t\t\t\tlength < 4 ?\n\t\t\t\t\t\t[ dateTimezoneHourFormatHm( aux, \"H\" ), dateTimezoneHourFormatH( aux ) ] :\n\t\t\t\t\t\t[ dateTimezoneHourFormatHm( aux, \"HH\" ) ]\n\t\t\t\t).map(function( hourFormat ) {\n\t\t\t\t\treturn hourFormatRe(\n\t\t\t\t\t\thourFormat,\n\t\t\t\t\t\tgmtFormat,\n\t\t\t\t\t\tdigitsReSource,\n\t\t\t\t\t\ttimeSeparator\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t/* falls through */\n\t\t\tcase \"X\":\n\t\t\tcase \"x\":\n\n\t\t\t\t// x: hourFormat(\"+HH[mm];-HH[mm]\")\n\t\t\t\t// xx: hourFormat(\"+HHmm;-HHmm\")\n\t\t\t\t// xxx: hourFormat(\"+HH:mm;-HH:mm\")\n\t\t\t\t// xxxx: hourFormat(\"+HHmm[ss];-HHmm[ss]\")\n\t\t\t\t// xxxxx: hourFormat(\"+HH:mm[:ss];-HH:mm[:ss]\")\n\t\t\t\tproperties.x = [\n\t\t\t\t\t[ \"+HHmm;-HHmm\", \"+HH;-HH\" ],\n\t\t\t\t\t[ \"+HHmm;-HHmm\" ],\n\t\t\t\t\t[ \"+HH:mm;-HH:mm\" ],\n\t\t\t\t\t[ \"+HHmmss;-HHmmss\", \"+HHmm;-HHmm\" ],\n\t\t\t\t\t[ \"+HH:mm:ss;-HH:mm:ss\", \"+HH:mm;-HH:mm\" ]\n\t\t\t\t][ length - 1 ].map(function( hourFormat ) {\n\t\t\t\t\treturn hourFormatRe( hourFormat );\n\t\t\t\t});\n\t\t}\n\t});\n\n\tcldr.off( \"get\", populateProperties );\n\n\treturn properties;\n};\n\n\n\n\n/**\n * dayOfWeek( date, firstDay )\n *\n * @date\n *\n * @firstDay the result of `dateFirstDayOfWeek( cldr )`\n *\n * Return the day of the week normalized by the territory's firstDay [0-6].\n * Eg for \"mon\":\n * - return 0 if territory is GB, or BR, or DE, or FR (week starts on \"mon\");\n * - return 1 if territory is US (week starts on \"sun\");\n * - return 2 if territory is EG (week starts on \"sat\");\n */\nvar dateDayOfWeek = function( date, firstDay ) {\n\treturn ( date.getDay() - firstDay + 7 ) % 7;\n};\n\n\n\n\n/**\n * distanceInDays( from, to )\n *\n * Return the distance in days between from and to Dates.\n */\nvar dateDistanceInDays = function( from, to ) {\n\tvar inDays = 864e5;\n\treturn ( to.getTime() - from.getTime() ) / inDays;\n};\n\n\n\n\n/**\n * dayOfYear\n *\n * Return the distance in days of the date to the begin of the year [0-d].\n */\nvar dateDayOfYear = function( date ) {\n\treturn Math.floor( dateDistanceInDays( dateStartOf( date, \"year\" ), date ) );\n};\n\n\n\n\n// Invert key and values, e.g., {\"year\": \"yY\"} ==> {\"y\": \"year\", \"Y\": \"year\"}\nvar dateFieldsMap = objectInvert({\n\t\"era\": \"G\",\n\t\"year\": \"yY\",\n\t\"quarter\": \"qQ\",\n\t\"month\": \"ML\",\n\t\"week\": \"wW\",\n\t\"day\": \"dDF\",\n\t\"weekday\": \"ecE\",\n\t\"dayperiod\": \"a\",\n\t\"hour\": \"hHkK\",\n\t\"minute\": \"m\",\n\t\"second\": \"sSA\",\n\t\"zone\": \"zvVOxX\"\n}, function( object, key, value ) {\n\tvalue.split( \"\" ).forEach(function( symbol ) {\n\t\tobject[ symbol ] = key;\n\t});\n\treturn object;\n});\n\n\n\n\n/**\n * millisecondsInDay\n */\nvar dateMillisecondsInDay = function( date ) {\n\n\t// TODO Handle daylight savings discontinuities\n\treturn date - dateStartOf( date, \"day\" );\n};\n\n\n\n\n/**\n * hourFormat( date, format, timeSeparator, formatNumber )\n *\n * Return date's timezone offset according to the format passed.\n * Eg for format when timezone offset is 180:\n * - \"+H;-H\": -3\n * - \"+HHmm;-HHmm\": -0300\n * - \"+HH:mm;-HH:mm\": -03:00\n * - \"+HH:mm:ss;-HH:mm:ss\": -03:00:00\n */\nvar dateTimezoneHourFormat = function( date, format, timeSeparator, formatNumber ) {\n\tvar absOffset,\n\t\toffset = date.getTimezoneOffset();\n\n\tabsOffset = Math.abs( offset );\n\tformatNumber = formatNumber || {\n\t\t1: function( value ) {\n\t\t\treturn stringPad( value, 1 );\n\t\t},\n\t\t2: function( value ) {\n\t\t\treturn stringPad( value, 2 );\n\t\t}\n\t};\n\n\treturn format\n\n\t\t// Pick the correct sign side (+ or -).\n\t\t.split( \";\" )[ offset > 0 ? 1 : 0 ]\n\n\t\t// Localize time separator\n\t\t.replace( \":\", timeSeparator )\n\n\t\t// Update hours offset.\n\t\t.replace( /HH?/, function( match ) {\n\t\t\treturn formatNumber[ match.length ]( Math.floor( absOffset / 60 ) );\n\t\t})\n\n\t\t// Update minutes offset and return.\n\t\t.replace( /mm/, function() {\n\t\t\treturn formatNumber[ 2 ]( Math.floor( absOffset % 60 ) );\n\t\t})\n\n\t\t// Update minutes offset and return.\n\t\t.replace( /ss/, function() {\n\t\t\treturn formatNumber[ 2 ]( Math.floor( absOffset % 1 * 60 ) );\n\t\t});\n};\n\n\n\n\n/**\n * format( date, properties )\n *\n * @date [Date instance].\n *\n * @properties\n *\n * TODO Support other calendar types.\n *\n * Disclosure: this function borrows excerpts of dojo/date/locale.\n */\nvar dateFormat = function( date, numberFormatters, properties ) {\n\tvar parts = [];\n\n\tvar timeSeparator = properties.timeSeparator;\n\n\t// create globalize date with given timezone data\n\tif ( properties.timeZoneData ) {\n\t\tdate = new ZonedDateTime( date, properties.timeZoneData() );\n\t}\n\n\tproperties.pattern.replace( datePatternRe, function( current ) {\n\t\tvar aux, dateField, type, value,\n\t\t\tchr = current.charAt( 0 ),\n\t\t\tlength = current.length;\n\n\t\tif ( chr === \"j\" ) {\n\n\t\t\t// Locale preferred hHKk.\n\t\t\t// http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data\n\t\t\tchr = properties.preferredTime;\n\t\t}\n\n\t\tif ( chr === \"Z\" ) {\n\n\t\t\t// Z..ZZZ: same as \"xxxx\".\n\t\t\tif ( length < 4 ) {\n\t\t\t\tchr = \"x\";\n\t\t\t\tlength = 4;\n\n\t\t\t// ZZZZ: same as \"OOOO\".\n\t\t\t} else if ( length < 5 ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tlength = 4;\n\n\t\t\t// ZZZZZ: same as \"XXXXX\"\n\t\t\t} else {\n\t\t\t\tchr = \"X\";\n\t\t\t\tlength = 5;\n\t\t\t}\n\t\t}\n\n\t\t// z...zzz: \"{shortRegion}\", e.g., \"PST\" or \"PDT\".\n\t\t// zzzz: \"{regionName} {Standard Time}\" or \"{regionName} {Daylight Time}\",\n\t\t// e.g., \"Pacific Standard Time\" or \"Pacific Daylight Time\".\n\t\tif ( chr === \"z\" ) {\n\t\t\tif ( date.isDST ) {\n\t\t\t\tvalue = date.isDST() ? properties.daylightTzName : properties.standardTzName;\n\t\t\t}\n\n\t\t\t// Fall back to \"O\" format.\n\t\t\tif ( !value ) {\n\t\t\t\tchr = \"O\";\n\t\t\t\tif ( length < 4 ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tswitch ( chr ) {\n\n\t\t\t// Era\n\t\t\tcase \"G\":\n\t\t\t\tvalue = properties.eras[ date.getFullYear() < 0 ? 0 : 1 ];\n\t\t\t\tbreak;\n\n\t\t\t// Year\n\t\t\tcase \"y\":\n\n\t\t\t\t// Plain year.\n\t\t\t\t// The length specifies the padding, but for two letters it also specifies the\n\t\t\t\t// maximum length.\n\t\t\t\tvalue = date.getFullYear();\n\t\t\t\tif ( length === 2 ) {\n\t\t\t\t\tvalue = String( value );\n\t\t\t\t\tvalue = +value.substr( value.length - 2 );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"Y\":\n\n\t\t\t\t// Year in \"Week of Year\"\n\t\t\t\t// The length specifies the padding, but for two letters it also specifies the\n\t\t\t\t// maximum length.\n\t\t\t\t// yearInWeekofYear = date + DaysInAWeek - (dayOfWeek - firstDay) - minDays\n\t\t\t\tvalue = new Date( date.getTime() );\n\t\t\t\tvalue.setDate(\n\t\t\t\t\tvalue.getDate() + 7 -\n\t\t\t\t\tdateDayOfWeek( date, properties.firstDay ) -\n\t\t\t\t\tproperties.firstDay -\n\t\t\t\t\tproperties.minDays\n\t\t\t\t);\n\t\t\t\tvalue = value.getFullYear();\n\t\t\t\tif ( length === 2 ) {\n\t\t\t\t\tvalue = String( value );\n\t\t\t\t\tvalue = +value.substr( value.length - 2 );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Quarter\n\t\t\tcase \"Q\":\n\t\t\tcase \"q\":\n\t\t\t\tvalue = Math.ceil( ( date.getMonth() + 1 ) / 3 );\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tvalue = properties.quarters[ chr ][ length ][ value ];\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Month\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\t\t\t\tvalue = date.getMonth() + 1;\n\t\t\t\tif ( length > 2 ) {\n\t\t\t\t\tvalue = properties.months[ chr ][ length ][ value ];\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Week\n\t\t\tcase \"w\":\n\n\t\t\t\t// Week of Year.\n\t\t\t\t// woy = ceil( ( doy + dow of 1/1 ) / 7 ) - minDaysStuff ? 1 : 0.\n\t\t\t\t// TODO should pad on ww? Not documented, but I guess so.\n\t\t\t\tvalue = dateDayOfWeek( dateStartOf( date, \"year\" ), properties.firstDay );\n\t\t\t\tvalue = Math.ceil( ( dateDayOfYear( date ) + value ) / 7 ) -\n\t\t\t\t\t( 7 - value >= properties.minDays ? 0 : 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase \"W\":\n\n\t\t\t\t// Week of Month.\n\t\t\t\t// wom = ceil( ( dom + dow of `1/month` ) / 7 ) - minDaysStuff ? 1 : 0.\n\t\t\t\tvalue = dateDayOfWeek( dateStartOf( date, \"month\" ), properties.firstDay );\n\t\t\t\tvalue = Math.ceil( ( date.getDate() + value ) / 7 ) -\n\t\t\t\t\t( 7 - value >= properties.minDays ? 0 : 1 );\n\t\t\t\tbreak;\n\n\t\t\t// Day\n\t\t\tcase \"d\":\n\t\t\t\tvalue = date.getDate();\n\t\t\t\tbreak;\n\n\t\t\tcase \"D\":\n\t\t\t\tvalue = dateDayOfYear( date ) + 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"F\":\n\n\t\t\t\t// Day of Week in month. eg. 2nd Wed in July.\n\t\t\t\tvalue = Math.floor( date.getDate() / 7 ) + 1;\n\t\t\t\tbreak;\n\n\t\t\t// Week day\n\t\t\tcase \"e\":\n\t\t\tcase \"c\":\n\t\t\t\tif ( length <= 2 ) {\n\n\t\t\t\t\t// Range is [1-7] (deduced by example provided on documentation)\n\t\t\t\t\t// TODO Should pad with zeros (not specified in the docs)?\n\t\t\t\t\tvalue = dateDayOfWeek( date, properties.firstDay ) + 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"E\":\n\t\t\t\tvalue = dateWeekDays[ date.getDay() ];\n\t\t\t\tvalue = properties.days[ chr ][ length ][ value ];\n\t\t\t\tbreak;\n\n\t\t\t// Period (AM or PM)\n\t\t\tcase \"a\":\n\t\t\t\tvalue = properties.dayPeriods[ date.getHours() < 12 ? \"am\" : \"pm\" ];\n\t\t\t\tbreak;\n\n\t\t\t// Hour\n\t\t\tcase \"h\": // 1-12\n\t\t\t\tvalue = ( date.getHours() % 12 ) || 12;\n\t\t\t\tbreak;\n\n\t\t\tcase \"H\": // 0-23\n\t\t\t\tvalue = date.getHours();\n\t\t\t\tbreak;\n\n\t\t\tcase \"K\": // 0-11\n\t\t\t\tvalue = date.getHours() % 12;\n\t\t\t\tbreak;\n\n\t\t\tcase \"k\": // 1-24\n\t\t\t\tvalue = date.getHours() || 24;\n\t\t\t\tbreak;\n\n\t\t\t// Minute\n\t\t\tcase \"m\":\n\t\t\t\tvalue = date.getMinutes();\n\t\t\t\tbreak;\n\n\t\t\t// Second\n\t\t\tcase \"s\":\n\t\t\t\tvalue = date.getSeconds();\n\t\t\t\tbreak;\n\n\t\t\tcase \"S\":\n\t\t\t\tvalue = Math.round( date.getMilliseconds() * Math.pow( 10, length - 3 ) );\n\t\t\t\tbreak;\n\n\t\t\tcase \"A\":\n\t\t\t\tvalue = Math.round( dateMillisecondsInDay( date ) * Math.pow( 10, length - 3 ) );\n\t\t\t\tbreak;\n\n\t\t\t// Zone\n\t\t\tcase \"z\":\n\t\t\t\tbreak;\n\n\t\t\tcase \"v\":\n\n\t\t\t\t// v...vvv: \"{shortRegion}\", eg. \"PT\".\n\t\t\t\t// vvvv: \"{regionName} {Time}\",\n\t\t\t\t// e.g., \"Pacific Time\".\n\t\t\t\tif ( properties.genericTzName ) {\n\t\t\t\t\tvalue = properties.genericTzName;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"V\":\n\n\t\t\t\t//VVVV: \"{explarCity} {Time}\", e.g., \"Los Angeles Time\"\n\t\t\t\tif ( properties.timeZoneName ) {\n\t\t\t\t\tvalue = properties.timeZoneName;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( current === \"v\" ) {\n\t\t\t\t\tlength = 1;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"O\":\n\n\t\t\t\t// O: \"{gmtFormat}+H;{gmtFormat}-H\" or \"{gmtZeroFormat}\", eg. \"GMT-8\" or \"GMT\".\n\t\t\t\t// OOOO: \"{gmtFormat}{hourFormat}\" or \"{gmtZeroFormat}\", eg. \"GMT-08:00\" or \"GMT\".\n\t\t\t\tif ( date.getTimezoneOffset() === 0 ) {\n\t\t\t\t\tvalue = properties.gmtZeroFormat;\n\t\t\t\t} else {\n\n\t\t\t\t\t// If O..OOO and timezone offset has non-zero minutes, show minutes.\n\t\t\t\t\tif ( length < 4 ) {\n\t\t\t\t\t\taux = date.getTimezoneOffset();\n\t\t\t\t\t\taux = properties.hourFormat[ aux % 60 - aux % 1 === 0 ? 0 : 1 ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\taux = properties.hourFormat;\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = dateTimezoneHourFormat(\n\t\t\t\t\t\tdate,\n\t\t\t\t\t\taux,\n\t\t\t\t\t\ttimeSeparator,\n\t\t\t\t\t\tnumberFormatters\n\t\t\t\t\t);\n\t\t\t\t\tvalue = properties.gmtFormat.replace( /\\{0\\}/, value );\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"X\":\n\n\t\t\t\t// Same as x*, except it uses \"Z\" for zero offset.\n\t\t\t\tif ( date.getTimezoneOffset() === 0 ) {\n\t\t\t\t\tvalue = \"Z\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t/* falls through */\n\t\t\tcase \"x\":\n\n\t\t\t\t// x: hourFormat(\"+HH[mm];-HH[mm]\")\n\t\t\t\t// xx: hourFormat(\"+HHmm;-HHmm\")\n\t\t\t\t// xxx: hourFormat(\"+HH:mm;-HH:mm\")\n\t\t\t\t// xxxx: hourFormat(\"+HHmm[ss];-HHmm[ss]\")\n\t\t\t\t// xxxxx: hourFormat(\"+HH:mm[:ss];-HH:mm[:ss]\")\n\t\t\t\taux = date.getTimezoneOffset();\n\n\t\t\t\t// If x and timezone offset has non-zero minutes, use xx (i.e., show minutes).\n\t\t\t\tif ( length === 1 && aux % 60 - aux % 1 !== 0 ) {\n\t\t\t\t\tlength += 1;\n\t\t\t\t}\n\n\t\t\t\t// If (xxxx or xxxxx) and timezone offset has zero seconds, use xx or xxx\n\t\t\t\t// respectively (i.e., don't show optional seconds).\n\t\t\t\tif ( ( length === 4 || length === 5 ) && aux % 1 === 0 ) {\n\t\t\t\t\tlength -= 2;\n\t\t\t\t}\n\n\t\t\t\tvalue = [\n\t\t\t\t\t\"+HH;-HH\",\n\t\t\t\t\t\"+HHmm;-HHmm\",\n\t\t\t\t\t\"+HH:mm;-HH:mm\",\n\t\t\t\t\t\"+HHmmss;-HHmmss\",\n\t\t\t\t\t\"+HH:mm:ss;-HH:mm:ss\"\n\t\t\t\t][ length - 1 ];\n\n\t\t\t\tvalue = dateTimezoneHourFormat( date, value, \":\" );\n\t\t\t\tbreak;\n\n\t\t\t// timeSeparator\n\t\t\tcase \":\":\n\t\t\t\tvalue = timeSeparator;\n\t\t\t\tbreak;\n\n\t\t\t// ' literals.\n\t\t\tcase \"'\":\n\t\t\t\tvalue = removeLiteralQuotes( current );\n\t\t\t\tbreak;\n\n\t\t\t// Anything else is considered a literal, including [ ,:/.@#], chinese, japonese, and\n\t\t\t// arabic characters.\n\t\t\tdefault:\n\t\t\t\tvalue = current;\n\n\t\t}\n\t\tif ( typeof value === \"number\" ) {\n\t\t\tvalue = numberFormatters[ length ]( value );\n\t\t}\n\n\t\tdateField = dateFieldsMap[ chr ];\n\t\ttype = dateField ? dateField : \"literal\";\n\n\t\tpartsPush( parts, type, value );\n\t});\n\n\treturn parts;\n\n};\n\n\n\n\nvar dateToPartsFormatterFn = function( numberFormatters, properties ) {\n\treturn function dateToPartsFormatter( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeDate( value, \"value\" );\n\n\t\treturn dateFormat( value, numberFormatters, properties );\n\t};\n\n};\n\n\n\n\nfunction optionsHasStyle( options ) {\n\treturn options.skeleton !== undefined ||\n\t\toptions.date !== undefined ||\n\t\toptions.time !== undefined ||\n\t\toptions.datetime !== undefined ||\n\t\toptions.raw !== undefined;\n}\n\nfunction validateRequiredCldr( path, value ) {\n\tvalidateCldr( path, value, {\n\t\tskip: [\n\t\t\t/dates\\/calendars\\/gregorian\\/dateTimeFormats\\/availableFormats/,\n\t\t\t/dates\\/calendars\\/gregorian\\/days\\/.*\\/short/,\n\t\t\t/dates\\/timeZoneNames\\/zone/,\n\t\t\t/dates\\/timeZoneNames\\/metazone/,\n\t\t\t/globalize-iana/,\n\t\t\t/supplemental\\/metaZones/,\n\t\t\t/supplemental\\/timeData\\/(?!001)/,\n\t\t\t/supplemental\\/weekData\\/(?!001)/\n\t\t]\n\t});\n}\n\nfunction validateOptionsPreset( options ) {\n\tvalidateOptionsPresetEach( \"date\", options );\n\tvalidateOptionsPresetEach( \"time\", options );\n\tvalidateOptionsPresetEach( \"datetime\", options );\n}\n\nfunction validateOptionsPresetEach( type, options ) {\n\tvar value = options[ type ];\n\tvalidate(\n\t\t\"E_INVALID_OPTIONS\",\n\t\t\"Invalid `{{type}: \\\"{value}\\\"}`.\",\n\t\tvalue === undefined || [ \"short\", \"medium\", \"long\", \"full\" ].indexOf( value ) !== -1,\n\t\t{ type: type, value: value }\n\t);\n}\n\nfunction validateOptionsSkeleton( pattern, skeleton ) {\n\tvalidate(\n\t\t\"E_INVALID_OPTIONS\",\n\t\t\"Invalid `{skeleton: \\\"{value}\\\"}` based on provided CLDR.\",\n\t\tskeleton === undefined || ( typeof pattern === \"string\" && pattern ),\n\t\t{ type: \"skeleton\", value: skeleton }\n\t);\n}\n\nfunction validateRequiredIana( timeZone ) {\n\treturn function( path, value ) {\n\n\t\tif ( !/globalize-iana/.test( path ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvalidate(\n\t\t\t\"E_MISSING_IANA_TZ\",\n\t\t\t\"Missing required IANA timezone content for `{timeZone}`: `{path}`.\",\n\t\t\tvalue,\n\t\t\t{\n\t\t\t\tpath: path.replace( /globalize-iana\\//, \"\" ),\n\t\t\t\ttimeZone: timeZone\n\t\t\t}\n\t\t);\n\t};\n}\n\n/**\n * .loadTimeZone( json )\n *\n * @json [JSON]\n *\n * Load IANA timezone data.\n */\nGlobalize.loadTimeZone = function( json ) {\n\tvar customData = {\n\t\t\t\"globalize-iana\": json\n\t\t};\n\n\tvalidateParameterPresence( json, \"json\" );\n\tvalidateParameterTypePlainObject( json, \"json\" );\n\n\tCldr.load( customData );\n};\n\n/**\n * .dateFormatter( options )\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Return a date formatter function (of the form below) according to the given options and the\n * default/instance locale.\n *\n * fn( value )\n *\n * @value [Date]\n *\n * Return a function that formats a date according to the given `format` and the default/instance\n * locale.\n */\nGlobalize.dateFormatter =\nGlobalize.prototype.dateFormatter = function( options ) {\n\tvar args, dateToPartsFormatter, returnFn;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\tif ( !optionsHasStyle( options ) ) {\n\t\toptions.skeleton = \"yMd\";\n\t}\n\targs = [ options ];\n\n\tdateToPartsFormatter = this.dateToPartsFormatter( options );\n\treturnFn = dateFormatterFn( dateToPartsFormatter );\n\truntimeBind( args, this.cldr, returnFn, [ dateToPartsFormatter ] );\n\n\treturn returnFn;\n};\n\n/**\n * .dateToPartsFormatter( options )\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Return a date formatter function (of the form below) according to the given options and the\n * default/instance locale.\n *\n * fn( value )\n *\n * @value [Date]\n *\n * Return a function that formats a date to parts according to the given `format`\n * and the default/instance\n * locale.\n */\nGlobalize.dateToPartsFormatter =\nGlobalize.prototype.dateToPartsFormatter = function( options ) {\n\tvar args, cldr, numberFormatters, pad, pattern, properties, returnFn,\n\t\ttimeZone, ianaListener;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\tcldr = this.cldr;\n\toptions = options || {};\n\tif ( !optionsHasStyle( options ) ) {\n\t\toptions.skeleton = \"yMd\";\n\t}\n\n\tvalidateOptionsPreset( options );\n\tvalidateDefaultLocale( cldr );\n\n\ttimeZone = options.timeZone;\n\tvalidateParameterTypeString( timeZone, \"options.timeZone\" );\n\n\targs = [ options ];\n\n\tcldr.on( \"get\", validateRequiredCldr );\n\tif ( timeZone ) {\n\t\tianaListener = validateRequiredIana( timeZone );\n\t\tcldr.on( \"get\", ianaListener );\n\t}\n\ttry {\n\t\tpattern = dateExpandPattern( options, cldr );\n\t\tvalidateOptionsSkeleton( pattern, options.skeleton );\n\t\tproperties = dateFormatProperties( pattern, cldr, timeZone );\n\t} finally {\n\t\tcldr.off( \"get\", validateRequiredCldr );\n\t\tif ( ianaListener ) {\n\t\t\tcldr.off( \"get\", ianaListener );\n\t\t}\n\t}\n\n\t// Create needed number formatters.\n\tnumberFormatters = properties.numberFormatters;\n\tdelete properties.numberFormatters;\n\tfor ( pad in numberFormatters ) {\n\t\tnumberFormatters[ pad ] = this.numberFormatter({\n\t\t\traw: numberFormatters[ pad ]\n\t\t});\n\t}\n\n\treturnFn = dateToPartsFormatterFn( numberFormatters, properties );\n\n\truntimeBind( args, cldr, returnFn, [ numberFormatters, properties ] );\n\n\treturn returnFn;\n};\n\n/**\n * .dateParser( options )\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Return a function that parses a string date according to the given `formats` and the\n * default/instance locale.\n */\nGlobalize.dateParser =\nGlobalize.prototype.dateParser = function( options ) {\n\tvar args, cldr, numberParser, parseProperties, pattern, returnFn, timeZone,\n\t\ttokenizerProperties;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\tcldr = this.cldr;\n\toptions = options || {};\n\tif ( !optionsHasStyle( options ) ) {\n\t\toptions.skeleton = \"yMd\";\n\t}\n\n\tvalidateOptionsPreset( options );\n\tvalidateDefaultLocale( cldr );\n\n\ttimeZone = options.timeZone;\n\tvalidateParameterTypeString( timeZone, \"options.timeZone\" );\n\n\targs = [ options ];\n\n\ttry {\n\t\tcldr.on( \"get\", validateRequiredCldr );\n\t\tif ( timeZone ) {\n\t\t\tcldr.on( \"get\", validateRequiredIana( timeZone ) );\n\t\t}\n\t\tpattern = dateExpandPattern( options, cldr );\n\t\tvalidateOptionsSkeleton( pattern, options.skeleton );\n\t\ttokenizerProperties = dateTokenizerProperties( pattern, cldr, timeZone );\n\t\tparseProperties = dateParseProperties( cldr, timeZone );\n\t} finally {\n\t\tcldr.off( \"get\", validateRequiredCldr );\n\t\tif ( timeZone ) {\n\t\t\tcldr.off( \"get\", validateRequiredIana( timeZone ) );\n\t\t}\n\t}\n\tnumberParser = this.numberParser({ raw: \"0\" });\n\n\treturnFn = dateParserFn( numberParser, parseProperties, tokenizerProperties );\n\n\truntimeBind( args, cldr, returnFn, [ numberParser, parseProperties, tokenizerProperties ] );\n\n\treturn returnFn;\n};\n\n/**\n * .formatDate( value, options )\n *\n * @value [Date]\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Formats a date or number according to the given options string and the default/instance locale.\n */\nGlobalize.formatDate =\nGlobalize.prototype.formatDate = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeDate( value, \"value\" );\n\n\treturn this.dateFormatter( options )( value );\n};\n\n/**\n * .formatDateToParts( value, options )\n *\n * @value [Date]\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Formats a date or number to parts according to the given options and the default/instance locale.\n */\nGlobalize.formatDateToParts =\nGlobalize.prototype.formatDateToParts = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeDate( value, \"value\" );\n\n\treturn this.dateToPartsFormatter( options )( value );\n};\n\n/**\n * .parseDate( value, options )\n *\n * @value [String]\n *\n * @options [Object] see date/expand_pattern for more info.\n *\n * Return a Date instance or null.\n */\nGlobalize.parseDate =\nGlobalize.prototype.parseDate = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeString( value, \"value\" );\n\n\treturn this.dateParser( options )( value );\n};\n\nreturn Globalize;\n\n\n\n\n}));\n\n","/* globals Intl:false */\n\n\"use strict\";\n\nfunction intlGetTimeZone() {\n try {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch (error) {\n return null;\n }\n}\n\nfunction normalizeTimeZone(timeZone, primaryTimeZone, timeZones) {\n var supportedZones = timeZones.concat(\"Etc/UTC\");\n return supportedZones.indexOf(timeZone) === -1 ? primaryTimeZone : timeZone;\n}\n\nfunction getTimeZone(primaryTimeZone, timeZones) {\n return normalizeTimeZone(intlGetTimeZone(), primaryTimeZone, timeZones);\n}\n\nmodule.exports = {\n getTimeZone: getTimeZone,\n normalizeTimeZone: normalizeTimeZone\n};\n","\"use strict\";\nmodule.exports = require(\"./lib/client/relative-time\");\n","\"use strict\";\n\n// Load Globalize main module.\nvar Globalize = require(\"globalize/dist/globalize\");\n\n// Extend Globalize with relative time module.\nrequire(\"globalize/dist/globalize/number\");\nrequire(\"./../globalize-override/plural\");\nrequire(\"./../globalize-override/relative-time\");\n\nvar assertion = require(\"./utils/assertion\");\nvar basic = require(\"./utils/basic\");\nvar relativeTimeCommon = require(\"../relativeTimeCommon\");\n\nvar assertMetadata = assertion.assertMetadata;\nvar assertType = assertion.assertType;\nvar definePrivateProperty = basic.definePrivateProperty;\n\nfunction RelativeTimeHandler(metadata) {\n assertType(metadata, \"metadata\", [\"plain object\"]);\n\n var cldr = metadata.cldr;\n assertMetadata(cldr);\n\n // assert existence of ianaTimeZoneData in metadata\n assertMetadata(metadata.griffin);\n assertMetadata(metadata.griffin.timeZone);\n var countrySupportedTimezones =\n metadata.griffin.timeZone.countrySupportedTimezones;\n assertMetadata(countrySupportedTimezones);\n assertMetadata(countrySupportedTimezones.primaryTimeZone, [\"string\"]);\n assertMetadata(countrySupportedTimezones.timeZones, [\"array\"]);\n var ianaTimeZoneData = metadata.griffin.timeZone.ianaTimeZoneData;\n assertMetadata(ianaTimeZoneData);\n assertMetadata(ianaTimeZoneData.zoneData);\n\n // Assume the only key in 'main' is the locale.\n assertMetadata(cldr.main);\n var griffinLocale = Object.keys(cldr.main)[0];\n assertMetadata(griffinLocale, [\"string\"]);\n\n definePrivateProperty(this, \"locale\", griffinLocale);\n definePrivateProperty(\n this,\n \"primaryTimeZone\",\n countrySupportedTimezones.primaryTimeZone\n );\n definePrivateProperty(this, \"timeZones\", countrySupportedTimezones.timeZones);\n definePrivateProperty(this, \"timeZoneData\", ianaTimeZoneData.zoneData);\n Globalize.load(cldr);\n definePrivateProperty(this, \"globalize\", new Globalize(griffinLocale));\n}\n\nrelativeTimeCommon.setConstants(RelativeTimeHandler);\n\nObject.defineProperty(RelativeTimeHandler.prototype, \"formatRelativeTime\", {\n value: function formatRelativeTime(date, options) {\n return relativeTimeCommon.formatRelativeTime(date, options, this);\n },\n enumerable: true\n});\n\nObject.defineProperty(RelativeTimeHandler.prototype, \"getTimeZone\", {\n value: function() {\n return relativeTimeCommon.getTimeZone(this);\n },\n enumerable: true\n});\n\nfunction createHandler(metadata) {\n return new RelativeTimeHandler(metadata);\n}\n\nmodule.exports = {\n createHandler: createHandler\n};\n","/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"cldr/event\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Extend global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar alwaysArray = Globalize._alwaysArray,\n\tcreateError = Globalize._createError,\n\tisPlainObject = Globalize._isPlainObject,\n\truntimeBind = Globalize._runtimeBind,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidate = Globalize._validate,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterType = Globalize._validateParameterType,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;\nvar MessageFormat;\n/* eslint-disable */\nMessageFormat = (function() {\nMessageFormat._parse = (function() {\n\n /*\n * Generated by PEG.js 0.8.0.\n *\n * http://pegjs.majda.cz/\n */\n\n function peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n }\n\n function SyntaxError(message, expected, found, offset, line, column) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.offset = offset;\n this.line = line;\n this.column = column;\n\n this.name = \"SyntaxError\";\n }\n\n peg$subclass(SyntaxError, Error);\n\n function parse(input) {\n var options = arguments.length > 1 ? arguments[1] : {},\n\n peg$FAILED = {},\n\n peg$startRuleFunctions = { start: peg$parsestart },\n peg$startRuleFunction = peg$parsestart,\n\n peg$c0 = [],\n peg$c1 = function(st) {\n return { type: 'messageFormatPattern', statements: st };\n },\n peg$c2 = peg$FAILED,\n peg$c3 = \"{\",\n peg$c4 = { type: \"literal\", value: \"{\", description: \"\\\"{\\\"\" },\n peg$c5 = null,\n peg$c6 = \",\",\n peg$c7 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n peg$c8 = \"}\",\n peg$c9 = { type: \"literal\", value: \"}\", description: \"\\\"}\\\"\" },\n peg$c10 = function(argIdx, efmt) {\n var res = {\n type: \"messageFormatElement\",\n argumentIndex: argIdx\n };\n if (efmt && efmt.length) {\n res.elementFormat = efmt[1];\n } else {\n res.output = true;\n }\n return res;\n },\n peg$c11 = \"plural\",\n peg$c12 = { type: \"literal\", value: \"plural\", description: \"\\\"plural\\\"\" },\n peg$c13 = function(t, s) {\n return { type: \"elementFormat\", key: t, val: s };\n },\n peg$c14 = \"selectordinal\",\n peg$c15 = { type: \"literal\", value: \"selectordinal\", description: \"\\\"selectordinal\\\"\" },\n peg$c16 = \"select\",\n peg$c17 = { type: \"literal\", value: \"select\", description: \"\\\"select\\\"\" },\n peg$c18 = function(t, p) {\n return { type: \"elementFormat\", key: t, val: p };\n },\n peg$c19 = function(op, pf) {\n return { type: \"pluralFormatPattern\", pluralForms: pf, offset: op || 0 };\n },\n peg$c20 = \"offset\",\n peg$c21 = { type: \"literal\", value: \"offset\", description: \"\\\"offset\\\"\" },\n peg$c22 = \":\",\n peg$c23 = { type: \"literal\", value: \":\", description: \"\\\":\\\"\" },\n peg$c24 = function(d) { return d; },\n peg$c25 = function(k, mfp) {\n return { key: k, val: mfp };\n },\n peg$c26 = function(i) { return i; },\n peg$c27 = \"=\",\n peg$c28 = { type: \"literal\", value: \"=\", description: \"\\\"=\\\"\" },\n peg$c29 = function(pf) { return { type: \"selectFormatPattern\", pluralForms: pf }; },\n peg$c30 = function(p) { return p; },\n peg$c31 = \"#\",\n peg$c32 = { type: \"literal\", value: \"#\", description: \"\\\"#\\\"\" },\n peg$c33 = function() { return {type: 'octothorpe'}; },\n peg$c34 = function(s) { return { type: \"string\", val: s.join('') }; },\n peg$c35 = { type: \"other\", description: \"identifier\" },\n peg$c36 = /^[0-9a-zA-Z$_]/,\n peg$c37 = { type: \"class\", value: \"[0-9a-zA-Z$_]\", description: \"[0-9a-zA-Z$_]\" },\n peg$c38 = /^[^ \\t\\n\\r,.+={}]/,\n peg$c39 = { type: \"class\", value: \"[^ \\\\t\\\\n\\\\r,.+={}]\", description: \"[^ \\\\t\\\\n\\\\r,.+={}]\" },\n peg$c40 = function(s) { return s; },\n peg$c41 = function(chars) { return chars.join(''); },\n peg$c42 = /^[^{}#\\\\\\0-\\x1F \\t\\n\\r]/,\n peg$c43 = { type: \"class\", value: \"[^{}#\\\\\\\\\\\\0-\\\\x1F \\\\t\\\\n\\\\r]\", description: \"[^{}#\\\\\\\\\\\\0-\\\\x1F \\\\t\\\\n\\\\r]\" },\n peg$c44 = function(x) { return x; },\n peg$c45 = \"\\\\\\\\\",\n peg$c46 = { type: \"literal\", value: \"\\\\\\\\\", description: \"\\\"\\\\\\\\\\\\\\\\\\\"\" },\n peg$c47 = function() { return \"\\\\\"; },\n peg$c48 = \"\\\\#\",\n peg$c49 = { type: \"literal\", value: \"\\\\#\", description: \"\\\"\\\\\\\\#\\\"\" },\n peg$c50 = function() { return \"#\"; },\n peg$c51 = \"\\\\{\",\n peg$c52 = { type: \"literal\", value: \"\\\\{\", description: \"\\\"\\\\\\\\{\\\"\" },\n peg$c53 = function() { return \"\\u007B\"; },\n peg$c54 = \"\\\\}\",\n peg$c55 = { type: \"literal\", value: \"\\\\}\", description: \"\\\"\\\\\\\\}\\\"\" },\n peg$c56 = function() { return \"\\u007D\"; },\n peg$c57 = \"\\\\u\",\n peg$c58 = { type: \"literal\", value: \"\\\\u\", description: \"\\\"\\\\\\\\u\\\"\" },\n peg$c59 = function(h1, h2, h3, h4) {\n return String.fromCharCode(parseInt(\"0x\" + h1 + h2 + h3 + h4));\n },\n peg$c60 = /^[0-9]/,\n peg$c61 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n peg$c62 = function(ds) {\n //the number might start with 0 but must not be interpreted as an octal number\n //Hence, the base is passed to parseInt explicitely\n return parseInt((ds.join('')), 10);\n },\n peg$c63 = /^[0-9a-fA-F]/,\n peg$c64 = { type: \"class\", value: \"[0-9a-fA-F]\", description: \"[0-9a-fA-F]\" },\n peg$c65 = { type: \"other\", description: \"whitespace\" },\n peg$c66 = function(w) { return w.join(''); },\n peg$c67 = /^[ \\t\\n\\r]/,\n peg$c68 = { type: \"class\", value: \"[ \\\\t\\\\n\\\\r]\", description: \"[ \\\\t\\\\n\\\\r]\" },\n\n peg$currPos = 0,\n peg$reportedPos = 0,\n peg$cachedPos = 0,\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$reportedPos, peg$currPos);\n }\n\n function offset() {\n return peg$reportedPos;\n }\n\n function line() {\n return peg$computePosDetails(peg$reportedPos).line;\n }\n\n function column() {\n return peg$computePosDetails(peg$reportedPos).column;\n }\n\n function expected(description) {\n throw peg$buildException(\n null,\n [{ type: \"other\", description: description }],\n peg$reportedPos\n );\n }\n\n function error(message) {\n throw peg$buildException(message, null, peg$reportedPos);\n }\n\n function peg$computePosDetails(pos) {\n function advance(details, startPos, endPos) {\n var p, ch;\n\n for (p = startPos; p < endPos; p++) {\n ch = input.charAt(p);\n if (ch === \"\\n\") {\n if (!details.seenCR) { details.line++; }\n details.column = 1;\n details.seenCR = false;\n } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n details.line++;\n details.column = 1;\n details.seenCR = true;\n } else {\n details.column++;\n details.seenCR = false;\n }\n }\n }\n\n if (peg$cachedPos !== pos) {\n if (peg$cachedPos > pos) {\n peg$cachedPos = 0;\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n }\n advance(peg$cachedPosDetails, peg$cachedPos, pos);\n peg$cachedPos = pos;\n }\n\n return peg$cachedPosDetails;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildException(message, expected, pos) {\n function cleanupExpected(expected) {\n var i = 1;\n\n expected.sort(function(a, b) {\n if (a.description < b.description) {\n return -1;\n } else if (a.description > b.description) {\n return 1;\n } else {\n return 0;\n }\n });\n\n while (i < expected.length) {\n if (expected[i - 1] === expected[i]) {\n expected.splice(i, 1);\n } else {\n i++;\n }\n }\n }\n\n function buildMessage(expected, found) {\n function stringEscape(s) {\n function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\x08/g, '\\\\b')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(ch) { return '\\\\x' + hex(ch); })\n .replace(/[\\u0180-\\u0FFF]/g, function(ch) { return '\\\\u0' + hex(ch); })\n .replace(/[\\u1080-\\uFFFF]/g, function(ch) { return '\\\\u' + hex(ch); });\n }\n\n var expectedDescs = new Array(expected.length),\n expectedDesc, foundDesc, i;\n\n for (i = 0; i < expected.length; i++) {\n expectedDescs[i] = expected[i].description;\n }\n\n expectedDesc = expected.length > 1\n ? expectedDescs.slice(0, -1).join(\", \")\n + \" or \"\n + expectedDescs[expected.length - 1]\n : expectedDescs[0];\n\n foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n }\n\n var posDetails = peg$computePosDetails(pos),\n found = pos < input.length ? input.charAt(pos) : null;\n\n if (expected !== null) {\n cleanupExpected(expected);\n }\n\n return new SyntaxError(\n message !== null ? message : buildMessage(expected, found),\n expected,\n found,\n pos,\n posDetails.line,\n posDetails.column\n );\n }\n\n function peg$parsestart() {\n var s0;\n\n s0 = peg$parsemessageFormatPattern();\n\n return s0;\n }\n\n function peg$parsemessageFormatPattern() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsemessageFormatElement();\n if (s2 === peg$FAILED) {\n s2 = peg$parsestring();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoctothorpe();\n }\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsemessageFormatElement();\n if (s2 === peg$FAILED) {\n s2 = peg$parsestring();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoctothorpe();\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c1(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsemessageFormatElement() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseid();\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c6;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseelementFormat();\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$c2;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$c2;\n }\n if (s4 === peg$FAILED) {\n s4 = peg$c5;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s6 = peg$c8;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s6 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c10(s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseelementFormat() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c11) {\n s2 = peg$c11;\n peg$currPos += 6;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c12); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsepluralFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c13(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 13) === peg$c14) {\n s2 = peg$c14;\n peg$currPos += 13;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c15); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsepluralFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c13(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c16) {\n s2 = peg$c16;\n peg$currPos += 6;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseselectFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c13(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseid();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseargStylePattern();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseargStylePattern();\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c18(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsepluralFormatPattern() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parseoffsetPattern();\n if (s1 === peg$FAILED) {\n s1 = peg$c5;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsepluralForm();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsepluralForm();\n }\n } else {\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c19(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseoffsetPattern() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c20) {\n s2 = peg$c20;\n peg$currPos += 6;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c21); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s4 = peg$c22;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c23); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsedigits();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c24(s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parsepluralForm() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepluralKey();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessageFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s8 = peg$c8;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s8 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c25(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parsepluralKey() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseid();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c26(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 61) {\n s1 = peg$c27;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c28); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsedigits();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n\n return s0;\n }\n\n function peg$parseselectFormatPattern() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseselectForm();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseselectForm();\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c29(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseselectForm() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseid();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessageFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s8 = peg$c8;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s8 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c25(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseargStylePattern() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c6;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseid();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c30(s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseoctothorpe() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c31;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c32); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c33();\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsestring() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsechars();\n if (s2 === peg$FAILED) {\n s2 = peg$parsewhitespace();\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsechars();\n if (s2 === peg$FAILED) {\n s2 = peg$parsewhitespace();\n }\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c34(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseid() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$currPos;\n if (peg$c36.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c37); }\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c39); }\n }\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c39); }\n }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n if (s3 !== peg$FAILED) {\n s3 = input.substring(s2, peg$currPos);\n }\n s2 = s3;\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c40(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c35); }\n }\n\n return s0;\n }\n\n function peg$parsechars() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsechar();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsechar();\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c41(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsechar() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (peg$c42.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c44(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c45) {\n s1 = peg$c45;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c47();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c48) {\n s1 = peg$c48;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c50();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c51) {\n s1 = peg$c51;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c53();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c54) {\n s1 = peg$c54;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c55); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c56();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c57) {\n s1 = peg$c57;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c58); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsehexDigit();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsehexDigit();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsehexDigit();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsehexDigit();\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c59(s2, s3, s4, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsedigits() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c60.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c60.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c62(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsehexDigit() {\n var s0;\n\n if (peg$c63.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c64); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c66(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c65); }\n }\n\n return s0;\n }\n\n function peg$parsewhitespace() {\n var s0;\n\n if (peg$c67.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c68); }\n }\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail({ type: \"end\", description: \"end of input\" });\n }\n\n throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);\n }\n }\n\n return {\n SyntaxError: SyntaxError,\n parse: parse\n };\n}()).parse;\n\n\n/** @file messageformat.js - ICU PluralFormat + SelectFormat for JavaScript\n * @author Alex Sexton - @SlexAxton\n * @version 0.3.0-1\n * @copyright 2012-2015 Alex Sexton, Eemeli Aro, and Contributors\n * @license To use or fork, MIT. To contribute back, Dojo CLA */\n\n\n/** Utility function for quoting an Object's key value iff required\n * @private */\nfunction propname(key, obj) {\n if (/^[A-Z_$][0-9A-Z_$]*$/i.test(key)) {\n return obj ? obj + '.' + key : key;\n } else {\n var jkey = JSON.stringify(key);\n return obj ? obj + '[' + jkey + ']' : jkey;\n }\n};\n\n\n/** Create a new message formatter\n *\n * @class\n * @global\n * @param {string|string[]} [locale=\"en\"] - The locale to use, with fallbacks\n * @param {function} [pluralFunc] - Optional custom pluralization function\n * @param {function[]} [formatters] - Optional custom formatting functions */\nfunction MessageFormat(locale, pluralFunc, formatters) {\n this.lc = [locale]; \n this.runtime.pluralFuncs = {};\n this.runtime.pluralFuncs[this.lc[0]] = pluralFunc;\n this.runtime.fmt = {};\n if (formatters) for (var f in formatters) {\n this.runtime.fmt[f] = formatters[f];\n }\n}\n\n\n\n\n/** Parse an input string to its AST\n *\n * Precompiled from `lib/messageformat-parser.pegjs` by\n * {@link http://pegjs.org/ PEG.js}. Included in MessageFormat object\n * to enable testing.\n *\n * @private */\n\n\n\n/** Pluralization functions from\n * {@link http://github.com/eemeli/make-plural.js make-plural}\n *\n * @memberof MessageFormat\n * @type Object. */\nMessageFormat.plurals = {};\n\n\n/** Default number formatting functions in the style of ICU's\n * {@link http://icu-project.org/apiref/icu4j/com/ibm/icu/text/MessageFormat.html simpleArg syntax}\n * implemented using the\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl Intl}\n * object defined by ECMA-402.\n *\n * **Note**: Intl is not defined in default Node until 0.11.15 / 0.12.0, so\n * earlier versions require a {@link https://www.npmjs.com/package/intl polyfill}.\n * Therefore {@link MessageFormat.withIntlSupport} needs to be true for these\n * functions to be available for inclusion in the output.\n *\n * @see MessageFormat#setIntlSupport\n *\n * @namespace\n * @memberof MessageFormat\n * @property {function} number - Represent a number as an integer, percent or currency value\n * @property {function} date - Represent a date as a full/long/default/short string\n * @property {function} time - Represent a time as a full/long/default/short string\n *\n * @example\n * > var MessageFormat = require('messageformat');\n * > var mf = (new MessageFormat('en')).setIntlSupport(true);\n * > mf.currency = 'EUR';\n * > var mfunc = mf.compile(\"The total is {V,number,currency}.\");\n * > mfunc({V:5.5})\n * \"The total is €5.50.\"\n *\n * @example\n * > var MessageFormat = require('messageformat');\n * > var mf = new MessageFormat('en', null, {number: MessageFormat.number});\n * > mf.currency = 'EUR';\n * > var mfunc = mf.compile(\"The total is {V,number,currency}.\");\n * > mfunc({V:5.5})\n * \"The total is €5.50.\" */\nMessageFormat.formatters = {};\n\n/** Enable or disable support for the default formatters, which require the\n * `Intl` object. Note that this can't be autodetected, as the environment\n * in which the formatted text is compiled into Javascript functions is not\n * necessarily the same environment in which they will get executed.\n *\n * @see MessageFormat.formatters\n *\n * @memberof MessageFormat\n * @param {boolean} [enable=true]\n * @returns {Object} The MessageFormat instance, to allow for chaining\n * @example\n * > var Intl = require('intl');\n * > var MessageFormat = require('messageformat');\n * > var mf = (new MessageFormat('en')).setIntlSupport(true);\n * > mf.currency = 'EUR';\n * > mf.compile(\"The total is {V,number,currency}.\")({V:5.5});\n * \"The total is €5.50.\" */\n\n\n\n/** A set of utility functions that are called by the compiled Javascript\n * functions, these are included locally in the output of {@link\n * MessageFormat#compile compile()}.\n *\n * @namespace\n * @memberof MessageFormat */\nMessageFormat.prototype.runtime = {\n\n /** Utility function for `#` in plural rules\n *\n * @param {number} value - The value to operate on\n * @param {number} [offset=0] - An optional offset, set by the surrounding context */\n number: function(value, offset) {\n if (isNaN(value)) throw new Error(\"'\" + value + \"' isn't a number.\");\n return value - (offset || 0);\n },\n\n /** Utility function for `{N, plural|selectordinal, ...}`\n *\n * @param {number} value - The key to use to find a pluralization rule\n * @param {number} offset - An offset to apply to `value`\n * @param {function} lcfunc - A locale function from `pluralFuncs`\n * @param {Object.} data - The object from which results are looked up\n * @param {?boolean} isOrdinal - If true, use ordinal rather than cardinal rules\n * @returns {string} The result of the pluralization */\n plural: function(value, offset, lcfunc, data, isOrdinal) {\n if ({}.hasOwnProperty.call(data, value)) return data[value]();\n if (offset) value -= offset;\n var key = lcfunc(value, isOrdinal);\n if (key in data) return data[key]();\n return data.other();\n },\n\n /** Utility function for `{N, select, ...}`\n *\n * @param {number} value - The key to use to find a selection\n * @param {Object.} data - The object from which results are looked up\n * @returns {string} The result of the select statement */\n select: function(value, data) {\n if ({}.hasOwnProperty.call(data, value)) return data[value]();\n return data.other()\n },\n\n /** Pluralization functions included in compiled output\n * @instance\n * @type Object. */\n pluralFuncs: {},\n\n /** Custom formatting functions called by `{var, fn[, args]*}` syntax\n *\n * For examples, see {@link MessageFormat.formatters}\n *\n * @instance\n * @see MessageFormat.formatters\n * @type Object. */\n fmt: {},\n\n /** Custom stringifier to clean up browser inconsistencies\n * @instance */\n toString: function () {\n var _stringify = function(o, level) {\n if (typeof o != 'object') {\n var funcStr = o.toString().replace(/^(function )\\w*/, '$1');\n var indent = /([ \\t]*)\\S.*$/.exec(funcStr);\n return indent ? funcStr.replace(new RegExp('^' + indent[1], 'mg'), '') : funcStr;\n }\n var s = [];\n for (var i in o) if (i != 'toString') {\n if (level == 0) s.push('var ' + i + ' = ' + _stringify(o[i], level + 1) + ';\\n');\n else s.push(propname(i) + ': ' + _stringify(o[i], level + 1));\n }\n if (level == 0) return s.join('');\n if (s.length == 0) return '{}';\n var indent = ' '; while (--level) indent += ' ';\n return '{\\n' + s.join(',\\n').replace(/^/gm, indent) + '\\n}';\n };\n return _stringify(this, 0);\n }\n};\n\n\n/** Recursively map an AST to its resulting string\n *\n * @memberof MessageFormat\n *\n * @param ast - the Ast node for which the JS code should be generated\n *\n * @private */\nMessageFormat.prototype._precompile = function(ast, data) {\n data = data || { keys: {}, offset: {} };\n var r = [], i, tmp, args = [];\n\n switch ( ast.type ) {\n case 'messageFormatPattern':\n for ( i = 0; i < ast.statements.length; ++i ) {\n r.push(this._precompile( ast.statements[i], data ));\n }\n tmp = r.join(' + ') || '\"\"';\n return data.pf_count ? tmp : 'function(d) { return ' + tmp + '; }';\n\n case 'messageFormatElement':\n data.pf_count = data.pf_count || 0;\n if ( ast.output ) {\n return propname(ast.argumentIndex, 'd');\n }\n else {\n data.keys[data.pf_count] = ast.argumentIndex;\n return this._precompile( ast.elementFormat, data );\n }\n return '';\n\n case 'elementFormat':\n args = [ propname(data.keys[data.pf_count], 'd') ];\n switch (ast.key) {\n case 'select':\n args.push(this._precompile(ast.val, data));\n return 'select(' + args.join(', ') + ')';\n case 'selectordinal':\n args = args.concat([ 0, propname(this.lc[0], 'pluralFuncs'), this._precompile(ast.val, data), 1 ]);\n return 'plural(' + args.join(', ') + ')';\n case 'plural':\n data.offset[data.pf_count || 0] = ast.val.offset || 0;\n args = args.concat([ data.offset[data.pf_count] || 0, propname(this.lc[0], 'pluralFuncs'), this._precompile(ast.val, data) ]);\n return 'plural(' + args.join(', ') + ')';\n default:\n if (this.withIntlSupport && !(ast.key in this.runtime.fmt) && (ast.key in MessageFormat.formatters)) {\n tmp = MessageFormat.formatters[ast.key];\n this.runtime.fmt[ast.key] = (typeof tmp(this) == 'function') ? tmp(this) : tmp;\n }\n args.push(JSON.stringify(this.lc));\n if (ast.val && ast.val.length) args.push(JSON.stringify(ast.val.length == 1 ? ast.val[0] : ast.val));\n return 'fmt.' + ast.key + '(' + args.join(', ') + ')';\n }\n\n case 'pluralFormatPattern':\n case 'selectFormatPattern':\n data.pf_count = data.pf_count || 0;\n if (ast.type == 'selectFormatPattern') data.offset[data.pf_count] = 0;\n var needOther = true;\n for (i = 0; i < ast.pluralForms.length; ++i) {\n var key = ast.pluralForms[i].key;\n if (key === 'other') needOther = false;\n var data_copy = JSON.parse(JSON.stringify(data));\n data_copy.pf_count++;\n r.push(propname(key) + ': function() { return ' + this._precompile(ast.pluralForms[i].val, data_copy) + ';}');\n }\n if (needOther) throw new Error(\"No 'other' form found in \" + ast.type + \" \" + data.pf_count);\n return '{ ' + r.join(', ') + ' }';\n\n case 'string':\n return JSON.stringify(ast.val || \"\");\n\n case 'octothorpe':\n if (!data.pf_count) return '\"#\"';\n args = [ propname(data.keys[data.pf_count-1], 'd') ];\n if (data.offset[data.pf_count-1]) args.push(data.offset[data.pf_count-1]);\n return 'number(' + args.join(', ') + ')';\n\n default:\n throw new Error( 'Bad AST type: ' + ast.type );\n }\n};\n\n/** Compile messages into an executable function with clean string\n * representation.\n *\n * If `messages` is a single string including ICU MessageFormat declarations,\n * `opt` is ignored and the returned function takes a single Object parameter\n * `d` representing each of the input's defined variables. The returned\n * function will be defined in a local scope that includes all the required\n * runtime variables.\n *\n * If `messages` is a map of keys to strings, or a map of namespace keys to\n * such key/string maps, the returned function will fill the specified global\n * with javascript functions matching the structure of the input. In such use,\n * the output of `compile()` is expected to be serialized using `.toString()`,\n * and will include definitions of the runtime functions. If `opt.global` is\n * null, calling the output function will return the object itself.\n *\n * Together, the input parameters should match the following patterns:\n * ```js\n * messages = \"string\" || { key0: \"string0\", key1: \"string1\", ... } || {\n * ns0: { key0: \"string0\", key1: \"string1\", ... },\n * ns1: { key0: \"string0\", key1: \"string1\", ... },\n * ...\n * }\n *\n * opt = null || {\n * locale: null || {\n * ns0: \"lc0\" || [ \"lc0\", ... ],\n * ns1: \"lc1\" || [ \"lc1\", ... ],\n * ...\n * },\n * global: null || \"module.exports\" || \"exports\" || \"i18n\" || ...\n * }\n * ```\n *\n * @memberof MessageFormat\n * @param {string|Object}\n * messages - The input message(s) to be compiled, in ICU MessageFormat\n * @param {Object} [opt={}] - Options controlling output for non-simple intput\n * @param {Object} [opt.locale] - The locales to use for the messages, with a\n * structure matching that of `messages`\n * @param {string} [opt.global=\"\"] - The global variable that the output\n * function should use, or a null string for none. \"exports\" and\n * \"module.exports\" are recognised as special cases.\n * @returns {function} The first match found for the given locale(s)\n *\n * @example\n * > var MessageFormat = require('messageformat'),\n * ... mf = new MessageFormat('en'),\n * ... mfunc0 = mf.compile('A {TYPE} example.');\n * > mfunc0({TYPE:'simple'})\n * 'A simple example.'\n * > mfunc0.toString()\n * 'function (d) { return \"A \" + d.TYPE + \" example.\"; }'\n *\n * @example\n * > var msgSet = { a: 'A {TYPE} example.',\n * ... b: 'This has {COUNT, plural, one{one member} other{# members}}.' },\n * ... mfuncSet = mf.compile(msgSet);\n * > mfuncSet().a({TYPE:'more complex'})\n * 'A more complex example.'\n * > mfuncSet().b({COUNT:2})\n * 'This has 2 members.'\n *\n * > console.log(mfuncSet.toString())\n * function anonymous() {\n * var number = function (value, offset) {\n * if (isNaN(value)) throw new Error(\"'\" + value + \"' isn't a number.\");\n * return value - (offset || 0);\n * };\n * var plural = function (value, offset, lcfunc, data, isOrdinal) {\n * if ({}.hasOwnProperty.call(data, value)) return data[value]();\n * if (offset) value -= offset;\n * var key = lcfunc(value, isOrdinal);\n * if (key in data) return data[key]();\n * return data.other();\n * };\n * var select = function (value, data) {\n * if ({}.hasOwnProperty.call(data, value)) return data[value]();\n * return data.other()\n * };\n * var pluralFuncs = {\n * en: function (n, ord) {\n * var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n,\n * n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n * if (ord) return (n10 == 1 && n100 != 11) ? 'one'\n * : (n10 == 2 && n100 != 12) ? 'two'\n * : (n10 == 3 && n100 != 13) ? 'few'\n * : 'other';\n * return (n == 1 && v0) ? 'one' : 'other';\n * }\n * };\n * var fmt = {};\n *\n * return {\n * a: function(d) { return \"A \" + d.TYPE + \" example.\"; },\n * b: function(d) { return \"This has \" + plural(d.COUNT, 0, pluralFuncs.en, { one: function() { return \"one member\";}, other: function() { return number(d.COUNT)+\" members\";} }) + \".\"; }\n * }\n * }\n *\n * @example\n * > mf.runtime.pluralFuncs.fi = MessageFormat.plurals.fi;\n * > var multiSet = { en: { a: 'A {TYPE} example.',\n * ... b: 'This is the {COUNT, selectordinal, one{#st} two{#nd} few{#rd} other{#th}} example.' },\n * ... fi: { a: '{TYPE} esimerkki.',\n * ... b: 'Tämä on {COUNT, selectordinal, other{#.}} esimerkki.' } },\n * ... multiSetLocales = { en: 'en', fi: 'fi' },\n * ... mfuncSet = mf.compile(multiSet, { locale: multiSetLocales, global: 'i18n' });\n * > mfuncSet(this);\n * > i18n.en.b({COUNT:3})\n * 'This is the 3rd example.'\n * > i18n.fi.b({COUNT:3})\n * 'Tämä on 3. esimerkki.' */\nMessageFormat.prototype.compile = function ( messages, opt ) {\n var r = {}, lc0 = this.lc,\n compileMsg = function(self, msg) {\n try {\n var ast = MessageFormat._parse(msg);\n return self._precompile(ast);\n } catch (e) {\n throw new Error((ast ? 'Precompiler' : 'Parser') + ' error: ' + e.toString());\n }\n },\n stringify = function(r, level) {\n if (!level) level = 0;\n if (typeof r != 'object') return r;\n var o = [], indent = '';\n for (var i = 0; i < level; ++i) indent += ' ';\n for (var k in r) o.push('\\n' + indent + ' ' + propname(k) + ': ' + stringify(r[k], level + 1));\n return '{' + o.join(',') + '\\n' + indent + '}';\n };\n\n if (typeof messages == 'string') {\n var f = new Function(\n 'number, plural, select, pluralFuncs, fmt',\n 'return ' + compileMsg(this, messages));\n return f(this.runtime.number, this.runtime.plural, this.runtime.select,\n this.runtime.pluralFuncs, this.runtime.fmt);\n }\n\n opt = opt || {};\n\n for (var ns in messages) {\n if (opt.locale) this.lc = opt.locale[ns] && [].concat(opt.locale[ns]) || lc0;\n if (typeof messages[ns] == 'string') {\n try { r[ns] = compileMsg(this, messages[ns]); }\n catch (e) { e.message = e.message.replace(':', ' with `' + ns + '`:'); throw e; }\n } else {\n r[ns] = {};\n for (var key in messages[ns]) {\n try { r[ns][key] = compileMsg(this, messages[ns][key]); }\n catch (e) { e.message = e.message.replace(':', ' with `' + key + '` in `' + ns + '`:'); throw e; }\n }\n }\n }\n\n this.lc = lc0;\n var s = this.runtime.toString() + '\\n';\n switch (opt.global || '') {\n case 'exports':\n var o = [];\n for (var k in r) o.push(propname(k, 'exports') + ' = ' + stringify(r[k]));\n return new Function(s + o.join(';\\n'));\n case 'module.exports':\n return new Function(s + 'module.exports = ' + stringify(r));\n case '':\n return new Function(s + 'return ' + stringify(r));\n default:\n return new Function('G', s + propname(opt.global, 'G') + ' = ' + stringify(r));\n }\n};\n\n\nreturn MessageFormat;\n}());\n/* eslint-enable */\n\n\nvar createErrorPluralModulePresence = function() {\n\treturn createError( \"E_MISSING_PLURAL_MODULE\", \"Plural module not loaded.\" );\n};\n\n\n\n\nvar validateMessageBundle = function( cldr ) {\n\tvalidate(\n\t\t\"E_MISSING_MESSAGE_BUNDLE\",\n\t\t\"Missing message bundle for locale `{locale}`.\",\n\t\tcldr.attributes.bundle && cldr.get( \"globalize-messages/{bundle}\" ) !== undefined,\n\t\t{\n\t\t\tlocale: cldr.locale\n\t\t}\n\t);\n};\n\n\n\n\nvar validateMessagePresence = function( path, value ) {\n\tpath = path.join( \"/\" );\n\tvalidate( \"E_MISSING_MESSAGE\", \"Missing required message content `{path}`.\",\n\t\tvalue !== undefined, { path: path } );\n};\n\n\n\n\nvar validateMessageType = function( path, value ) {\n\tpath = path.join( \"/\" );\n\tvalidate(\n\t\t\"E_INVALID_MESSAGE\",\n\t\t\"Invalid message content `{path}`. {expected} expected.\",\n\t\ttypeof value === \"string\",\n\t\t{\n\t\t\texpected: \"a string\",\n\t\t\tpath: path\n\t\t}\n\t);\n};\n\n\n\n\nvar validateParameterTypeMessageVariables = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || isPlainObject( value ) || Array.isArray( value ),\n\t\t\"Array or Plain Object\"\n\t);\n};\n\n\n\n\nvar messageFormatterFn = function( formatter ) {\n\treturn function messageFormatter( variables ) {\n\t\tif ( typeof variables === \"number\" || typeof variables === \"string\" ) {\n\t\t\tvariables = [].slice.call( arguments, 0 );\n\t\t}\n\t\tvalidateParameterTypeMessageVariables( variables, \"variables\" );\n\t\treturn formatter( variables );\n\t};\n};\n\n\n\n\nvar messageFormatterRuntimeBind = function( cldr, messageformatter ) {\n\tvar locale = cldr.locale,\n\t\torigToString = messageformatter.toString;\n\n\tmessageformatter.toString = function() {\n\t\tvar argNames, argValues, output,\n\t\t\targs = {};\n\n\t\t// Properly adjust SlexAxton/messageformat.js compiled variables with Globalize variables:\n\t\toutput = origToString.call( messageformatter );\n\n\t\tif ( /number\\(/.test( output ) ) {\n\t\t\targs.number = \"messageFormat.number\";\n\t\t}\n\n\t\tif ( /plural\\(/.test( output ) ) {\n\t\t\targs.plural = \"messageFormat.plural\";\n\t\t}\n\n\t\tif ( /select\\(/.test( output ) ) {\n\t\t\targs.select = \"messageFormat.select\";\n\t\t}\n\n\t\toutput.replace( /pluralFuncs(\\[([^\\]]+)\\]|\\.([a-zA-Z]+))/, function( match ) {\n\t\t\targs.pluralFuncs = \"{\" +\n\t\t\t\t\"\\\"\" + locale + \"\\\": Globalize(\\\"\" + locale + \"\\\").pluralGenerator()\" +\n\t\t\t\t\"}\";\n\t\t\treturn match;\n\t\t});\n\n\t\targNames = Object.keys( args ).join( \", \" );\n\t\targValues = Object.keys( args ).map(function( key ) {\n\t\t\treturn args[ key ];\n\t\t}).join( \", \" );\n\n\t\treturn \"(function( \" + argNames + \" ) {\\n\" +\n\t\t\t\" return \" + output + \"\\n\" +\n\t\t\t\"})(\" + argValues + \")\";\n\t};\n\n\treturn messageformatter;\n};\n\n\n\n\nvar slice = [].slice;\n\n/**\n * .loadMessages( json )\n *\n * @json [JSON]\n *\n * Load translation data.\n */\nGlobalize.loadMessages = function( json ) {\n\tvar locale,\n\t\tcustomData = {\n\t\t\t\"globalize-messages\": json,\n\t\t\t\"main\": {}\n\t\t};\n\n\tvalidateParameterPresence( json, \"json\" );\n\tvalidateParameterTypePlainObject( json, \"json\" );\n\n\t// Set available bundles by populating customData main dataset.\n\tfor ( locale in json ) {\n\t\tif ( json.hasOwnProperty( locale ) ) {\n\t\t\tcustomData.main[ locale ] = {};\n\t\t}\n\t}\n\n\tCldr.load( customData );\n};\n\n/**\n * .messageFormatter( path )\n *\n * @path [String or Array]\n *\n * Format a message given its path.\n */\nGlobalize.messageFormatter =\nGlobalize.prototype.messageFormatter = function( path ) {\n\tvar cldr, formatter, message, pluralGenerator, returnFn,\n\t\targs = slice.call( arguments, 0 );\n\n\tvalidateParameterPresence( path, \"path\" );\n\tvalidateParameterType( path, \"path\", typeof path === \"string\" || Array.isArray( path ),\n\t\t\"a String nor an Array\" );\n\n\tpath = alwaysArray( path );\n\tcldr = this.cldr;\n\n\tvalidateDefaultLocale( cldr );\n\tvalidateMessageBundle( cldr );\n\n\tmessage = cldr.get( [ \"globalize-messages/{bundle}\" ].concat( path ) );\n\tvalidateMessagePresence( path, message );\n\n\t// If message is an Array, concatenate it.\n\tif ( Array.isArray( message ) ) {\n\t\tmessage = message.join( \" \" );\n\t}\n\tvalidateMessageType( path, message );\n\n\t// Is plural module present? Yes, use its generator. Nope, use an error generator.\n\tpluralGenerator = this.plural !== undefined ?\n\t\tthis.pluralGenerator() :\n\t\tcreateErrorPluralModulePresence;\n\n\tformatter = new MessageFormat( cldr.locale, pluralGenerator ).compile( message );\n\n\treturnFn = messageFormatterFn( formatter );\n\n\truntimeBind( args, cldr, returnFn,\n\t\t[ messageFormatterRuntimeBind( cldr, formatter ), pluralGenerator ] );\n\n\treturn returnFn;\n};\n\n/**\n * .formatMessage( path [, variables] )\n *\n * @path [String or Array]\n *\n * @variables [Number, String, Array or Object]\n *\n * Format a message given its path.\n */\nGlobalize.formatMessage =\nGlobalize.prototype.formatMessage = function( path /* , variables */ ) {\n\treturn this.messageFormatter( path ).apply( {}, slice.call( arguments, 1 ) );\n};\n\nreturn Globalize;\n\n\n\n\n}));\n\n","/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"cldr/event\",\n\t\t\t\"cldr/supplemental\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar runtimeBind = Globalize._runtimeBind,\n\tvalidateCldr = Globalize._validateCldr,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterType = Globalize._validateParameterType,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;\nvar MakePlural;\n/* eslint-disable */\nMakePlural = (function() {\n'use strict';\n\nvar _toArray = function (arr) { return Array.isArray(arr) ? arr : Array.from(arr); };\n\nvar _toConsumableArray = function (arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } };\n\nvar _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n\n/**\n * make-plural.js -- https://github.com/eemeli/make-plural.js/\n * Copyright (c) 2014-2015 by Eemeli Aro \n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * The software is provided \"as is\" and the author disclaims all warranties\n * with regard to this software including all implied warranties of\n * merchantability and fitness. In no event shall the author be liable for\n * any special, direct, indirect, or consequential damages or any damages\n * whatsoever resulting from loss of use, data or profits, whether in an\n * action of contract, negligence or other tortious action, arising out of\n * or in connection with the use or performance of this software.\n */\n\nvar Parser = (function () {\n function Parser() {\n _classCallCheck(this, Parser);\n }\n\n _createClass(Parser, [{\n key: 'parse',\n value: function parse(cond) {\n var _this = this;\n\n if (cond === 'i = 0 or n = 1') {\n return 'n >= 0 && n <= 1';\n }if (cond === 'i = 0,1') {\n return 'n >= 0 && n < 2';\n }if (cond === 'i = 1 and v = 0') {\n this.v0 = 1;\n return 'n == 1 && v0';\n }\n return cond.replace(/([tv]) (!?)= 0/g, function (m, sym, noteq) {\n var sn = sym + '0';\n _this[sn] = 1;\n return noteq ? '!' + sn : sn;\n }).replace(/\\b[fintv]\\b/g, function (m) {\n _this[m] = 1;\n return m;\n }).replace(/([fin]) % (10+)/g, function (m, sym, num) {\n var sn = sym + num;\n _this[sn] = 1;\n return sn;\n }).replace(/n10+ = 0/g, 't0 && $&').replace(/(\\w+ (!?)= )([0-9.]+,[0-9.,]+)/g, function (m, se, noteq, x) {\n if (m === 'n = 0,1') return '(n == 0 || n == 1)';\n if (noteq) return se + x.split(',').join(' && ' + se);\n return '(' + se + x.split(',').join(' || ' + se) + ')';\n }).replace(/(\\w+) (!?)= ([0-9]+)\\.\\.([0-9]+)/g, function (m, sym, noteq, x0, x1) {\n if (Number(x0) + 1 === Number(x1)) {\n if (noteq) return '' + sym + ' != ' + x0 + ' && ' + sym + ' != ' + x1;\n return '(' + sym + ' == ' + x0 + ' || ' + sym + ' == ' + x1 + ')';\n }\n if (noteq) return '(' + sym + ' < ' + x0 + ' || ' + sym + ' > ' + x1 + ')';\n if (sym === 'n') {\n _this.t0 = 1;return '(t0 && n >= ' + x0 + ' && n <= ' + x1 + ')';\n }\n return '(' + sym + ' >= ' + x0 + ' && ' + sym + ' <= ' + x1 + ')';\n }).replace(/ and /g, ' && ').replace(/ or /g, ' || ').replace(/ = /g, ' == ');\n }\n }, {\n key: 'vars',\n value: (function (_vars) {\n function vars() {\n return _vars.apply(this, arguments);\n }\n\n vars.toString = function () {\n return _vars.toString();\n };\n\n return vars;\n })(function () {\n var vars = [];\n if (this.i) vars.push('i = s[0]');\n if (this.f || this.v) vars.push('f = s[1] || \\'\\'');\n if (this.t) vars.push('t = (s[1] || \\'\\').replace(/0+$/, \\'\\')');\n if (this.v) vars.push('v = f.length');\n if (this.v0) vars.push('v0 = !s[1]');\n if (this.t0 || this.n10 || this.n100) vars.push('t0 = Number(s[0]) == n');\n for (var k in this) {\n if (/^.10+$/.test(k)) {\n var k0 = k[0] === 'n' ? 't0 && s[0]' : k[0];\n vars.push('' + k + ' = ' + k0 + '.slice(-' + k.substr(2).length + ')');\n }\n }if (!vars.length) return '';\n return 'var ' + ['s = String(n).split(\\'.\\')'].concat(vars).join(', ');\n })\n }]);\n\n return Parser;\n})();\n\n\n\nvar MakePlural = (function () {\n function MakePlural(lc) {\n var _ref = arguments[1] === undefined ? MakePlural : arguments[1];\n\n var cardinals = _ref.cardinals;\n var ordinals = _ref.ordinals;\n\n _classCallCheck(this, MakePlural);\n\n if (!cardinals && !ordinals) throw new Error('At least one type of plural is required');\n this.lc = lc;\n this.categories = { cardinal: [], ordinal: [] };\n this.parser = new Parser();\n \n this.fn = this.buildFunction(cardinals, ordinals);\n this.fn._obj = this;\n this.fn.categories = this.categories;\n \n this.fn.toString = this.fnToString.bind(this);\n return this.fn;\n }\n\n _createClass(MakePlural, [{\n key: 'compile',\n value: function compile(type, req) {\n var cases = [];\n var rules = MakePlural.rules[type][this.lc];\n if (!rules) {\n if (req) throw new Error('Locale \"' + this.lc + '\" ' + type + ' rules not found');\n this.categories[type] = ['other'];\n return '\\'other\\'';\n }\n for (var r in rules) {\n var _rules$r$trim$split = rules[r].trim().split(/\\s*@\\w*/);\n\n var _rules$r$trim$split2 = _toArray(_rules$r$trim$split);\n\n var cond = _rules$r$trim$split2[0];\n var examples = _rules$r$trim$split2.slice(1);\n var cat = r.replace('pluralRule-count-', '');\n if (cond) cases.push([this.parser.parse(cond), cat]);\n \n }\n this.categories[type] = cases.map(function (c) {\n return c[1];\n }).concat('other');\n if (cases.length === 1) {\n return '(' + cases[0][0] + ') ? \\'' + cases[0][1] + '\\' : \\'other\\'';\n } else {\n return [].concat(_toConsumableArray(cases.map(function (c) {\n return '(' + c[0] + ') ? \\'' + c[1] + '\\'';\n })), ['\\'other\\'']).join('\\n : ');\n }\n }\n }, {\n key: 'buildFunction',\n value: function buildFunction(cardinals, ordinals) {\n var _this3 = this;\n\n var compile = function compile(c) {\n return c ? (c[1] ? 'return ' : 'if (ord) return ') + _this3.compile.apply(_this3, _toConsumableArray(c)) : '';\n },\n fold = { vars: function vars(str) {\n return (' ' + str + ';').replace(/(.{1,78})(,|$) ?/g, '$1$2\\n ');\n },\n cond: function cond(str) {\n return (' ' + str + ';').replace(/(.{1,78}) (\\|\\| |$) ?/gm, '$1\\n $2');\n } },\n cond = [ordinals && ['ordinal', !cardinals], cardinals && ['cardinal', true]].map(compile).map(fold.cond),\n body = [fold.vars(this.parser.vars())].concat(_toConsumableArray(cond)).join('\\n').replace(/\\s+$/gm, '').replace(/^[\\s;]*[\\r\\n]+/gm, ''),\n args = ordinals && cardinals ? 'n, ord' : 'n';\n return new Function(args, body);\n }\n }, {\n key: 'fnToString',\n value: function fnToString(name) {\n return Function.prototype.toString.call(this.fn).replace(/^function( \\w+)?/, name ? 'function ' + name : 'function').replace('\\n/**/', '');\n }\n }], [{\n key: 'load',\n value: function load() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n args.forEach(function (cldr) {\n var data = cldr && cldr.supplemental || null;\n if (!data) throw new Error('Data does not appear to be CLDR data');\n MakePlural.rules = {\n cardinal: data['plurals-type-cardinal'] || MakePlural.rules.cardinal,\n ordinal: data['plurals-type-ordinal'] || MakePlural.rules.ordinal\n };\n });\n return MakePlural;\n }\n }]);\n\n return MakePlural;\n})();\n\n\n\nMakePlural.cardinals = true;\nMakePlural.ordinals = false;\nMakePlural.rules = { cardinal: {}, ordinal: {} };\n\n\nreturn MakePlural;\n}());\n/* eslint-enable */\n\n\nvar validateParameterTypeNumber = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || typeof value === \"number\",\n\t\t\"Number\"\n\t);\n};\n\n\n\n\nvar validateParameterTypePluralType = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || value === \"cardinal\" || value === \"ordinal\",\n\t\t\"String \\\"cardinal\\\" or \\\"ordinal\\\"\"\n\t);\n};\n\n\n\n\nvar pluralGeneratorFn = function( plural ) {\n\treturn function pluralGenerator( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeNumber( value, \"value\" );\n\n\t\treturn plural( value );\n\t};\n};\n\n\n\n\n/**\n * .plural( value )\n *\n * @value [Number]\n *\n * Return the corresponding form (zero | one | two | few | many | other) of a\n * value given locale.\n */\nGlobalize.plural =\nGlobalize.prototype.plural = function( value, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\treturn this.pluralGenerator( options )( value );\n};\n\n/**\n * .pluralGenerator( [options] )\n *\n * Return a plural function (of the form below).\n *\n * fn( value )\n *\n * @value [Number]\n *\n * Return the corresponding form (zero | one | two | few | many | other) of a value given the\n * default/instance locale.\n */\nGlobalize.pluralGenerator =\nGlobalize.prototype.pluralGenerator = function( options ) {\n\tvar args, cldr, isOrdinal, plural, returnFn, type;\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\tcldr = this.cldr;\n\n\targs = [ options ];\n\ttype = options.type || \"cardinal\";\n\n\tvalidateParameterTypePluralType( options.type, \"options.type\" );\n\n\tvalidateDefaultLocale( cldr );\n\n\tisOrdinal = type === \"ordinal\";\n\n\tcldr.on( \"get\", validateCldr );\n\ttry {\n\t\tcldr.supplemental([ \"plurals-type-\" + type, \"{language}\" ]);\n\t} finally {\n\t\tcldr.off( \"get\", validateCldr );\n\t}\n\n\tMakePlural.rules = {};\n\tMakePlural.rules[ type ] = cldr.supplemental( \"plurals-type-\" + type );\n\n\tplural = new MakePlural( cldr.attributes.language, {\n\t\t\"ordinals\": isOrdinal,\n\t\t\"cardinals\": !isOrdinal\n\t});\n\n\treturnFn = pluralGeneratorFn( plural );\n\n\truntimeBind( args, cldr, returnFn, [ plural ] );\n\n\treturn returnFn;\n};\n\nreturn Globalize;\n\n\n\n\n}));\n\n","/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n/*!\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"./number\",\n\t\t\t\"cldr/event\",\n\t\t\t\"cldr/supplemental\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar alwaysArray = Globalize._alwaysArray,\n\tcreateError = Globalize._createError,\n\tformatMessageToParts = Globalize._formatMessageToParts,\n\tnumberNumberingSystem = Globalize._numberNumberingSystem,\n\tnumberPattern = Globalize._numberPattern,\n\tpartsJoin = Globalize._partsJoin,\n\tpartsPush = Globalize._partsPush,\n\truntimeBind = Globalize._runtimeBind,\n\tstringPad = Globalize._stringPad,\n\tvalidateCldr = Globalize._validateCldr,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterType = Globalize._validateParameterType,\n\tvalidateParameterTypeNumber = Globalize._validateParameterTypeNumber,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;\n\n\nvar createErrorPluralModulePresence = function() {\n\treturn createError( \"E_MISSING_PLURAL_MODULE\", \"Plural module not loaded.\" );\n};\n\n\n\n\nvar validateParameterTypeCurrency = function( value, name ) {\n\tvalidateParameterType(\n\t\tvalue,\n\t\tname,\n\t\tvalue === undefined || typeof value === \"string\" && ( /^[A-Za-z]{3}$/ ).test( value ),\n\t\t\"3-letter currency code string as defined by ISO 4217\"\n\t);\n};\n\n\n\n\nvar currencyFormatterFn = function( currencyToPartsFormatter ) {\n\treturn function currencyFormatter( value ) {\n\t\treturn partsJoin( currencyToPartsFormatter( value ));\n\t};\n};\n\n\n\n\n/**\n * supplementalOverride( currency, pattern, cldr )\n *\n * Return pattern with fraction digits overriden by supplemental currency data.\n */\nvar currencySupplementalOverride = function( currency, pattern, cldr ) {\n\tvar digits,\n\t\tfraction = \"\",\n\t\tfractionData = cldr.supplemental([ \"currencyData/fractions\", currency ]) ||\n\t\t\tcldr.supplemental( \"currencyData/fractions/DEFAULT\" );\n\n\tdigits = +fractionData._digits;\n\n\tif ( digits ) {\n\t\tfraction = \".\" + stringPad( \"0\", digits ).slice( 0, -1 ) + fractionData._rounding;\n\t}\n\n\treturn pattern.replace( /\\.(#+|0*[0-9]|0+[0-9]?)/g, fraction );\n};\n\n\n\n\nvar objectFilter = function( object, testRe ) {\n\tvar key,\n\t\tcopy = {};\n\n\tfor ( key in object ) {\n\t\tif ( testRe.test( key ) ) {\n\t\t\tcopy[ key ] = object[ key ];\n\t\t}\n\t}\n\n\treturn copy;\n};\n\n\n\n\nvar currencyUnitPatterns = function( cldr ) {\n\treturn objectFilter( cldr.main([\n\t\t\"numbers\",\n\t\t\"currencyFormats-numberSystem-\" + numberNumberingSystem( cldr )\n\t]), /^unitPattern/ );\n};\n\n\n\n\n/**\n * nameProperties( currency, cldr )\n *\n * Return number pattern with the appropriate currency code in as literal.\n */\nvar currencyNameProperties = function( currency, cldr ) {\n\tvar pattern = numberPattern( \"decimal\", cldr );\n\n\t// The number of decimal places and the rounding for each currency is not locale-specific. Those\n\t// values overridden by Supplemental Currency Data.\n\tpattern = currencySupplementalOverride( currency, pattern, cldr );\n\n\treturn {\n\t\tdisplayNames: objectFilter( cldr.main([\n\t\t\t\"numbers/currencies\",\n\t\t\tcurrency\n\t\t]), /^displayName/ ),\n\t\tpattern: pattern,\n\t\tunitPatterns: currencyUnitPatterns( cldr )\n\t};\n};\n\n\n\n\n/**\n * Unicode regular expression for: everything except symbols from the category S\n *\n * Generated by:\n *\n * var s = regenerate()\n * .addRange( 0x0, 0x10FFFF )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Math_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Currency_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Modifier_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Other_Symbol/symbols\" ) )\n *\n * https://github.com/mathiasbynens/regenerate\n * https://github.com/node-unicode/unicode-13.0.0\n * http://www.unicode.org/reports/tr44/#General_Category_Values\n */\nvar regexpNotS = /[\\0-#%-\\*,-;\\?-\\]_a-\\{\\}\\x7F-\\xA1\\xA7\\xAA\\xAB\\xAD\\xB2\\xB3\\xB5-\\xB7\\xB9-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376-\\u0383\\u0386-\\u03F5\\u03F7-\\u0481\\u0483-\\u058C\\u0590-\\u0605\\u0609\\u060A\\u060C\\u060D\\u0610-\\u06DD\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF-\\u07F5\\u07F7-\\u07FD\\u0800-\\u09F1\\u09F4-\\u09F9\\u09FC-\\u0AF0\\u0AF2-\\u0B6F\\u0B71-\\u0BF2\\u0BFB-\\u0C7E\\u0C80-\\u0D4E\\u0D50-\\u0D78\\u0D7A-\\u0E3E\\u0E40-\\u0F00\\u0F04-\\u0F12\\u0F14\\u0F18\\u0F19\\u0F20-\\u0F33\\u0F35\\u0F37\\u0F39-\\u0FBD\\u0FC6\\u0FCD\\u0FD0-\\u0FD4\\u0FD9-\\u109D\\u10A0-\\u138F\\u139A-\\u166C\\u166E-\\u17DA\\u17DC-\\u193F\\u1941-\\u19DD\\u1A00-\\u1B60\\u1B6B-\\u1B73\\u1B7D-\\u1FBC\\u1FBE\\u1FC2-\\u1FCC\\u1FD0-\\u1FDC\\u1FE0-\\u1FEC\\u1FF0-\\u1FFC\\u1FFF-\\u2043\\u2045-\\u2051\\u2053-\\u2079\\u207D-\\u2089\\u208D-\\u209F\\u20C0-\\u20FF\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u218C-\\u218F\\u2308-\\u230B\\u2329\\u232A\\u2427-\\u243F\\u244B-\\u249B\\u24EA-\\u24FF\\u2768-\\u2793\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2B74\\u2B75\\u2B96\\u2C00-\\u2CE4\\u2CEB-\\u2E4F\\u2E52-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u3003\\u3005-\\u3011\\u3014-\\u301F\\u3021-\\u3035\\u3038-\\u303D\\u3040-\\u309A\\u309D-\\u318F\\u3192-\\u3195\\u31A0-\\u31BF\\u31E4-\\u31FF\\u321F-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48F\\uA4C7-\\uA6FF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA827\\uA82C-\\uA835\\uA83A-\\uAA76\\uAA7A-\\uAB5A\\uAB5C-\\uAB69\\uAB6C-\\uD7FF\\uE000-\\uFB28\\uFB2A-\\uFBB1\\uFBC2-\\uFDFB\\uFDFE-\\uFE61\\uFE63\\uFE67\\uFE68\\uFE6A-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF1B\\uFF1F-\\uFF3D\\uFF3F\\uFF41-\\uFF5B\\uFF5D\\uFF5F-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]|\\uD800[\\uDC00-\\uDD36\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDD8F\\uDD9D-\\uDD9F\\uDDA1-\\uDDCF\\uDDFD-\\uDFFF]|[\\uD801\\uD803\\uD804\\uD806\\uD808-\\uD819\\uD81B-\\uD82E\\uD830-\\uD833\\uD837\\uD839\\uD83A\\uD83F-\\uDBFF][\\uDC00-\\uDFFF]|\\uD802[\\uDC00-\\uDC76\\uDC79-\\uDEC7\\uDEC9-\\uDFFF]|\\uD805[\\uDC00-\\uDF3E\\uDF40-\\uDFFF]|\\uD807[\\uDC00-\\uDFD4\\uDFF2-\\uDFFF]|\\uD81A[\\uDC00-\\uDF3B\\uDF40-\\uDF44\\uDF46-\\uDFFF]|\\uD82F[\\uDC00-\\uDC9B\\uDC9D-\\uDFFF]|\\uD834[\\uDCF6-\\uDCFF\\uDD27\\uDD28\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDDE9-\\uDDFF\\uDE42-\\uDE44\\uDE46-\\uDEFF\\uDF57-\\uDFFF]|\\uD835[\\uDC00-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE87-\\uDFFF]|\\uD838[\\uDC00-\\uDD4E\\uDD50-\\uDEFE\\uDF00-\\uDFFF]|\\uD83B[\\uDC00-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDD2D\\uDD2F-\\uDEEF\\uDEF2-\\uDFFF]|\\uD83C[\\uDC2C-\\uDC2F\\uDC94-\\uDC9F\\uDCAF\\uDCB0\\uDCC0\\uDCD0\\uDCF6-\\uDD0C\\uDDAE-\\uDDE5\\uDE03-\\uDE0F\\uDE3C-\\uDE3F\\uDE49-\\uDE4F\\uDE52-\\uDE5F\\uDE66-\\uDEFF]|\\uD83D[\\uDED8-\\uDEDF\\uDEED-\\uDEEF\\uDEFD-\\uDEFF\\uDF74-\\uDF7F\\uDFD9-\\uDFDF\\uDFEC-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE\\uDCAF\\uDCB2-\\uDCFF\\uDD79\\uDDCC\\uDE54-\\uDE5F\\uDE6E\\uDE6F\\uDE75-\\uDE77\\uDE7B-\\uDE7F\\uDE87-\\uDE8F\\uDEA9-\\uDEAF\\uDEB7-\\uDEBF\\uDEC3-\\uDECF\\uDED7-\\uDEFF\\uDF93\\uDFCB-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\n\n\n\n/**\n * Unicode regular expression for: everything except symbols from categories S and Z\n *\n * Generated by:\n *\n * var s = regenerate()\n * .addRange( 0x0, 0x10FFFF )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Math_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Currency_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Modifier_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Other_Symbol/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Space_Separator/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Line_Separator/symbols\" ) )\n * .remove( require( \"@unicode/unicode-13.0.0/General_Category/Paragraph_Separator/symbols\" ) );\n *\n * https://github.com/mathiasbynens/regenerate\n * https://github.com/node-unicode/unicode-13.0.0\n * http://www.unicode.org/reports/tr44/#General_Category_Values\n */\nvar regexpNotSAndZ = /[\\0-\\x1F!-#%-\\*,-;\\?-\\]_a-\\{\\}\\x7F-\\x9F\\xA1\\xA7\\xAA\\xAB\\xAD\\xB2\\xB3\\xB5-\\xB7\\xB9-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376-\\u0383\\u0386-\\u03F5\\u03F7-\\u0481\\u0483-\\u058C\\u0590-\\u0605\\u0609\\u060A\\u060C\\u060D\\u0610-\\u06DD\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF-\\u07F5\\u07F7-\\u07FD\\u0800-\\u09F1\\u09F4-\\u09F9\\u09FC-\\u0AF0\\u0AF2-\\u0B6F\\u0B71-\\u0BF2\\u0BFB-\\u0C7E\\u0C80-\\u0D4E\\u0D50-\\u0D78\\u0D7A-\\u0E3E\\u0E40-\\u0F00\\u0F04-\\u0F12\\u0F14\\u0F18\\u0F19\\u0F20-\\u0F33\\u0F35\\u0F37\\u0F39-\\u0FBD\\u0FC6\\u0FCD\\u0FD0-\\u0FD4\\u0FD9-\\u109D\\u10A0-\\u138F\\u139A-\\u166C\\u166E-\\u167F\\u1681-\\u17DA\\u17DC-\\u193F\\u1941-\\u19DD\\u1A00-\\u1B60\\u1B6B-\\u1B73\\u1B7D-\\u1FBC\\u1FBE\\u1FC2-\\u1FCC\\u1FD0-\\u1FDC\\u1FE0-\\u1FEC\\u1FF0-\\u1FFC\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u2060-\\u2079\\u207D-\\u2089\\u208D-\\u209F\\u20C0-\\u20FF\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u218C-\\u218F\\u2308-\\u230B\\u2329\\u232A\\u2427-\\u243F\\u244B-\\u249B\\u24EA-\\u24FF\\u2768-\\u2793\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2B74\\u2B75\\u2B96\\u2C00-\\u2CE4\\u2CEB-\\u2E4F\\u2E52-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3001-\\u3003\\u3005-\\u3011\\u3014-\\u301F\\u3021-\\u3035\\u3038-\\u303D\\u3040-\\u309A\\u309D-\\u318F\\u3192-\\u3195\\u31A0-\\u31BF\\u31E4-\\u31FF\\u321F-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48F\\uA4C7-\\uA6FF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA827\\uA82C-\\uA835\\uA83A-\\uAA76\\uAA7A-\\uAB5A\\uAB5C-\\uAB69\\uAB6C-\\uD7FF\\uE000-\\uFB28\\uFB2A-\\uFBB1\\uFBC2-\\uFDFB\\uFDFE-\\uFE61\\uFE63\\uFE67\\uFE68\\uFE6A-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF1B\\uFF1F-\\uFF3D\\uFF3F\\uFF41-\\uFF5B\\uFF5D\\uFF5F-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]|\\uD800[\\uDC00-\\uDD36\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDD8F\\uDD9D-\\uDD9F\\uDDA1-\\uDDCF\\uDDFD-\\uDFFF]|[\\uD801\\uD803\\uD804\\uD806\\uD808-\\uD819\\uD81B-\\uD82E\\uD830-\\uD833\\uD837\\uD839\\uD83A\\uD83F-\\uDBFF][\\uDC00-\\uDFFF]|\\uD802[\\uDC00-\\uDC76\\uDC79-\\uDEC7\\uDEC9-\\uDFFF]|\\uD805[\\uDC00-\\uDF3E\\uDF40-\\uDFFF]|\\uD807[\\uDC00-\\uDFD4\\uDFF2-\\uDFFF]|\\uD81A[\\uDC00-\\uDF3B\\uDF40-\\uDF44\\uDF46-\\uDFFF]|\\uD82F[\\uDC00-\\uDC9B\\uDC9D-\\uDFFF]|\\uD834[\\uDCF6-\\uDCFF\\uDD27\\uDD28\\uDD65-\\uDD69\\uDD6D-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDDE9-\\uDDFF\\uDE42-\\uDE44\\uDE46-\\uDEFF\\uDF57-\\uDFFF]|\\uD835[\\uDC00-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE87-\\uDFFF]|\\uD838[\\uDC00-\\uDD4E\\uDD50-\\uDEFE\\uDF00-\\uDFFF]|\\uD83B[\\uDC00-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDD2D\\uDD2F-\\uDEEF\\uDEF2-\\uDFFF]|\\uD83C[\\uDC2C-\\uDC2F\\uDC94-\\uDC9F\\uDCAF\\uDCB0\\uDCC0\\uDCD0\\uDCF6-\\uDD0C\\uDDAE-\\uDDE5\\uDE03-\\uDE0F\\uDE3C-\\uDE3F\\uDE49-\\uDE4F\\uDE52-\\uDE5F\\uDE66-\\uDEFF]|\\uD83D[\\uDED8-\\uDEDF\\uDEED-\\uDEEF\\uDEFD-\\uDEFF\\uDF74-\\uDF7F\\uDFD9-\\uDFDF\\uDFEC-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE\\uDCAF\\uDCB2-\\uDCFF\\uDD79\\uDDCC\\uDE54-\\uDE5F\\uDE6E\\uDE6F\\uDE75-\\uDE77\\uDE7B-\\uDE7F\\uDE87-\\uDE8F\\uDEA9-\\uDEAF\\uDEB7-\\uDEBF\\uDEC3-\\uDECF\\uDED7-\\uDEFF\\uDF93\\uDFCB-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\n\n\n\n/**\n * symbolProperties( currency, cldr )\n *\n * Return pattern replacing `¤` with the appropriate currency symbol literal.\n */\nvar currencySymbolProperties = function( currency, cldr, options ) {\n\tvar currencySpacing, pattern, symbol, symbolEntries,\n\t\tregexp = {\n\t\t\t\"[:digit:]\": /\\d/,\n\t\t\t\"[:^S:]\": regexpNotS,\n\t\t\t\"[[:^S:]&[:^Z:]]\": regexpNotSAndZ\n\t\t};\n\n\tif ( options.style === \"code\" ) {\n\t\tsymbol = currency;\n\t} else {\n\t\tsymbolEntries = [ \"symbol\" ];\n\n\t\t// If options.symbolForm === \"narrow\" was passed, prepend it.\n\t\tif ( options.symbolForm === \"narrow\" ) {\n\t\t\tsymbolEntries.unshift( \"symbol-alt-narrow\" );\n\t\t}\n\n\t\tsymbolEntries.some(function( symbolEntry ) {\n\t\t\treturn symbol = cldr.main([\n\t\t\t\t\"numbers/currencies\",\n\t\t\t\tcurrency,\n\t\t\t\tsymbolEntry\n\t\t\t]);\n\t\t});\n\t}\n\n\tcurrencySpacing = [ \"beforeCurrency\", \"afterCurrency\" ].map(function( position ) {\n\t\treturn cldr.main([\n\t\t\t\"numbers\",\n\t\t\t\"currencyFormats-numberSystem-\" + numberNumberingSystem( cldr ),\n\t\t\t\"currencySpacing\",\n\t\t\tposition\n\t\t]);\n\t});\n\n\tpattern = cldr.main([\n\t\t\"numbers\",\n\t\t\"currencyFormats-numberSystem-\" + numberNumberingSystem( cldr ),\n\t\toptions.style === \"accounting\" ? \"accounting\" : \"standard\"\n\t]);\n\n\tpattern =\n\n\t\t// The number of decimal places and the rounding for each currency is not locale-specific.\n\t\t// Those values are overridden by Supplemental Currency Data.\n\t\tcurrencySupplementalOverride( currency, pattern, cldr )\n\n\t\t// Replace \"¤\" (\\u00A4) with the appropriate symbol literal.\n\t\t.split( \";\" ).map(function( pattern ) {\n\n\t\t\treturn pattern.split( \"\\u00A4\" ).map(function( part, i ) {\n\t\t\t\tvar currencyMatch = regexp[ currencySpacing[ i ].currencyMatch ],\n\t\t\t\t\tsurroundingMatch = regexp[ currencySpacing[ i ].surroundingMatch ],\n\t\t\t\t\tinsertBetween = \"\";\n\n\t\t\t\t// For currencyMatch and surroundingMatch definitions, read [1].\n\t\t\t\t// When i === 0, beforeCurrency is being handled. Otherwise, afterCurrency.\n\t\t\t\t// 1: http://www.unicode.org/reports/tr35/tr35-numbers.html#Currencies\n\t\t\t\tcurrencyMatch = currencyMatch.test( symbol.charAt( i ? symbol.length - 1 : 0 ) );\n\t\t\t\tsurroundingMatch = surroundingMatch.test(\n\t\t\t\t\tpart.charAt( i ? 0 : part.length - 1 ).replace( /[#@,.]/g, \"0\" )\n\t\t\t\t);\n\n\t\t\t\tif ( currencyMatch && part && surroundingMatch ) {\n\t\t\t\t\tinsertBetween = currencySpacing[ i ].insertBetween;\n\t\t\t\t}\n\n\t\t\t\treturn ( i ? insertBetween : \"\" ) + part + ( i ? \"\" : insertBetween );\n\t\t\t}).join( \"\\u00A4\" );\n\t\t}).join( \";\" );\n\n\treturn {\n\t\tpattern: pattern,\n\t\tsymbol: symbol\n\t};\n};\n\n\n\n\n/**\n * nameFormat( formattedNumber, pluralForm, properties )\n *\n * Return the appropriate name form currency format.\n */\nvar currencyNameFormat = function( formattedNumber, pluralForm, properties ) {\n\tvar displayName, unitPattern,\n\t\tparts = [],\n\t\tdisplayNames = properties.displayNames || {},\n\t\tunitPatterns = properties.unitPatterns;\n\n\tdisplayName = displayNames[ \"displayName-count-\" + pluralForm ] ||\n\t\tdisplayNames[ \"displayName-count-other\" ] ||\n\t\tdisplayNames.displayName ||\n\t\tproperties.currency;\n\tunitPattern = unitPatterns[ \"unitPattern-count-\" + pluralForm ] ||\n\t\tunitPatterns[ \"unitPattern-count-other\" ];\n\n\tformatMessageToParts( unitPattern, [ formattedNumber, displayName ]).forEach(function( part ) {\n\t\tif ( part.type === \"variable\" && part.name === \"0\" ) {\n\t\t\tpart.value.forEach(function( part ) {\n\t\t\t\tpartsPush( parts, part.type, part.value );\n\t\t\t});\n\t\t} else if ( part.type === \"variable\" && part.name === \"1\" ) {\n\t\t\tpartsPush( parts, \"currency\", part.value );\n\t\t} else {\n\t\t\tpartsPush( parts, \"literal\", part.value );\n\t\t}\n\t});\n\n\treturn parts;\n};\n\n\n\n\n/**\n * symbolFormat( parts, symbol )\n *\n * Return the appropriate symbol/account form format.\n */\nvar currencySymbolFormat = function( parts, symbol ) {\n\tparts.forEach(function( part ) {\n\t\tif ( part.type === \"currency\" ) {\n\t\t\tpart.value = symbol;\n\t\t}\n\t});\n\treturn parts;\n};\n\n\n\n\nvar currencyToPartsFormatterFn = function( numberToPartsFormatter, pluralGenerator, properties ) {\n\tvar fn;\n\n\t// Return formatter when style is \"name\".\n\tif ( pluralGenerator && properties ) {\n\t\tfn = function currencyToPartsFormatter( value ) {\n\t\t\tvalidateParameterPresence( value, \"value\" );\n\t\t\tvalidateParameterTypeNumber( value, \"value\" );\n\t\t\treturn currencyNameFormat(\n\t\t\t\tnumberToPartsFormatter( value ),\n\t\t\t\tpluralGenerator( value ),\n\t\t\t\tproperties\n\t\t\t);\n\t\t};\n\n\t// Return formatter when style is \"symbol\", \"accounting\", or \"code\".\n\t} else {\n\t\tfn = function currencyToPartsFormatter( value ) {\n\n\t\t\t// 1: Reusing pluralGenerator argument, but in this case it is actually `symbol`\n\t\t\treturn currencySymbolFormat( numberToPartsFormatter( value ), pluralGenerator /* 1 */ );\n\t\t};\n\t}\n\n\treturn fn;\n};\n\n\n\n\n/**\n * objectOmit( object, keys )\n *\n * Return a copy of the object, filtered to omit the blacklisted key or array of keys.\n */\nvar objectOmit = function( object, keys ) {\n\tvar key,\n\t\tcopy = {};\n\n\tkeys = alwaysArray( keys );\n\n\tfor ( key in object ) {\n\t\tif ( keys.indexOf( key ) === -1 ) {\n\t\t\tcopy[ key ] = object[ key ];\n\t\t}\n\t}\n\n\treturn copy;\n};\n\n\n\n\nfunction validateRequiredCldr( path, value ) {\n\tvalidateCldr( path, value, {\n\t\tskip: [\n\t\t\t/numbers\\/currencies\\/[^/]+\\/symbol-alt-/,\n\t\t\t/supplemental\\/currencyData\\/fractions\\/[A-Za-z]{3}$/\n\t\t]\n\t});\n}\n\n/**\n * .currencyFormatter( currency [, options] )\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object]:\n * - style: [String] \"symbol\" (default), \"accounting\", \"code\" or \"name\".\n * - see also number/format options.\n *\n * Return a function that formats a currency according to the given options and default/instance\n * locale.\n */\nGlobalize.currencyFormatter =\nGlobalize.prototype.currencyFormatter = function( currency, options ) {\n\tvar args, currencyToPartsFormatter, returnFn;\n\n\tvalidateParameterPresence( currency, \"currency\" );\n\tvalidateParameterTypeCurrency( currency, \"currency\" );\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\targs = [ currency, options ];\n\n\tcurrencyToPartsFormatter = this.currencyToPartsFormatter( currency, options );\n\treturnFn = currencyFormatterFn( currencyToPartsFormatter );\n\truntimeBind( args, this.cldr, returnFn, [ currencyToPartsFormatter ] );\n\n\treturn returnFn;\n};\n\n/**\n * .currencyToPartsFormatter( currency [, options] )\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object]:\n * - style: [String] \"symbol\" (default), \"accounting\", \"code\" or \"name\".\n * - see also number/format options.\n *\n * Return a currency formatter function (of the form below) according to the given options and the\n * default/instance locale.\n *\n * fn( value )\n *\n * @value [Number]\n *\n * Return a function that formats a currency to parts according to the given options\n * and the default/instance locale.\n */\nGlobalize.currencyToPartsFormatter =\nGlobalize.prototype.currencyToPartsFormatter = function( currency, options ) {\n\tvar args, cldr, numberToPartsFormatter, pluralGenerator, properties, returnFn, style;\n\n\tvalidateParameterPresence( currency, \"currency\" );\n\tvalidateParameterTypeCurrency( currency, \"currency\" );\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\tcldr = this.cldr;\n\toptions = options || {};\n\n\targs = [ currency, options ];\n\tstyle = options.style || \"symbol\";\n\n\tvalidateDefaultLocale( cldr );\n\n\t// Get properties given style (\"symbol\" default, \"code\" or \"name\").\n\tcldr.on( \"get\", validateRequiredCldr );\n\ttry {\n\t\tproperties = ({\n\t\t\taccounting: currencySymbolProperties,\n\t\t\tcode: currencySymbolProperties,\n\t\t\tname: currencyNameProperties,\n\t\t\tsymbol: currencySymbolProperties\n\t\t}[ style ] )( currency, cldr, options );\n\t} finally {\n\t\tcldr.off( \"get\", validateRequiredCldr );\n\t}\n\n\t// options = options minus style, plus raw pattern.\n\toptions = objectOmit( options, \"style\" );\n\toptions.raw = properties.pattern;\n\n\t// Return formatter when style is \"symbol\", \"accounting\", or \"code\".\n\tif ( style === \"symbol\" || style === \"accounting\" || style === \"code\" ) {\n\t\tnumberToPartsFormatter = this.numberToPartsFormatter( options );\n\n\t\treturnFn = currencyToPartsFormatterFn( numberToPartsFormatter, properties.symbol );\n\n\t\truntimeBind( args, cldr, returnFn, [ numberToPartsFormatter, properties.symbol ] );\n\n\t// Return formatter when style is \"name\".\n\t} else {\n\t\tnumberToPartsFormatter = this.numberToPartsFormatter( options );\n\n\t\t// Is plural module present? Yes, use its generator. Nope, use an error generator.\n\t\tpluralGenerator = this.plural !== undefined ?\n\t\t\tthis.pluralGenerator() :\n\t\t\tcreateErrorPluralModulePresence;\n\n\t\treturnFn = currencyToPartsFormatterFn(\n\t\t\tnumberToPartsFormatter,\n\t\t\tpluralGenerator,\n\t\t\tproperties\n\t\t);\n\n\t\truntimeBind( args, cldr, returnFn, [\n\t\t\tnumberToPartsFormatter,\n\t\t\tpluralGenerator,\n\t\t\tproperties\n\t\t]);\n\t}\n\n\treturn returnFn;\n};\n\n/**\n * .currencyParser( currency [, options] )\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object] see currencyFormatter.\n *\n * Return the currency parser according to the given options and the default/instance locale.\n */\nGlobalize.currencyParser =\nGlobalize.prototype.currencyParser = function( /* currency, options */ ) {\n\n\t// TODO implement parser.\n\n};\n\n/**\n * .formatCurrency( value, currency [, options] )\n *\n * @value [Number] number to be formatted.\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object] see currencyFormatter.\n *\n * Format a currency according to the given options and the default/instance locale.\n */\nGlobalize.formatCurrency =\nGlobalize.prototype.formatCurrency = function( value, currency, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\treturn this.currencyFormatter( currency, options )( value );\n};\n\n/**\n * .formatCurrencyToParts( value, currency [, options] )\n *\n * @value [Number] number to be formatted.\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object] see currencyFormatter.\n *\n * Format a currency to parts according to the given options and the default/instance locale.\n */\nGlobalize.formatCurrencyToParts =\nGlobalize.prototype.formatCurrencyToParts = function( value, currency, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\treturn this.currencyToPartsFormatter( currency, options )( value );\n};\n\n/**\n * .parseCurrency( value, currency [, options] )\n *\n * @value [String]\n *\n * @currency [String] 3-letter currency code as defined by ISO 4217.\n *\n * @options [Object]: See currencyFormatter.\n *\n * Return the parsed currency or NaN when value is invalid.\n */\nGlobalize.parseCurrency =\nGlobalize.prototype.parseCurrency = function( /* value, currency, options */ ) {\n};\n\nreturn Globalize;\n\n\n\n\n}));\n\n","/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"./number\",\n\t\t\t\"./plural\",\n\t\t\t\"cldr/event\",\n\t\t\t\"cldr/supplemental\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Extend global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar formatMessage = Globalize._formatMessage,\n\truntimeBind = Globalize._runtimeBind,\n\tvalidateCldr = Globalize._validateCldr,\n\tvalidateDefaultLocale = Globalize._validateDefaultLocale,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterTypeString = Globalize._validateParameterTypeString,\n\tvalidateParameterTypeNumber = Globalize._validateParameterTypeNumber;\n\n\n/**\n * format( value, numberFormatter, pluralGenerator, properties )\n *\n * @value [Number] The number to format\n *\n * @numberFormatter [String] A numberFormatter from Globalize.numberFormatter\n *\n * @pluralGenerator [String] A pluralGenerator from Globalize.pluralGenerator\n *\n * @properties [Object] containing relative time plural message.\n *\n * Format relative time.\n */\nvar relativeTimeFormat = function( value, numberFormatter, pluralGenerator, properties ) {\n\n\tvar relativeTime,\n\t\tmessage = properties[ \"relative-type-\" + value ];\n\n\tif ( message ) {\n\t\treturn message;\n\t}\n\n\trelativeTime = value <= 0 ? properties[ \"relativeTime-type-past\" ] :\n\t\tproperties[ \"relativeTime-type-future\" ];\n\n\tvalue = Math.abs( value );\n\n\tmessage = relativeTime[ \"relativeTimePattern-count-\" + pluralGenerator( value ) ];\n\treturn formatMessage( message, [ numberFormatter( value ) ] );\n};\n\n\n\n\nvar relativeTimeFormatterFn = function( numberFormatter, pluralGenerator, properties ) {\n\treturn function relativeTimeFormatter( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeNumber( value, \"value\" );\n\n\t\treturn relativeTimeFormat( value, numberFormatter, pluralGenerator, properties );\n\t};\n\n};\n\n\n\n\n/**\n * properties( unit, cldr, options )\n *\n * @unit [String] eg. \"day\", \"week\", \"month\", etc.\n *\n * @cldr [Cldr instance].\n *\n * @options [Object]\n * - form: [String] eg. \"short\" or \"narrow\". Or falsy for default long form.\n *\n * Return relative time properties.\n */\nvar relativeTimeProperties = function( unit, cldr, options ) {\n\n\tvar form = options.form,\n\t\traw, properties, key, match;\n\n\tif ( form ) {\n\t\tunit = unit + \"-\" + form;\n\t}\n\n\traw = cldr.main( [ \"dates\", \"fields\", unit ] );\n\tproperties = {\n\t\t\"relativeTime-type-future\": raw[ \"relativeTime-type-future\" ],\n\t\t\"relativeTime-type-past\": raw[ \"relativeTime-type-past\" ]\n\t};\n\tfor ( key in raw ) {\n\t\tif ( raw.hasOwnProperty( key ) ) {\n\t\t\tmatch = /relative-type-(-?[0-9]+)/.exec( key );\n\t\t\tif ( match ) {\n\t\t\t\tproperties[ key ] = raw[ key ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn properties;\n};\n\n\n\n\n/**\n * .formatRelativeTime( value, unit [, options] )\n *\n * @value [Number] The number of unit to format.\n *\n * @unit [String] see .relativeTimeFormatter() for details.\n *\n * @options [Object] see .relativeTimeFormatter() for details.\n *\n * Formats a relative time according to the given unit, options, and the default/instance locale.\n */\nGlobalize.formatRelativeTime =\nGlobalize.prototype.formatRelativeTime = function( value, unit, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\n\treturn this.relativeTimeFormatter( unit, options )( value );\n};\n\n/**\n * .relativeTimeFormatter( unit [, options ])\n *\n * @unit [String] String value indicating the unit to be formatted. eg. \"day\", \"week\", \"month\", etc.\n *\n * @options [Object]\n * - form: [String] eg. \"short\" or \"narrow\". Or falsy for default long form.\n *\n * Returns a function that formats a relative time according to the given unit, options, and the\n * default/instance locale.\n */\nGlobalize.relativeTimeFormatter =\nGlobalize.prototype.relativeTimeFormatter = function( unit, options ) {\n\tvar args, cldr, numberFormatter, pluralGenerator, properties, returnFn;\n\n\tvalidateParameterPresence( unit, \"unit\" );\n\tvalidateParameterTypeString( unit, \"unit\" );\n\n\tcldr = this.cldr;\n\toptions = options || {};\n\n\targs = [ unit, options ];\n\n\tvalidateDefaultLocale( cldr );\n\n\tcldr.on( \"get\", validateCldr );\n\ttry {\n\t\tproperties = relativeTimeProperties( unit, cldr, options );\n\t} finally {\n\t\tcldr.off( \"get\", validateCldr );\n\t}\n\tnumberFormatter = this.numberFormatter( options );\n\tpluralGenerator = this.pluralGenerator();\n\n\treturnFn = relativeTimeFormatterFn( numberFormatter, pluralGenerator, properties );\n\n\truntimeBind( args, cldr, returnFn, [ numberFormatter, pluralGenerator, properties ] );\n\n\treturn returnFn;\n};\n\nreturn Globalize;\n\n\n\n\n}));\n\n","/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function( root, factory ) {\n\n\t// UMD returnExports\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD\n\t\tdefine([\n\t\t\t\"cldr\",\n\t\t\t\"../globalize\",\n\t\t\t\"./number\",\n\t\t\t\"./plural\"\n\t\t], factory );\n\t} else if ( typeof exports === \"object\" ) {\n\n\t\t// Node, CommonJS\n\t\tmodule.exports = factory( require( \"cldrjs\" ), require( \"../globalize\" ) );\n\t} else {\n\n\t\t// Extend global\n\t\tfactory( root.Cldr, root.Globalize );\n\t}\n}(this, function( Cldr, Globalize ) {\n\nvar formatMessage = Globalize._formatMessage,\n\truntimeBind = Globalize._runtimeBind,\n\tvalidateParameterPresence = Globalize._validateParameterPresence,\n\tvalidateParameterTypePlainObject = Globalize._validateParameterTypePlainObject,\n\tvalidateParameterTypeNumber = Globalize._validateParameterTypeNumber,\n\tvalidateParameterTypeString = Globalize._validateParameterTypeString;\n\n\n/**\n * format( value, numberFormatter, pluralGenerator, unitProperies )\n *\n * @value [Number]\n *\n * @numberFormatter [Object]: A numberFormatter from Globalize.numberFormatter.\n *\n * @pluralGenerator [Object]: A pluralGenerator from Globalize.pluralGenerator.\n *\n * @unitProperies [Object]: localized unit data from cldr.\n *\n * Format units such as seconds, minutes, days, weeks, etc.\n *\n * OBS:\n *\n * Unit Sequences are not implemented.\n * http://www.unicode.org/reports/tr35/tr35-35/tr35-general.html#Unit_Sequences\n *\n * Duration Unit (for composed time unit durations) is not implemented.\n * http://www.unicode.org/reports/tr35/tr35-35/tr35-general.html#durationUnit\n */\nvar unitFormat = function( value, numberFormatter, pluralGenerator, unitProperties ) {\n\tvar compoundUnitPattern = unitProperties.compoundUnitPattern, dividend, dividendProperties,\n\t\tformattedValue, divisor, divisorProperties, message, pluralValue, oneProperty;\n\n\tunitProperties = unitProperties.unitProperties;\n\tformattedValue = numberFormatter( value );\n\tpluralValue = pluralGenerator( value );\n\n\t// computed compound unit, eg. \"megabyte-per-second\".\n\tif ( unitProperties instanceof Array ) {\n\t\tdividendProperties = unitProperties[ 0 ];\n\t\tdivisorProperties = unitProperties[ 1 ];\n\t\toneProperty = divisorProperties.hasOwnProperty( \"one\" ) ? \"one\" : \"other\";\n\n\t\tdividend = formatMessage( dividendProperties[ pluralValue ], [ formattedValue ] );\n\t\tdivisor = formatMessage( divisorProperties[ oneProperty ], [ \"\" ] ).trim();\n\n\t\treturn formatMessage( compoundUnitPattern, [ dividend, divisor ] );\n\t}\n\n\tmessage = unitProperties[ pluralValue ];\n\n\treturn formatMessage( message, [ formattedValue ] );\n};\n\n\n\n\nvar unitFormatterFn = function( numberFormatter, pluralGenerator, unitProperties ) {\n\treturn function unitFormatter( value ) {\n\t\tvalidateParameterPresence( value, \"value\" );\n\t\tvalidateParameterTypeNumber( value, \"value\" );\n\n\t\treturn unitFormat( value, numberFormatter, pluralGenerator, unitProperties );\n\t};\n\n};\n\n\n\n\n/**\n * categories()\n *\n * Return all unit categories.\n */\nvar unitCategories = [ \"acceleration\", \"angle\", \"area\", \"digital\", \"duration\", \"length\", \"mass\", \"power\",\n\"pressure\", \"speed\", \"temperature\", \"volume\" ];\n\n\n\n\nfunction stripPluralGarbage( data ) {\n\tvar aux, pluralCount;\n\n\tif ( data ) {\n\t\taux = {};\n\t\tfor ( pluralCount in data ) {\n\t\t\taux[ pluralCount.replace( /unitPattern-count-/, \"\" ) ] = data[ pluralCount ];\n\t\t}\n\t}\n\n\treturn aux;\n}\n\n/**\n * get( unit, form, cldr )\n *\n * @unit [String] The full type-unit name (eg. duration-second), or the short unit name\n * (eg. second).\n *\n * @form [String] A string describing the form of the unit representation (eg. long,\n * short, narrow).\n *\n * @cldr [Cldr instance].\n *\n * Return the plural map of a unit, eg: \"second\"\n * { \"one\": \"{0} second\",\n * \"other\": \"{0} seconds\" }\n * }\n *\n * Or the Array of plural maps of a compound-unit, eg: \"foot-per-second\"\n * [ { \"one\": \"{0} foot\",\n * \"other\": \"{0} feet\" },\n * { \"one\": \"{0} second\",\n * \"other\": \"{0} seconds\" } ]\n *\n * Uses the precomputed form of a compound-unit if available, eg: \"mile-per-hour\"\n * { \"displayName\": \"miles per hour\",\n * \"unitPattern-count-one\": \"{0} mile per hour\",\n * \"unitPattern-count-other\": \"{0} miles per hour\"\n * },\n *\n * Also supports \"/\" instead of \"-per-\", eg. \"foot/second\", using the precomputed form if\n * available.\n *\n * Or the Array of plural maps of a compound-unit, eg: \"foot-per-second\"\n * [ { \"one\": \"{0} foot\",\n * \"other\": \"{0} feet\" },\n * { \"one\": \"{0} second\",\n * \"other\": \"{0} seconds\" } ]\n *\n * Or undefined in case the unit (or a unit of the compound-unit) doesn't exist.\n */\nvar get = function( unit, form, cldr ) {\n\tvar ret;\n\n\t// Ensure that we get the 'precomputed' form, if present.\n\tunit = unit.replace( /\\//, \"-per-\" );\n\n\t// Get unit or -unit (eg. \"duration-second\").\n\t[ \"\" ].concat( unitCategories ).some(function( category ) {\n\t\treturn ret = cldr.main([\n\t\t\t\"units\",\n\t\t\tform,\n\t\t\tcategory.length ? category + \"-\" + unit : unit\n\t\t]);\n\t});\n\n\t// Rename keys s/unitPattern-count-//g.\n\tret = stripPluralGarbage( ret );\n\n\t// Compound Unit, eg. \"foot-per-second\" or \"foot/second\".\n\tif ( !ret && ( /-per-/ ).test( unit ) ) {\n\n\t\t// \"Some units already have 'precomputed' forms, such as kilometer-per-hour;\n\t\t// where such units exist, they should be used in preference\" UTS#35.\n\t\t// Note that precomputed form has already been handled above (!ret).\n\n\t\t// Get both recursively.\n\t\tunit = unit.split( \"-per-\" );\n\t\tret = unit.map(function( unit ) {\n\t\t\treturn get( unit, form, cldr );\n\t\t});\n\t\tif ( !ret[ 0 ] || !ret[ 1 ] ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\treturn ret;\n};\n\nvar unitGet = get;\n\n\n\n\n/**\n * properties( unit, form, cldr )\n *\n * @unit [String] The full type-unit name (eg. duration-second), or the short unit name\n * (eg. second).\n *\n * @form [String] A string describing the form of the unit representation (eg. long,\n * short, narrow).\n *\n * @cldr [Cldr instance].\n */\nvar unitProperties = function( unit, form, cldr ) {\n\tvar compoundUnitPattern, unitProperties;\n\n\tcompoundUnitPattern = cldr.main( [ \"units\", form, \"per/compoundUnitPattern\" ] );\n\tunitProperties = unitGet( unit, form, cldr );\n\n\treturn {\n\t\tcompoundUnitPattern: compoundUnitPattern,\n\t\tunitProperties: unitProperties\n\t};\n};\n\n\n\n\n/**\n * Globalize.formatUnit( value, unit, options )\n *\n * @value [Number]\n *\n * @unit [String]: The unit (e.g \"second\", \"day\", \"year\")\n *\n * @options [Object]\n * - form: [String] \"long\", \"short\" (default), or \"narrow\".\n *\n * Format units such as seconds, minutes, days, weeks, etc.\n */\nGlobalize.formatUnit =\nGlobalize.prototype.formatUnit = function( value, unit, options ) {\n\tvalidateParameterPresence( value, \"value\" );\n\tvalidateParameterTypeNumber( value, \"value\" );\n\n\treturn this.unitFormatter( unit, options )( value );\n};\n\n/**\n * Globalize.unitFormatter( unit, options )\n *\n * @unit [String]: The unit (e.g \"second\", \"day\", \"year\")\n *\n * @options [Object]\n * - form: [String] \"long\", \"short\" (default), or \"narrow\".\n *\n * - numberFormatter: [Function] a number formatter function. Defaults to Globalize\n * `.numberFormatter()` for the current locale using the default options.\n */\nGlobalize.unitFormatter =\nGlobalize.prototype.unitFormatter = function( unit, options ) {\n\tvar args, form, numberFormatter, pluralGenerator, returnFn, properties;\n\n\tvalidateParameterPresence( unit, \"unit\" );\n\tvalidateParameterTypeString( unit, \"unit\" );\n\n\tvalidateParameterTypePlainObject( options, \"options\" );\n\n\toptions = options || {};\n\n\targs = [ unit, options ];\n\tform = options.form || \"long\";\n\tproperties = unitProperties( unit, form, this.cldr );\n\n\tnumberFormatter = options.numberFormatter || this.numberFormatter();\n\tpluralGenerator = this.pluralGenerator();\n\treturnFn = unitFormatterFn( numberFormatter, pluralGenerator, properties );\n\n\truntimeBind( args, this.cldr, returnFn, [ numberFormatter, pluralGenerator, properties ] );\n\n\treturn returnFn;\n};\n\nreturn Globalize;\n\n\n\n\n}));\n\n","/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n\"use strict\";\n\n(function(root, factory) {\n if (typeof exports === \"object\") {\n // Node, CommonJS\n module.exports = factory(\n require(\"cldrjs\"),\n require(\"globalize\"),\n require(\"make-plural\")\n );\n } else {\n // Extend global\n factory(root.Cldr, root.Globalize);\n }\n})(this, function(Cldr, Globalize) {\n var formatMessage = Globalize._formatMessage,\n runtimeBind = Globalize._runtimeBind,\n validateCldr = Globalize._validateCldr,\n validateDefaultLocale = Globalize._validateDefaultLocale,\n validateParameterPresence = Globalize._validateParameterPresence,\n validateParameterTypeString = Globalize._validateParameterTypeString,\n validateParameterTypeNumber = Globalize._validateParameterTypeNumber;\n\n const Cardinals = require(\"make-plural/cardinals\");\n\n var relativeTimeFormat = function(value, numberFormatter, properties, cldr) {\n var relativeTime,\n message = properties[\"relative-type-\" + value];\n\n if (message) {\n return message;\n }\n\n relativeTime =\n value <= 0\n ? properties[\"relativeTime-type-past\"]\n : properties[\"relativeTime-type-future\"];\n\n value = Math.abs(value);\n\n const locale = cldr.locale.replace(/-.*/, \"\");\n const val = Cardinals[locale](value);\n\n message = relativeTime[\"relativeTimePattern-count-\" + val];\n\n return formatMessage(message, [numberFormatter(value)]);\n };\n\n var relativeTimeFormatterFn = function(numberFormatter, properties, cldr) {\n return function relativeTimeFormatter(value) {\n validateParameterPresence(value, \"value\");\n validateParameterTypeNumber(value, \"value\");\n\n return relativeTimeFormat(value, numberFormatter, properties, cldr);\n };\n };\n\n var relativeTimeProperties = function(unit, cldr, options) {\n var form = options.form,\n raw,\n properties,\n key,\n match;\n\n if (form) {\n unit = unit + \"-\" + form;\n }\n\n raw = cldr.main([\"dates\", \"fields\", unit]);\n properties = {\n \"relativeTime-type-future\": raw[\"relativeTime-type-future\"],\n \"relativeTime-type-past\": raw[\"relativeTime-type-past\"]\n };\n for (key in raw) {\n if (Object.prototype.hasOwnProperty.call(raw, key)) {\n match = /relative-type-(-?[0-9]+)/.exec(key);\n if (match) {\n properties[key] = raw[key];\n }\n }\n }\n\n return properties;\n };\n\n Globalize.formatRelativeTime = Globalize.prototype.formatRelativeTime = function(\n value,\n unit,\n options\n ) {\n validateParameterPresence(value, \"value\");\n validateParameterTypeNumber(value, \"value\");\n\n return this.relativeTimeFormatter(unit, options)(value);\n };\n\n Globalize.relativeTimeFormatter = Globalize.prototype.relativeTimeFormatter = function(\n unit,\n options\n ) {\n var args, cldr, numberFormatter, properties, returnFn;\n\n validateParameterPresence(unit, \"unit\");\n validateParameterTypeString(unit, \"unit\");\n\n cldr = this.cldr;\n options = options || {};\n\n args = [unit, options];\n\n validateDefaultLocale(cldr);\n\n cldr.on(\"get\", validateCldr);\n try {\n properties = relativeTimeProperties(unit, cldr, options);\n } finally {\n cldr.off(\"get\", validateCldr);\n }\n numberFormatter = this.numberFormatter(options);\n\n returnFn = relativeTimeFormatterFn(numberFormatter, properties, cldr);\n\n runtimeBind(args, cldr, returnFn, [numberFormatter, properties]);\n\n return returnFn;\n };\n\n return Globalize;\n});\n\n","const a = (n) => n == 1 ? 'one' : 'other';\nconst b = (n) => (n == 0 || n == 1) ? 'one' : 'other';\nconst c = (n) => n >= 0 && n <= 1 ? 'one' : 'other';\nconst d = (n) => {\n const s = String(n).split('.'), v0 = !s[1];\n return n == 1 && v0 ? 'one' : 'other';\n};\nconst e = (n) => 'other';\nconst f = (n) => n == 1 ? 'one'\n : n == 2 ? 'two'\n : 'other';\n\nexport const af = a;\nexport const ak = b;\nexport const am = c;\nexport const an = a;\nexport const ar = (n) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n return n == 0 ? 'zero'\n : n == 1 ? 'one'\n : n == 2 ? 'two'\n : (n100 >= 3 && n100 <= 10) ? 'few'\n : (n100 >= 11 && n100 <= 99) ? 'many'\n : 'other';\n};\nexport const ars = (n) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n return n == 0 ? 'zero'\n : n == 1 ? 'one'\n : n == 2 ? 'two'\n : (n100 >= 3 && n100 <= 10) ? 'few'\n : (n100 >= 11 && n100 <= 99) ? 'many'\n : 'other';\n};\nexport const as = c;\nexport const asa = a;\nexport const ast = d;\nexport const az = a;\nexport const bal = a;\nexport const be = (n) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n return n10 == 1 && n100 != 11 ? 'one'\n : (n10 >= 2 && n10 <= 4) && (n100 < 12 || n100 > 14) ? 'few'\n : t0 && n10 == 0 || (n10 >= 5 && n10 <= 9) || (n100 >= 11 && n100 <= 14) ? 'many'\n : 'other';\n};\nexport const bem = a;\nexport const bez = a;\nexport const bg = a;\nexport const bho = b;\nexport const bm = e;\nexport const bn = c;\nexport const bo = e;\nexport const br = (n) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), n1000000 = t0 && s[0].slice(-6);\n return n10 == 1 && n100 != 11 && n100 != 71 && n100 != 91 ? 'one'\n : n10 == 2 && n100 != 12 && n100 != 72 && n100 != 92 ? 'two'\n : ((n10 == 3 || n10 == 4) || n10 == 9) && (n100 < 10 || n100 > 19) && (n100 < 70 || n100 > 79) && (n100 < 90 || n100 > 99) ? 'few'\n : n != 0 && t0 && n1000000 == 0 ? 'many'\n : 'other';\n};\nexport const brx = a;\nexport const bs = (n) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one'\n : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) || (f10 >= 2 && f10 <= 4) && (f100 < 12 || f100 > 14) ? 'few'\n : 'other';\n};\nexport const ca = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n return n == 1 && v0 ? 'one'\n : i != 0 && i1000000 == 0 && v0 ? 'many'\n : 'other';\n};\nexport const ce = a;\nexport const ceb = (n) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), f10 = f.slice(-1);\n return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n};\nexport const cgg = a;\nexport const chr = a;\nexport const ckb = a;\nexport const cs = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1];\n return n == 1 && v0 ? 'one'\n : (i >= 2 && i <= 4) && v0 ? 'few'\n : !v0 ? 'many'\n : 'other';\n};\nexport const cy = (n) => n == 0 ? 'zero'\n : n == 1 ? 'one'\n : n == 2 ? 'two'\n : n == 3 ? 'few'\n : n == 6 ? 'many'\n : 'other';\nexport const da = (n) => {\n const s = String(n).split('.'), i = s[0], t0 = Number(s[0]) == n;\n return n == 1 || !t0 && (i == 0 || i == 1) ? 'one' : 'other';\n};\nexport const de = d;\nexport const doi = c;\nexport const dsb = (n) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i100 = i.slice(-2), f100 = f.slice(-2);\n return v0 && i100 == 1 || f100 == 1 ? 'one'\n : v0 && i100 == 2 || f100 == 2 ? 'two'\n : v0 && (i100 == 3 || i100 == 4) || (f100 == 3 || f100 == 4) ? 'few'\n : 'other';\n};\nexport const dv = a;\nexport const dz = e;\nexport const ee = a;\nexport const el = a;\nexport const en = d;\nexport const eo = a;\nexport const es = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n return n == 1 ? 'one'\n : i != 0 && i1000000 == 0 && v0 ? 'many'\n : 'other';\n};\nexport const et = d;\nexport const eu = a;\nexport const fa = c;\nexport const ff = (n) => n >= 0 && n < 2 ? 'one' : 'other';\nexport const fi = d;\nexport const fil = (n) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), f10 = f.slice(-1);\n return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n};\nexport const fo = a;\nexport const fr = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n return n >= 0 && n < 2 ? 'one'\n : i != 0 && i1000000 == 0 && v0 ? 'many'\n : 'other';\n};\nexport const fur = a;\nexport const fy = d;\nexport const ga = (n) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n;\n return n == 1 ? 'one'\n : n == 2 ? 'two'\n : (t0 && n >= 3 && n <= 6) ? 'few'\n : (t0 && n >= 7 && n <= 10) ? 'many'\n : 'other';\n};\nexport const gd = (n) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n;\n return (n == 1 || n == 11) ? 'one'\n : (n == 2 || n == 12) ? 'two'\n : ((t0 && n >= 3 && n <= 10) || (t0 && n >= 13 && n <= 19)) ? 'few'\n : 'other';\n};\nexport const gl = d;\nexport const gsw = a;\nexport const gu = c;\nexport const guw = b;\nexport const gv = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2);\n return v0 && i10 == 1 ? 'one'\n : v0 && i10 == 2 ? 'two'\n : v0 && (i100 == 0 || i100 == 20 || i100 == 40 || i100 == 60 || i100 == 80) ? 'few'\n : !v0 ? 'many'\n : 'other';\n};\nexport const ha = a;\nexport const haw = a;\nexport const he = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1];\n return i == 1 && v0 || i == 0 && !v0 ? 'one'\n : i == 2 && v0 ? 'two'\n : 'other';\n};\nexport const hi = c;\nexport const hnj = e;\nexport const hr = (n) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one'\n : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) || (f10 >= 2 && f10 <= 4) && (f100 < 12 || f100 > 14) ? 'few'\n : 'other';\n};\nexport const hsb = (n) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i100 = i.slice(-2), f100 = f.slice(-2);\n return v0 && i100 == 1 || f100 == 1 ? 'one'\n : v0 && i100 == 2 || f100 == 2 ? 'two'\n : v0 && (i100 == 3 || i100 == 4) || (f100 == 3 || f100 == 4) ? 'few'\n : 'other';\n};\nexport const hu = a;\nexport const hy = (n) => n >= 0 && n < 2 ? 'one' : 'other';\nexport const ia = d;\nexport const id = e;\nexport const ig = e;\nexport const ii = e;\nexport const io = d;\nexport const is = (n) => {\n const s = String(n).split('.'), i = s[0], t = (s[1] || '').replace(/0+$/, ''), t0 = Number(s[0]) == n, i10 = i.slice(-1), i100 = i.slice(-2);\n return t0 && i10 == 1 && i100 != 11 || t % 10 == 1 && t % 100 != 11 ? 'one' : 'other';\n};\nexport const it = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n return n == 1 && v0 ? 'one'\n : i != 0 && i1000000 == 0 && v0 ? 'many'\n : 'other';\n};\nexport const iu = f;\nexport const ja = e;\nexport const jbo = e;\nexport const jgo = a;\nexport const jmc = a;\nexport const jv = e;\nexport const jw = e;\nexport const ka = a;\nexport const kab = (n) => n >= 0 && n < 2 ? 'one' : 'other';\nexport const kaj = a;\nexport const kcg = a;\nexport const kde = e;\nexport const kea = e;\nexport const kk = a;\nexport const kkj = a;\nexport const kl = a;\nexport const km = e;\nexport const kn = c;\nexport const ko = e;\nexport const ks = a;\nexport const ksb = a;\nexport const ksh = (n) => n == 0 ? 'zero'\n : n == 1 ? 'one'\n : 'other';\nexport const ku = a;\nexport const kw = (n) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2), n1000 = t0 && s[0].slice(-3), n100000 = t0 && s[0].slice(-5), n1000000 = t0 && s[0].slice(-6);\n return n == 0 ? 'zero'\n : n == 1 ? 'one'\n : (n100 == 2 || n100 == 22 || n100 == 42 || n100 == 62 || n100 == 82) || t0 && n1000 == 0 && ((n100000 >= 1000 && n100000 <= 20000) || n100000 == 40000 || n100000 == 60000 || n100000 == 80000) || n != 0 && n1000000 == 100000 ? 'two'\n : (n100 == 3 || n100 == 23 || n100 == 43 || n100 == 63 || n100 == 83) ? 'few'\n : n != 1 && (n100 == 1 || n100 == 21 || n100 == 41 || n100 == 61 || n100 == 81) ? 'many'\n : 'other';\n};\nexport const ky = a;\nexport const lag = (n) => {\n const s = String(n).split('.'), i = s[0];\n return n == 0 ? 'zero'\n : (i == 0 || i == 1) && n != 0 ? 'one'\n : 'other';\n};\nexport const lb = a;\nexport const lg = a;\nexport const lij = d;\nexport const lkt = e;\nexport const ln = b;\nexport const lo = e;\nexport const lt = (n) => {\n const s = String(n).split('.'), f = s[1] || '', t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n return n10 == 1 && (n100 < 11 || n100 > 19) ? 'one'\n : (n10 >= 2 && n10 <= 9) && (n100 < 11 || n100 > 19) ? 'few'\n : f != 0 ? 'many'\n : 'other';\n};\nexport const lv = (n) => {\n const s = String(n).split('.'), f = s[1] || '', v = f.length, t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), f100 = f.slice(-2), f10 = f.slice(-1);\n return t0 && n10 == 0 || (n100 >= 11 && n100 <= 19) || v == 2 && (f100 >= 11 && f100 <= 19) ? 'zero'\n : n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11 || v != 2 && f10 == 1 ? 'one'\n : 'other';\n};\nexport const mas = a;\nexport const mg = b;\nexport const mgo = a;\nexport const mk = (n) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one' : 'other';\n};\nexport const ml = a;\nexport const mn = a;\nexport const mo = (n) => {\n const s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n return n == 1 && v0 ? 'one'\n : !v0 || n == 0 || n != 1 && (n100 >= 1 && n100 <= 19) ? 'few'\n : 'other';\n};\nexport const mr = a;\nexport const ms = e;\nexport const mt = (n) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n return n == 1 ? 'one'\n : n == 2 ? 'two'\n : n == 0 || (n100 >= 3 && n100 <= 10) ? 'few'\n : (n100 >= 11 && n100 <= 19) ? 'many'\n : 'other';\n};\nexport const my = e;\nexport const nah = a;\nexport const naq = f;\nexport const nb = a;\nexport const nd = a;\nexport const ne = a;\nexport const nl = d;\nexport const nn = a;\nexport const nnh = a;\nexport const no = a;\nexport const nqo = e;\nexport const nr = a;\nexport const nso = b;\nexport const ny = a;\nexport const nyn = a;\nexport const om = a;\nexport const or = a;\nexport const os = a;\nexport const osa = e;\nexport const pa = b;\nexport const pap = a;\nexport const pcm = c;\nexport const pl = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2);\n return n == 1 && v0 ? 'one'\n : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) ? 'few'\n : v0 && i != 1 && (i10 == 0 || i10 == 1) || v0 && (i10 >= 5 && i10 <= 9) || v0 && (i100 >= 12 && i100 <= 14) ? 'many'\n : 'other';\n};\nexport const prg = (n) => {\n const s = String(n).split('.'), f = s[1] || '', v = f.length, t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), f100 = f.slice(-2), f10 = f.slice(-1);\n return t0 && n10 == 0 || (n100 >= 11 && n100 <= 19) || v == 2 && (f100 >= 11 && f100 <= 19) ? 'zero'\n : n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11 || v != 2 && f10 == 1 ? 'one'\n : 'other';\n};\nexport const ps = a;\nexport const pt = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n return (i == 0 || i == 1) ? 'one'\n : i != 0 && i1000000 == 0 && v0 ? 'many'\n : 'other';\n};\nexport const pt_PT = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n return n == 1 && v0 ? 'one'\n : i != 0 && i1000000 == 0 && v0 ? 'many'\n : 'other';\n};\nexport const rm = a;\nexport const ro = (n) => {\n const s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n return n == 1 && v0 ? 'one'\n : !v0 || n == 0 || n != 1 && (n100 >= 1 && n100 <= 19) ? 'few'\n : 'other';\n};\nexport const rof = a;\nexport const ru = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2);\n return v0 && i10 == 1 && i100 != 11 ? 'one'\n : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) ? 'few'\n : v0 && i10 == 0 || v0 && (i10 >= 5 && i10 <= 9) || v0 && (i100 >= 11 && i100 <= 14) ? 'many'\n : 'other';\n};\nexport const rwk = a;\nexport const sah = e;\nexport const saq = a;\nexport const sat = f;\nexport const sc = d;\nexport const scn = d;\nexport const sd = a;\nexport const sdh = a;\nexport const se = f;\nexport const seh = a;\nexport const ses = e;\nexport const sg = e;\nexport const sh = (n) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one'\n : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) || (f10 >= 2 && f10 <= 4) && (f100 < 12 || f100 > 14) ? 'few'\n : 'other';\n};\nexport const shi = (n) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n;\n return n >= 0 && n <= 1 ? 'one'\n : (t0 && n >= 2 && n <= 10) ? 'few'\n : 'other';\n};\nexport const si = (n) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '';\n return (n == 0 || n == 1) || i == 0 && f == 1 ? 'one' : 'other';\n};\nexport const sk = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1];\n return n == 1 && v0 ? 'one'\n : (i >= 2 && i <= 4) && v0 ? 'few'\n : !v0 ? 'many'\n : 'other';\n};\nexport const sl = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i100 = i.slice(-2);\n return v0 && i100 == 1 ? 'one'\n : v0 && i100 == 2 ? 'two'\n : v0 && (i100 == 3 || i100 == 4) || !v0 ? 'few'\n : 'other';\n};\nexport const sma = f;\nexport const smi = f;\nexport const smj = f;\nexport const smn = f;\nexport const sms = f;\nexport const sn = a;\nexport const so = a;\nexport const sq = a;\nexport const sr = (n) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one'\n : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) || (f10 >= 2 && f10 <= 4) && (f100 < 12 || f100 > 14) ? 'few'\n : 'other';\n};\nexport const ss = a;\nexport const ssy = a;\nexport const st = a;\nexport const su = e;\nexport const sv = d;\nexport const sw = d;\nexport const syr = a;\nexport const ta = a;\nexport const te = a;\nexport const teo = a;\nexport const th = e;\nexport const ti = b;\nexport const tig = a;\nexport const tk = a;\nexport const tl = (n) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), f10 = f.slice(-1);\n return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n};\nexport const tn = a;\nexport const to = e;\nexport const tpi = e;\nexport const tr = a;\nexport const ts = a;\nexport const tzm = (n) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n;\n return (n == 0 || n == 1) || (t0 && n >= 11 && n <= 99) ? 'one' : 'other';\n};\nexport const ug = a;\nexport const uk = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2);\n return v0 && i10 == 1 && i100 != 11 ? 'one'\n : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) ? 'few'\n : v0 && i10 == 0 || v0 && (i10 >= 5 && i10 <= 9) || v0 && (i100 >= 11 && i100 <= 14) ? 'many'\n : 'other';\n};\nexport const und = e;\nexport const ur = d;\nexport const uz = a;\nexport const ve = a;\nexport const vec = (n) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n return n == 1 && v0 ? 'one'\n : i != 0 && i1000000 == 0 && v0 ? 'many'\n : 'other';\n};\nexport const vi = e;\nexport const vo = a;\nexport const vun = a;\nexport const wa = b;\nexport const wae = a;\nexport const wo = e;\nexport const xh = a;\nexport const xog = a;\nexport const yi = d;\nexport const yo = e;\nexport const yue = e;\nexport const zh = e;\nexport const zu = c;\n","/**\n * Shared code between Griffin Node.js and Griffin client.\n *\n * Important: Do NOT include anything in here that isn't meant to be part of both libraries.\n */\n\n\"use strict\";\n\nvar RelativeTime = require(\"relative-time\").default;\nvar DURATION_NARROW_STYLE = \"duration-narrow\";\nRelativeTime.threshold = {\n month: 11, // at least 11 months before using year.\n day: 26, // at least 26 days before using month.\n hour: 22, // at least 22 hours before using day.\n minute: 45, // at least 45 minutes before using hour.\n second: 45 // at least 45 seconds before using minute.\n};\n\nfunction getTimeInDurationNarrowStyle(formatter, value) {\n return formatter(Math.abs(value));\n}\n\nRelativeTime.initializeFormatters = function(globalize, options) {\n var style = options ? options.style : \"\";\n if (style === DURATION_NARROW_STYLE) {\n var formatter = {\n second: globalize.unitFormatter(\"second\", { form: \"narrow\" }),\n minute: globalize.unitFormatter(\"minute\", { form: \"narrow\" }),\n hour: globalize.unitFormatter(\"hour\", { form: \"narrow\" }),\n day: globalize.unitFormatter(\"day\", { form: \"narrow\" }),\n month: globalize.unitFormatter(\"month\", { form: \"narrow\" }),\n year: globalize.unitFormatter(\"year\", { form: \"narrow\" })\n };\n return {\n second: function(value) {\n return getTimeInDurationNarrowStyle(formatter.second, value);\n },\n minute: function(value) {\n return getTimeInDurationNarrowStyle(formatter.minute, value);\n },\n hour: function(value) {\n return getTimeInDurationNarrowStyle(formatter.hour, value);\n },\n day: function(value) {\n return getTimeInDurationNarrowStyle(formatter.day, value);\n },\n month: function(value) {\n return getTimeInDurationNarrowStyle(formatter.month, value);\n },\n year: function(value) {\n return getTimeInDurationNarrowStyle(formatter.year, value);\n }\n };\n }\n return {\n second: globalize.relativeTimeFormatter(\"second\"),\n minute: globalize.relativeTimeFormatter(\"minute\"),\n hour: globalize.relativeTimeFormatter(\"hour\"),\n day: globalize.relativeTimeFormatter(\"day\"),\n month: globalize.relativeTimeFormatter(\"month\"),\n year: globalize.relativeTimeFormatter(\"year\")\n };\n};\nvar relativeTimeFormatters = {};\n\nvar assertion = require(\"./client/utils/assertion\");\nvar basic = require(\"./client/utils/basic\");\nvar timeZone = require(\"./client/utils/time-zone\");\n\nvar assertType = assertion.assertType;\nvar assertRange = assertion.assertRange;\nvar defineProperties = basic.defineProperties;\nvar getValueOrDefault = basic.getValueOrDefault;\nvar objectValues = basic.objectValues;\nvar normalizeTimeZone = timeZone.normalizeTimeZone;\n\nvar DEFAULT_UNIT = \"best-fit\";\nvar DEFAULT_STYLE = \"long\";\nvar UNITS = {\n RELATIVE_TIME_BEST_FIT: \"best-fit\",\n RELATIVE_TIME_SECOND: \"second\",\n RELATIVE_TIME_MINUTE: \"minute\",\n RELATIVE_TIME_HOUR: \"hour\",\n RELATIVE_TIME_DAY: \"day\",\n RELATIVE_TIME_MONTH: \"month\",\n RELATIVE_TIME_YEAR: \"year\"\n};\nvar UNITS_VALUES = objectValues(UNITS);\n\nfunction setConstants(object) {\n defineProperties(object, UNITS);\n}\n\nfunction getRelativeTimeFormatter(locale, globalize, options) {\n var style = options.style;\n if (!relativeTimeFormatters[locale]) {\n relativeTimeFormatters[locale] = {};\n }\n if (!relativeTimeFormatters[locale][style]) {\n relativeTimeFormatters[locale][style] = new RelativeTime(\n globalize,\n options\n );\n }\n return relativeTimeFormatters[locale][style];\n}\n\n/**\n * Return the timeZoneData given the complete *data* and a *timeZone* string.\n * @param {Object} data\n * @param {string} timeZone - e.g., \"America/Los_Angeles\"\n * @example\n *\n * getTimeZoneData(\n * {\n * America: {\n * Los_Angeles: X\n * }\n * },\n * \"America/Los_Angeles\"\n * )\n * // > X\n */\nfunction getTimeZoneData(data, timeZone) {\n // Traverse IANA time zone *data* given a timeZone string.\n // - Break timeZone string into parts like [\"America\", \"Los_Angeles\"]\n // - Iterate until the whole timeZone path is traversed (immediately stop in case any node can't\n // be traversed).\n // - Return the last node in case data was found, or null otherwise.\n return timeZone.split(\"/\").every(function(node) {\n data = data[node];\n return !!data;\n })\n ? data\n : null;\n}\n\n/**\n * formatRelativeTime\n */\nfunction formatRelativeTime(date, options, self) {\n assertType(date, \"date\", [\"date\"]);\n\n options = getValueOrDefault(options, {});\n assertType(options, \"options\", [\"plain object\"]);\n\n var timeZone = options.timeZone;\n assertType(timeZone, \"options.timeZone\", [\"string\"]);\n timeZone = normalizeTimeZone(timeZone, self.primaryTimeZone, self.timeZones);\n\n var unit = getValueOrDefault(options.unit, DEFAULT_UNIT);\n\n // Also allow bestFit (note camelCase).\n if (unit === \"bestFit\") {\n unit = \"best-fit\";\n }\n\n assertType(unit, \"options.unit\", [\"string\"]);\n assertRange(unit, UNITS_VALUES, \"Invalid `options.unit`: `{{unit}}`\", {\n unit: unit\n });\n\n var style = options.style || DEFAULT_STYLE;\n var timeZoneData = getTimeZoneData(self.timeZoneData, timeZone);\n\n try {\n var relativeTimeFormatter = getRelativeTimeFormatter(\n self.locale,\n self.globalize,\n { style: style }\n );\n if (style === DURATION_NARROW_STYLE) {\n return relativeTimeFormatter.format(date, {\n timeZoneData: timeZoneData,\n unit: unit\n });\n }\n return relativeTimeFormatter.format(date, {\n style: style,\n timeZoneData: timeZoneData,\n unit: unit\n });\n } catch (error) {\n throw globalizeToGriffinError(error);\n }\n}\n\n/**\n * getTimeZone\n */\nfunction getTimeZone(self) {\n return timeZone.getTimeZone(self.primaryTimeZone, self.timeZones);\n}\n\nfunction globalizeToGriffinError(error) {\n return new Error(\n [\"Oops, internal error\", error.message, error.stack].join(\"\\n\")\n );\n}\n\nmodule.exports = {\n RelativeTime: RelativeTime,\n formatRelativeTime: formatRelativeTime,\n getTimeZone: getTimeZone,\n setConstants: setConstants\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _globalize = require(\"globalize\");\n\nvar _globalize2 = _interopRequireDefault(_globalize);\n\nvar _zonedDateTime = require(\"zoned-date-time\");\n\nvar _zonedDateTime2 = _interopRequireDefault(_zonedDateTime);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar second = 1e3;\nvar minute = 6e4;\nvar hour = 36e5;\nvar day = 864e5;\n// const week = 6048e5;\n// const month = 2592e6;\n\nfunction defineCachedGetter(obj, prop, get) {\n defineGetter(obj, prop, function () {\n if (!this._[prop]) {\n this._[prop] = get.call(this);\n }\n return this._[prop];\n });\n}\n\nfunction defineGetter(obj, prop, get) {\n Object.defineProperty(obj, prop, { get: get });\n}\n\nfunction startOf(date, unit) {\n date = date instanceof _zonedDateTime2.default ? date.clone() : new Date(date.getTime());\n switch (unit) {\n case \"year\":\n date.setMonth(0);\n // falls through\n case \"month\":\n date.setDate(1);\n // falls through\n case \"day\":\n date.setHours(0);\n // falls through\n case \"hour\":\n date.setMinutes(0);\n // falls through\n case \"minute\":\n date.setSeconds(0);\n // falls through\n case \"second\":\n date.setMilliseconds(0);\n }\n return date;\n}\n\nvar RelativeTime = function () {\n function RelativeTime() {\n _classCallCheck(this, RelativeTime);\n\n this.formatters = RelativeTime.initializeFormatters.apply(RelativeTime, arguments);\n }\n\n _createClass(RelativeTime, [{\n key: \"format\",\n value: function format(date) {\n var _ref = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var _ref$timeZoneData = _ref.timeZoneData;\n var timeZoneData = _ref$timeZoneData === undefined ? null : _ref$timeZoneData;\n var _ref$unit = _ref.unit;\n var unit = _ref$unit === undefined ? \"best-fit\" : _ref$unit;\n\n var formatters = this.formatters;\n var now = new Date();\n\n if (timeZoneData) {\n date = new _zonedDateTime2.default(date, timeZoneData);\n now = new _zonedDateTime2.default(now, timeZoneData);\n }\n\n var diff = {\n _: {},\n ms: date.getTime() - now.getTime(),\n years: date.getFullYear() - now.getFullYear()\n };\n var round = Math[diff.ms > 0 ? \"floor\" : \"ceil\"];\n\n defineCachedGetter(diff, \"months\", function () {\n return this.years * 12 + date.getMonth() - now.getMonth();\n });\n defineCachedGetter(diff, \"days\", function () {\n return round((startOf(date, \"day\") - startOf(now, \"day\")) / day);\n });\n defineCachedGetter(diff, \"hours\", function () {\n return round((startOf(date, \"hour\") - startOf(now, \"hour\")) / hour);\n });\n defineCachedGetter(diff, \"minutes\", function () {\n return round((startOf(date, \"minute\") - startOf(now, \"minute\")) / minute);\n });\n defineCachedGetter(diff, \"seconds\", function () {\n return round((startOf(date, \"second\") - startOf(now, \"second\")) / second);\n });\n\n var absDiff = {\n _: {}\n };\n\n defineGetter(absDiff, \"years\", function () {\n return Math.abs(diff.years);\n });\n defineGetter(absDiff, \"months\", function () {\n return Math.abs(diff.months);\n });\n defineGetter(absDiff, \"days\", function () {\n return Math.abs(diff.days);\n });\n defineGetter(absDiff, \"hours\", function () {\n return Math.abs(diff.hours);\n });\n defineGetter(absDiff, \"minutes\", function () {\n return Math.abs(diff.minutes);\n });\n defineGetter(absDiff, \"seconds\", function () {\n return Math.abs(diff.seconds);\n });\n\n if (unit === \"best-fit\") {\n unit = RelativeTime.bestFit(absDiff);\n }\n\n switch (unit) {\n case \"year\":\n return formatters.year(diff.years);\n case \"month\":\n return formatters.month(diff.months);\n // case \"week\": return formatters.week(diff.weeks);\n case \"day\":\n return formatters.day(diff.days);\n case \"hour\":\n return formatters.hour(diff.hours);\n case \"minute\":\n return formatters.minute(diff.minutes);\n default:\n return formatters.second(diff.seconds);\n }\n }\n }]);\n\n return RelativeTime;\n}();\n\nexports.default = RelativeTime;\n\n\nRelativeTime.bestFit = function (absDiff) {\n var threshold = this.threshold;\n switch (true) {\n case absDiff.years > 0 && absDiff.months > threshold.month:\n return \"year\";\n case absDiff.months > 0 && absDiff.days > threshold.day:\n return \"month\";\n // case absDiff.months > 0 && absDiff.weeks > threshold.week: return \"month\";\n // case absDiff.weeks > 0 && absDiff.days > threshold.day: return \"week\";\n case absDiff.days > 0 && absDiff.hours > threshold.hour:\n return \"day\";\n case absDiff.hours > 0 && absDiff.minutes > threshold.minute:\n return \"hour\";\n case absDiff.minutes > 0 && absDiff.seconds > threshold.second:\n return \"minute\";\n default:\n return \"second\";\n }\n};\n\nRelativeTime.threshold = {\n month: 2, // at least 2 months before using year.\n // week: 4, // at least 4 weeks before using month.\n day: 6, // at least 6 days before using month.\n hour: 6, // at least 6 hours before using day.\n minute: 59, // at least 59 minutes before using hour.\n second: 59 // at least 59 seconds before using minute.\n};\n\n// TODO: Remove redundancy. The only reason this code is that ugly is to get\n// supported by globalize-compiler (which reads the static formatters).\nRelativeTime.initializeFormatters = function (globalize) {\n if (globalize) {\n return {\n second: globalize.relativeTimeFormatter(\"second\"),\n minute: globalize.relativeTimeFormatter(\"minute\"),\n hour: globalize.relativeTimeFormatter(\"hour\"),\n day: globalize.relativeTimeFormatter(\"day\"),\n month: globalize.relativeTimeFormatter(\"month\"),\n year: globalize.relativeTimeFormatter(\"year\")\n };\n }\n return {\n second: _globalize2.default.relativeTimeFormatter(\"second\"),\n minute: _globalize2.default.relativeTimeFormatter(\"minute\"),\n hour: _globalize2.default.relativeTimeFormatter(\"hour\"),\n day: _globalize2.default.relativeTimeFormatter(\"day\"),\n month: _globalize2.default.relativeTimeFormatter(\"month\"),\n year: _globalize2.default.relativeTimeFormatter(\"year\")\n };\n};\n","function definePrivateProperty(object, property, value) {\n Object.defineProperty(object, property, {\n value: value\n });\n}\n\nfunction getUntilsIndex(original, untils) {\n var index = 0;\n var originalTime = original.getTime();\n\n // TODO Should we do binary search for improved performance?\n while (index < untils.length - 1 && originalTime >= untils[index]) {\n index++;\n }\n return index;\n}\n\nfunction setWrap(fn) {\n var offset1 = this.getTimezoneOffset();\n var ret = fn();\n this.original.setTime(new Date(this.getTime()));\n var offset2 = this.getTimezoneOffset();\n if (offset2 - offset1) {\n this.original.setMinutes(this.original.getMinutes() + offset2 - offset1);\n }\n return ret;\n}\n\nvar ZonedDateTime = function(date, timeZoneData) {\n definePrivateProperty(this, \"original\", new Date(date.getTime()));\n definePrivateProperty(this, \"local\", new Date(date.getTime()));\n definePrivateProperty(this, \"timeZoneData\", timeZoneData);\n definePrivateProperty(this, \"setWrap\", setWrap);\n if (!(timeZoneData.untils && timeZoneData.offsets && timeZoneData.isdsts)) {\n throw new Error(\"Invalid IANA data\");\n }\n this.setTime(this.local.getTime() - this.getTimezoneOffset() * 60 * 1000);\n};\n\nZonedDateTime.prototype.clone = function() {\n return new ZonedDateTime(this.original, this.timeZoneData);\n};\n\n// Date field getters.\n[\"getFullYear\", \"getMonth\", \"getDate\", \"getDay\", \"getHours\", \"getMinutes\",\n\"getSeconds\", \"getMilliseconds\"].forEach(function(method) {\n // Corresponding UTC method, e.g., \"getUTCFullYear\" if method === \"getFullYear\".\n var utcMethod = \"getUTC\" + method.substr(3);\n ZonedDateTime.prototype[method] = function() {\n return this.local[utcMethod]();\n };\n});\n\n// Note: Define .valueOf = .getTime for arithmetic operations like date1 - date2.\nZonedDateTime.prototype.valueOf =\nZonedDateTime.prototype.getTime = function() {\n return this.local.getTime() + this.getTimezoneOffset() * 60 * 1000;\n};\n\nZonedDateTime.prototype.getTimezoneOffset = function() {\n var index = getUntilsIndex(this.original, this.timeZoneData.untils);\n return this.timeZoneData.offsets[index];\n};\n\n// Date field setters.\n[\"setFullYear\", \"setMonth\", \"setDate\", \"setHours\", \"setMinutes\", \"setSeconds\", \"setMilliseconds\"].forEach(function(method) {\n // Corresponding UTC method, e.g., \"setUTCFullYear\" if method === \"setFullYear\".\n var utcMethod = \"setUTC\" + method.substr(3);\n ZonedDateTime.prototype[method] = function(value) {\n var local = this.local;\n // Note setWrap is needed for seconds and milliseconds just because\n // abs(value) could be >= a minute.\n return this.setWrap(function() {\n return local[utcMethod](value);\n });\n };\n});\n\nZonedDateTime.prototype.setTime = function(time) {\n return this.local.setTime(time);\n};\n\nZonedDateTime.prototype.isDST = function() {\n var index = getUntilsIndex(this.original, this.timeZoneData.untils);\n return Boolean(this.timeZoneData.isdsts[index]);\n};\n\nZonedDateTime.prototype.inspect = function() {\n var index = getUntilsIndex(this.original, this.timeZoneData.untils);\n var abbrs = this.timeZoneData.abbrs;\n return this.local.toISOString().replace(/Z$/, \"\") + \" \" +\n (abbrs && abbrs[index] + \" \" || (this.getTimezoneOffset() * -1) + \" \") +\n (this.isDST() ? \"(daylight savings)\" : \"\");\n};\n\nZonedDateTime.prototype.toDate = function() {\n return new Date(this.getTime());\n};\n\n// Type cast getters.\n[\"toISOString\", \"toJSON\", \"toUTCString\"].forEach(function(method) {\n ZonedDateTime.prototype[method] = function() {\n return this.toDate()[method]();\n };\n});\n\nif (typeof module !== \"undefined\" && module.exports) {\n module.exports = ZonedDateTime;\n}\n","\"use strict\";\nmodule.exports = require(\"./lib/client/date\");\n","\"use strict\";\n\n// Load Globalize main module.\nvar Globalize = require(\"globalize/dist/globalize\");\n\n// Extend Globalize with date module.\nrequire(\"globalize/dist/globalize/number\");\nrequire(\"globalize/dist/globalize/date\");\n\nvar assertion = require(\"./utils/assertion\");\nvar basic = require(\"./utils/basic\");\nvar core = require(\"./core\");\nvar dateCommon = require(\"../dateCommon\");\nvar timeZone = require(\"./utils/time-zone\");\n\nvar PRESETS = dateCommon.PRESETS;\nvar assertMetadata = assertion.assertMetadata;\nvar assertRange = assertion.assertRange;\nvar assertType = assertion.assertType;\nvar definePrivateProperty = basic.definePrivateProperty;\nvar defineProperties = basic.defineProperties;\nvar getValueOrDefault = basic.getValueOrDefault;\nvar globalizeOptions = dateCommon.globalizeOptions;\nvar getTimeZone = timeZone.getTimeZone;\nvar normalizeTimeZone = timeZone.normalizeTimeZone;\n\nvar DEFAULT_STYLE = \"date-short\";\nvar DEFAULT_PART_TYPE_NAME_STYLE = \"long\";\nvar PART_NAMES_STYLE_MAP = { long: \"\", short: \"short\" }; // cldr does not use posfix for long as it is the default (e.g. year vs year-short)\nvar MESSAGES = {\n errors: {\n DATE_PARSE_ERROR: \"Not able to parse date\"\n }\n};\n\nvar DateHandler = function() {};\n\ndefineProperties(DateHandler, PRESETS);\n\n/**\n * getTimeZone\n */\n\nObject.defineProperty(DateHandler.prototype, \"getTimeZone\", {\n value: function() {\n return getTimeZone(this.primaryTimeZone, this.timeZones);\n },\n enumerable: true\n});\n\n/**\n * formatDate\n */\nObject.defineProperty(DateHandler.prototype, \"formatDate\", {\n value: function formatDate(date, options) {\n assertType(date, \"date\", [\"date\"]);\n\n options = getValueOrDefault(options, {});\n assertType(options, \"options\", [\"plain object\"]);\n\n var style = getValueOrDefault(options.style, DEFAULT_STYLE);\n assertType(style, \"options.style\", [\"string\"]);\n\n if (options.style === this.DATE_CREDIT_CARD_EXP) {\n throw new Error(\n \"FI service should be used for formatting of credit card expiration dates.\"\n );\n }\n\n var parts = getValueOrDefault(options.parts, false);\n assertType(parts, \"options.parts\", [\"boolean\"]);\n\n var timeZone = options.timeZone;\n assertType(timeZone, \"options.timeZone\", [\"string\"]);\n timeZone = normalizeTimeZone(\n timeZone,\n this.primaryTimeZone,\n this.timeZones\n );\n\n try {\n var formatFunction = parts ? \"formatDateToParts\" : \"formatDate\";\n return this.globalize[formatFunction](\n date,\n globalizeOptions({ style: style, timeZone: timeZone })\n );\n } catch (error) {\n throw globalizeToGriffinError(error);\n }\n },\n enumerable: true\n});\n\n/**\n * normalizeDate\n */\nObject.defineProperty(DateHandler.prototype, \"normalizeDate\", {\n value: function normalizeDate(dateString, options) {\n assertType(dateString, \"dateString\", [\"string\"]);\n\n options = getValueOrDefault(options, {});\n assertType(options, \"options\", [\"plain object\"]);\n\n var style = getValueOrDefault(options.style, DEFAULT_STYLE);\n assertType(style, \"options.style\", [\"string\"]);\n\n if (options.style === this.DATE_CREDIT_CARD_EXP) {\n throw new Error(\n \"FI service should be used for validation/normalization of credit card expiration dates.\"\n );\n }\n\n var timeZone = options.timeZone;\n assertType(timeZone, \"options.timeZone\", [\"string\"]);\n timeZone = normalizeTimeZone(\n timeZone,\n this.primaryTimeZone,\n this.timeZones\n );\n\n var errors = {};\n var globalizeResult;\n\n try {\n globalizeResult = this.globalize.parseDate(\n dateString,\n globalizeOptions({ style: style, timeZone: timeZone })\n );\n } catch (error) {\n throw globalizeToGriffinError(error);\n }\n\n if (\n globalizeResult === null ||\n isNaN(globalizeResult.getTime()) ||\n globalizeResult.getFullYear() < 1\n ) {\n core.addError(errors, MESSAGES, \"DATE_PARSE_ERROR\");\n return errors;\n }\n\n return globalizeResult;\n },\n enumerable: true\n});\n\n/**\n * datePartDisplayNames\n */\nObject.defineProperty(DateHandler.prototype, \"datePartDisplayNames\", {\n value: function datePartDisplayNames(partTypes, options) {\n assertType(partTypes, \"partTypes\", [\"array\"]);\n\n options = getValueOrDefault(options, {});\n assertType(options, \"options\", [\"plain object\"]);\n\n var style = getValueOrDefault(options.style, DEFAULT_PART_TYPE_NAME_STYLE);\n assertType(style, \"options.style\", [\"string\"]);\n assertRange(\n style,\n PART_NAMES_STYLE_MAP,\n \"Invalid `options.style`: `{{style}}`\",\n { style: style }\n );\n\n var cldrFields = this.dateFields;\n var result = {};\n // We rely on metadata structure validity\n partTypes.forEach(function(partType) {\n assertType(partType, \"partTypes element\", [\"string\"]);\n // e.g. partType = 'year', style = 'long' => key = 'year'\n // or partType = 'year', style = 'short' => key = 'year-short'\n var cldrFieldKey =\n partType +\n (PART_NAMES_STYLE_MAP[style] === \"\"\n ? \"\"\n : \"-\" + PART_NAMES_STYLE_MAP[style]);\n assertRange(\n cldrFieldKey,\n Object.keys(cldrFields),\n \"Invalid part type: \" + partType\n );\n var cldrField = cldrFields[cldrFieldKey];\n result[partType] = cldrField.displayName;\n });\n return result;\n },\n enumerable: true\n});\n\n/*\n * dateInputMask\n */\nObject.defineProperty(DateHandler.prototype, \"dateInputMask\", {\n value: function dateInputMask(options) {\n options = getValueOrDefault(options, {});\n assertType(options, \"options\", [\"plain object\"]);\n\n var style = getValueOrDefault(options.style, DEFAULT_STYLE);\n assertType(style, \"options.style\", [\"string\"]);\n\n var parts = getValueOrDefault(options.parts, false);\n assertType(parts, \"options.parts\", [\"boolean\"]);\n\n // format a dummy date to get a formatted date (with parts)\n // then reverse-engineer the mask from the formatted date parts\n // use date with 4 digit year, 1 digit month, 1 digit day\n // zero-expansion will expand months/days to 2 digits\n // and yy will trim 4 digit year to 2 digits\n var dummyDate = new Date(2014, 2, 2);\n\n var partsArray;\n\n try {\n partsArray = this.globalize.formatDateToParts(\n dummyDate,\n globalizeOptions({ style: style })\n );\n } catch (error) {\n throw globalizeToGriffinError(error);\n }\n\n var datePartMasks = this.datePartMasks;\n\n // loop over partsArray and replace formatted values with masks\n var maskArray = partsArray.map(function(partObj) {\n var type = partObj.type;\n var value = partObj.value;\n\n // preserve literals\n if (type === \"literal\") {\n return partObj;\n }\n\n // if formatted value is not a number (e.g. MMM -> 'Feb'), cannot create mask for it\n if (isNaN(parseInt(value, 10))) {\n throw new Error(\n \"Cannot create mask for \" +\n style +\n \": \" +\n type +\n \" field is not numeric.\"\n );\n }\n\n // load masks for this type ('year', 'month', 'date') based on length of formatted dummy value\n var partMask = datePartMasks[type] && datePartMasks[type][value.length];\n if (!partMask) {\n // throw an error if there's no mask for this type (e.g. 'weekday', 'era', etc.)\n throw new Error(\n \"Cannot create mask for \" +\n style +\n \": \" +\n type +\n \" field has no appropriate mask.\"\n );\n }\n return {\n type: type,\n value: partMask\n };\n });\n\n // if parts is true, return the array of objects\n if (parts) {\n return maskArray;\n }\n\n // otherwise (parts is false), join 'value' properties of objects in array and return string\n return maskArray\n .map(function(partObj) {\n return partObj.value;\n })\n .join(\"\");\n },\n enumerable: true\n});\n\nfunction globalizeToGriffinError(error) {\n if (error.code === \"E_INVALID_OPTIONS\") {\n throw new RangeError(\n \"Invalid `options.style`: `\" + JSON.stringify(error.value) + \"`.\"\n );\n }\n return new Error(\n [\"Oops, internal error\", error.message, error.stack].join(\"\\n\")\n );\n}\n\nmodule.exports = {\n createHandler: function createHandler(metadata) {\n assertType(metadata, \"metadata\", [\"plain object\"]);\n\n var cldr = metadata.cldr;\n assertMetadata(cldr);\n\n // assert existence of datePartMasks in metadata\n assertMetadata(metadata.griffin);\n assertMetadata(metadata.griffin.date);\n assertMetadata(metadata.griffin.date.datePartMasks);\n\n // assert existence of ianaTimeZoneData in metadata\n assertMetadata(metadata.griffin);\n assertMetadata(metadata.griffin.timeZone);\n var countrySupportedTimezones =\n metadata.griffin.timeZone.countrySupportedTimezones;\n assertMetadata(countrySupportedTimezones);\n assertMetadata(countrySupportedTimezones.primaryTimeZone, [\"string\"]);\n assertMetadata(countrySupportedTimezones.timeZones, [\"array\"]);\n var ianaTimeZoneData = metadata.griffin.timeZone.ianaTimeZoneData;\n assertMetadata(ianaTimeZoneData);\n assertMetadata(ianaTimeZoneData.zoneData);\n\n // Assume the only key in 'main' is the locale.\n assertMetadata(cldr.main);\n var griffinLocale = Object.keys(cldr.main)[0];\n assertMetadata(griffinLocale, [\"string\"]);\n\n var handler = new DateHandler();\n\n // save relevant parts of metadata to be used in functions\n definePrivateProperty(\n handler,\n \"dateFields\",\n metadata.cldr.main[griffinLocale].dates.fields\n );\n definePrivateProperty(\n handler,\n \"datePartMasks\",\n metadata.griffin.date.datePartMasks\n );\n definePrivateProperty(\n handler,\n \"primaryTimeZone\",\n countrySupportedTimezones.primaryTimeZone\n );\n definePrivateProperty(\n handler,\n \"timeZones\",\n countrySupportedTimezones.timeZones\n );\n Globalize.load(cldr);\n Globalize.loadTimeZone(ianaTimeZoneData);\n handler.globalize = Globalize(griffinLocale);\n return handler;\n }\n};\n","/**\n * Shared code between Griffin Node.js and Griffin client.\n *\n * Important: Do NOT include anything in here that isn't meant to be part of both libraries.\n */\n\n\"use strict\";\n\nvar PRESETS = {\n DATE_FORMAT_SHORT: \"date-short\",\n DATE_FORMAT_MEDIUM: \"date-medium\",\n DATE_FORMAT_LONG: \"date-long\",\n DATE_FORMAT_FULL: \"date-full\",\n TIME_FORMAT_SHORT: \"time-short\",\n TIME_FORMAT_MEDIUM: \"time-medium\",\n TIME_FORMAT_LONG: \"time-long\",\n TIME_FORMAT_FULL: \"time-full\",\n DATETIME_FORMAT_SHORT: \"datetime-short\",\n DATETIME_FORMAT_MEDIUM: \"datetime-medium\",\n DATETIME_FORMAT_LONG: \"datetime-long\",\n DATETIME_FORMAT_FULL: \"datetime-full\",\n DATE_CREDIT_CARD_EXP: \"raw-MM/yy\" // transforms to { raw: 'MM/yy' }; note that slash is NOT localized (by design)\n};\n\nvar PRESETS_VALUES = Object.keys(PRESETS).map(function(presetKey) {\n return PRESETS[presetKey];\n});\n\nfunction globalizeOptions(options) {\n var aux;\n var globalizeOptions = {};\n\n // options.style == preset?\n if (PRESETS_VALUES.indexOf(options.style) !== -1) {\n // Get the corresponding globalize option date|time|datetime, e.g., 'date' for 'date-short' preset.\n aux = options.style.split(\"-\");\n globalizeOptions[aux[0]] = aux[1];\n\n // options.style == skeleton?\n } else {\n globalizeOptions.skeleton = options.style;\n }\n\n globalizeOptions.timeZone = options.timeZone;\n\n return globalizeOptions;\n}\n\nmodule.exports = {\n PRESETS: PRESETS,\n globalizeOptions: globalizeOptions\n};\n","// @flow\n\n/**\n * Utilities that deal with date, leveraging client-side Griffin 🎉\n */\nimport griffinRelativeTime from 'griffin-paypal/relative-time'\nimport griffinDate from 'griffin-paypal/date'\nimport getGriffinMetadata, { useGriffinMetadata } from './griffin-utils'\nimport { RELATIVE_DATES } from '../constants'\n\n/**\n * Get the supported currency pattern for specific style for the current locale\n * @param {String} style format the date should take - if none provide defaults to m/d/yy\n * @return {String} the formatted date\n */\nexport function formattedDate(style: string, timeZone: string) {\n const date = new Date()\n const options = { timeZone: timeZone, style }\n\n return formatDate(date, options)\n}\n\nexport function formatDate(date: Date, options: Object) {\n const griffinMetadata = getGriffinMetadata()\n const griffinHandler = griffinDate.createHandler(griffinMetadata)\n\n return griffinHandler.formatDate(date, options)\n}\n\nexport function formatDateInputMask(style: string) {\n const griffinMetadata = getGriffinMetadata()\n const griffinHandler = griffinDate.createHandler(griffinMetadata)\n\n const format = {\n EXPIRY: griffinHandler.DATE_CREDIT_CARD_EXP,\n SHORT: griffinHandler.DATE_FORMAT_SHORT,\n FULL: griffinHandler.DATE_FORMAT_FULL,\n }\n\n const mask = format[style] || format.SHORT\n const dateInputMask = griffinHandler\n .dateInputMask({ style: mask })\n .toUpperCase()\n\n return dateInputMask\n}\n\n/**\n * Hook to obtain GRIFFIN date handler\n */\nexport function useGriffinDateHandler() {\n const griffinMetadata = useGriffinMetadata()\n const griffinDateHandler = griffinDate.createHandler(griffinMetadata)\n return griffinDateHandler\n}\n\n/**\n * Hook to obtain GRIFFIN relative time handler\n */\nexport function useGriffinRelativeTimeHandler() {\n const griffinMetadata = useGriffinMetadata()\n const griffinRelativeTimeHandler = griffinRelativeTime.createHandler(\n griffinMetadata\n )\n return griffinRelativeTimeHandler\n}\n\n/**\n * Check if date is Yesterday based on the user's current location time zone,\n * not on the user's preferred time zone.\n */\nexport function isYesterday(date: Date) {\n const yesterday = new Date()\n yesterday.setDate(yesterday.getDate() - 1)\n return (\n date.getDate() === yesterday.getDate() &&\n date.getMonth() === yesterday.getMonth() &&\n date.getFullYear() === yesterday.getFullYear()\n )\n}\n\n/**\n * Check if date is Today based on the user's current location time zone,\n * not on the user's preferred time zone.\n */\nexport function isToday(date: Date) {\n const today = new Date()\n return (\n date.getDate() === today.getDate() &&\n date.getMonth() === today.getMonth() &&\n date.getFullYear() === today.getFullYear()\n )\n}\n\nexport function getCanonicalRelativeDate(date: Date) {\n if (isYesterday(date)) {\n return RELATIVE_DATES.YESTERDAY\n }\n if (isToday(date)) {\n return RELATIVE_DATES.TODAY\n }\n return null\n}\n","/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n/*!\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n\n// Core\nmodule.exports = require( \"./globalize\" );\n\n// Extent core with the following modules\nrequire( \"./globalize/message\" );\nrequire( \"./globalize/number\" );\nrequire( \"./globalize/plural\" );\n\n// Load after globalize/number\nrequire( \"./globalize/currency\" );\nrequire( \"./globalize/date\" );\n\n// Load after globalize/number and globalize/plural\nrequire( \"./globalize/relative-time\" );\nrequire( \"./globalize/unit\" );\n\n","const a = (n, ord) => {\n if (ord) return 'other';\n return n == 1 ? 'one' : 'other';\n};\nconst b = (n, ord) => {\n if (ord) return 'other';\n return (n == 0 || n == 1) ? 'one' : 'other';\n};\nconst c = (n, ord) => {\n if (ord) return 'other';\n return n >= 0 && n <= 1 ? 'one' : 'other';\n};\nconst d = (n, ord) => {\n const s = String(n).split('.'), v0 = !s[1];\n if (ord) return 'other';\n return n == 1 && v0 ? 'one' : 'other';\n};\nconst e = (n, ord) => 'other';\nconst f = (n, ord) => {\n if (ord) return 'other';\n return n == 1 ? 'one'\n : n == 2 ? 'two'\n : 'other';\n};\n\nexport const af = a;\nexport const ak = b;\nexport const am = c;\nexport const an = a;\nexport const ar = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n if (ord) return 'other';\n return n == 0 ? 'zero'\n : n == 1 ? 'one'\n : n == 2 ? 'two'\n : (n100 >= 3 && n100 <= 10) ? 'few'\n : (n100 >= 11 && n100 <= 99) ? 'many'\n : 'other';\n};\nexport const ars = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n if (ord) return 'other';\n return n == 0 ? 'zero'\n : n == 1 ? 'one'\n : n == 2 ? 'two'\n : (n100 >= 3 && n100 <= 10) ? 'few'\n : (n100 >= 11 && n100 <= 99) ? 'many'\n : 'other';\n};\nexport const as = (n, ord) => {\n if (ord) return (n == 1 || n == 5 || n == 7 || n == 8 || n == 9 || n == 10) ? 'one'\n : (n == 2 || n == 3) ? 'two'\n : n == 4 ? 'few'\n : n == 6 ? 'many'\n : 'other';\n return n >= 0 && n <= 1 ? 'one' : 'other';\n};\nexport const asa = a;\nexport const ast = d;\nexport const az = (n, ord) => {\n const s = String(n).split('.'), i = s[0], i10 = i.slice(-1), i100 = i.slice(-2), i1000 = i.slice(-3);\n if (ord) return (i10 == 1 || i10 == 2 || i10 == 5 || i10 == 7 || i10 == 8) || (i100 == 20 || i100 == 50 || i100 == 70 || i100 == 80) ? 'one'\n : (i10 == 3 || i10 == 4) || (i1000 == 100 || i1000 == 200 || i1000 == 300 || i1000 == 400 || i1000 == 500 || i1000 == 600 || i1000 == 700 || i1000 == 800 || i1000 == 900) ? 'few'\n : i == 0 || i10 == 6 || (i100 == 40 || i100 == 60 || i100 == 90) ? 'many'\n : 'other';\n return n == 1 ? 'one' : 'other';\n};\nexport const bal = (n, ord) => n == 1 ? 'one' : 'other';\nexport const be = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n if (ord) return (n10 == 2 || n10 == 3) && n100 != 12 && n100 != 13 ? 'few' : 'other';\n return n10 == 1 && n100 != 11 ? 'one'\n : (n10 >= 2 && n10 <= 4) && (n100 < 12 || n100 > 14) ? 'few'\n : t0 && n10 == 0 || (n10 >= 5 && n10 <= 9) || (n100 >= 11 && n100 <= 14) ? 'many'\n : 'other';\n};\nexport const bem = a;\nexport const bez = a;\nexport const bg = a;\nexport const bho = b;\nexport const bm = e;\nexport const bn = (n, ord) => {\n if (ord) return (n == 1 || n == 5 || n == 7 || n == 8 || n == 9 || n == 10) ? 'one'\n : (n == 2 || n == 3) ? 'two'\n : n == 4 ? 'few'\n : n == 6 ? 'many'\n : 'other';\n return n >= 0 && n <= 1 ? 'one' : 'other';\n};\nexport const bo = e;\nexport const br = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), n1000000 = t0 && s[0].slice(-6);\n if (ord) return 'other';\n return n10 == 1 && n100 != 11 && n100 != 71 && n100 != 91 ? 'one'\n : n10 == 2 && n100 != 12 && n100 != 72 && n100 != 92 ? 'two'\n : ((n10 == 3 || n10 == 4) || n10 == 9) && (n100 < 10 || n100 > 19) && (n100 < 70 || n100 > 79) && (n100 < 90 || n100 > 99) ? 'few'\n : n != 0 && t0 && n1000000 == 0 ? 'many'\n : 'other';\n};\nexport const brx = a;\nexport const bs = (n, ord) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n if (ord) return 'other';\n return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one'\n : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) || (f10 >= 2 && f10 <= 4) && (f100 < 12 || f100 > 14) ? 'few'\n : 'other';\n};\nexport const ca = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n if (ord) return (n == 1 || n == 3) ? 'one'\n : n == 2 ? 'two'\n : n == 4 ? 'few'\n : 'other';\n return n == 1 && v0 ? 'one'\n : i != 0 && i1000000 == 0 && v0 ? 'many'\n : 'other';\n};\nexport const ce = a;\nexport const ceb = (n, ord) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), f10 = f.slice(-1);\n if (ord) return 'other';\n return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n};\nexport const cgg = a;\nexport const chr = a;\nexport const ckb = a;\nexport const cs = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1];\n if (ord) return 'other';\n return n == 1 && v0 ? 'one'\n : (i >= 2 && i <= 4) && v0 ? 'few'\n : !v0 ? 'many'\n : 'other';\n};\nexport const cy = (n, ord) => {\n if (ord) return (n == 0 || n == 7 || n == 8 || n == 9) ? 'zero'\n : n == 1 ? 'one'\n : n == 2 ? 'two'\n : (n == 3 || n == 4) ? 'few'\n : (n == 5 || n == 6) ? 'many'\n : 'other';\n return n == 0 ? 'zero'\n : n == 1 ? 'one'\n : n == 2 ? 'two'\n : n == 3 ? 'few'\n : n == 6 ? 'many'\n : 'other';\n};\nexport const da = (n, ord) => {\n const s = String(n).split('.'), i = s[0], t0 = Number(s[0]) == n;\n if (ord) return 'other';\n return n == 1 || !t0 && (i == 0 || i == 1) ? 'one' : 'other';\n};\nexport const de = d;\nexport const doi = c;\nexport const dsb = (n, ord) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i100 = i.slice(-2), f100 = f.slice(-2);\n if (ord) return 'other';\n return v0 && i100 == 1 || f100 == 1 ? 'one'\n : v0 && i100 == 2 || f100 == 2 ? 'two'\n : v0 && (i100 == 3 || i100 == 4) || (f100 == 3 || f100 == 4) ? 'few'\n : 'other';\n};\nexport const dv = a;\nexport const dz = e;\nexport const ee = a;\nexport const el = a;\nexport const en = (n, ord) => {\n const s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n if (ord) return n10 == 1 && n100 != 11 ? 'one'\n : n10 == 2 && n100 != 12 ? 'two'\n : n10 == 3 && n100 != 13 ? 'few'\n : 'other';\n return n == 1 && v0 ? 'one' : 'other';\n};\nexport const eo = a;\nexport const es = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n if (ord) return 'other';\n return n == 1 ? 'one'\n : i != 0 && i1000000 == 0 && v0 ? 'many'\n : 'other';\n};\nexport const et = d;\nexport const eu = a;\nexport const fa = c;\nexport const ff = (n, ord) => {\n if (ord) return 'other';\n return n >= 0 && n < 2 ? 'one' : 'other';\n};\nexport const fi = d;\nexport const fil = (n, ord) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), f10 = f.slice(-1);\n if (ord) return n == 1 ? 'one' : 'other';\n return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n};\nexport const fo = a;\nexport const fr = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n if (ord) return n == 1 ? 'one' : 'other';\n return n >= 0 && n < 2 ? 'one'\n : i != 0 && i1000000 == 0 && v0 ? 'many'\n : 'other';\n};\nexport const fur = a;\nexport const fy = d;\nexport const ga = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n;\n if (ord) return n == 1 ? 'one' : 'other';\n return n == 1 ? 'one'\n : n == 2 ? 'two'\n : (t0 && n >= 3 && n <= 6) ? 'few'\n : (t0 && n >= 7 && n <= 10) ? 'many'\n : 'other';\n};\nexport const gd = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n;\n if (ord) return (n == 1 || n == 11) ? 'one'\n : (n == 2 || n == 12) ? 'two'\n : (n == 3 || n == 13) ? 'few'\n : 'other';\n return (n == 1 || n == 11) ? 'one'\n : (n == 2 || n == 12) ? 'two'\n : ((t0 && n >= 3 && n <= 10) || (t0 && n >= 13 && n <= 19)) ? 'few'\n : 'other';\n};\nexport const gl = d;\nexport const gsw = a;\nexport const gu = (n, ord) => {\n if (ord) return n == 1 ? 'one'\n : (n == 2 || n == 3) ? 'two'\n : n == 4 ? 'few'\n : n == 6 ? 'many'\n : 'other';\n return n >= 0 && n <= 1 ? 'one' : 'other';\n};\nexport const guw = b;\nexport const gv = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2);\n if (ord) return 'other';\n return v0 && i10 == 1 ? 'one'\n : v0 && i10 == 2 ? 'two'\n : v0 && (i100 == 0 || i100 == 20 || i100 == 40 || i100 == 60 || i100 == 80) ? 'few'\n : !v0 ? 'many'\n : 'other';\n};\nexport const ha = a;\nexport const haw = a;\nexport const he = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1];\n if (ord) return 'other';\n return i == 1 && v0 || i == 0 && !v0 ? 'one'\n : i == 2 && v0 ? 'two'\n : 'other';\n};\nexport const hi = (n, ord) => {\n if (ord) return n == 1 ? 'one'\n : (n == 2 || n == 3) ? 'two'\n : n == 4 ? 'few'\n : n == 6 ? 'many'\n : 'other';\n return n >= 0 && n <= 1 ? 'one' : 'other';\n};\nexport const hnj = e;\nexport const hr = (n, ord) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n if (ord) return 'other';\n return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one'\n : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) || (f10 >= 2 && f10 <= 4) && (f100 < 12 || f100 > 14) ? 'few'\n : 'other';\n};\nexport const hsb = (n, ord) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i100 = i.slice(-2), f100 = f.slice(-2);\n if (ord) return 'other';\n return v0 && i100 == 1 || f100 == 1 ? 'one'\n : v0 && i100 == 2 || f100 == 2 ? 'two'\n : v0 && (i100 == 3 || i100 == 4) || (f100 == 3 || f100 == 4) ? 'few'\n : 'other';\n};\nexport const hu = (n, ord) => {\n if (ord) return (n == 1 || n == 5) ? 'one' : 'other';\n return n == 1 ? 'one' : 'other';\n};\nexport const hy = (n, ord) => {\n if (ord) return n == 1 ? 'one' : 'other';\n return n >= 0 && n < 2 ? 'one' : 'other';\n};\nexport const ia = d;\nexport const id = e;\nexport const ig = e;\nexport const ii = e;\nexport const io = d;\nexport const is = (n, ord) => {\n const s = String(n).split('.'), i = s[0], t = (s[1] || '').replace(/0+$/, ''), t0 = Number(s[0]) == n, i10 = i.slice(-1), i100 = i.slice(-2);\n if (ord) return 'other';\n return t0 && i10 == 1 && i100 != 11 || t % 10 == 1 && t % 100 != 11 ? 'one' : 'other';\n};\nexport const it = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n if (ord) return (n == 11 || n == 8 || n == 80 || n == 800) ? 'many' : 'other';\n return n == 1 && v0 ? 'one'\n : i != 0 && i1000000 == 0 && v0 ? 'many'\n : 'other';\n};\nexport const iu = f;\nexport const ja = e;\nexport const jbo = e;\nexport const jgo = a;\nexport const jmc = a;\nexport const jv = e;\nexport const jw = e;\nexport const ka = (n, ord) => {\n const s = String(n).split('.'), i = s[0], i100 = i.slice(-2);\n if (ord) return i == 1 ? 'one'\n : i == 0 || ((i100 >= 2 && i100 <= 20) || i100 == 40 || i100 == 60 || i100 == 80) ? 'many'\n : 'other';\n return n == 1 ? 'one' : 'other';\n};\nexport const kab = (n, ord) => {\n if (ord) return 'other';\n return n >= 0 && n < 2 ? 'one' : 'other';\n};\nexport const kaj = a;\nexport const kcg = a;\nexport const kde = e;\nexport const kea = e;\nexport const kk = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1);\n if (ord) return n10 == 6 || n10 == 9 || t0 && n10 == 0 && n != 0 ? 'many' : 'other';\n return n == 1 ? 'one' : 'other';\n};\nexport const kkj = a;\nexport const kl = a;\nexport const km = e;\nexport const kn = c;\nexport const ko = e;\nexport const ks = a;\nexport const ksb = a;\nexport const ksh = (n, ord) => {\n if (ord) return 'other';\n return n == 0 ? 'zero'\n : n == 1 ? 'one'\n : 'other';\n};\nexport const ku = a;\nexport const kw = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2), n1000 = t0 && s[0].slice(-3), n100000 = t0 && s[0].slice(-5), n1000000 = t0 && s[0].slice(-6);\n if (ord) return (t0 && n >= 1 && n <= 4) || ((n100 >= 1 && n100 <= 4) || (n100 >= 21 && n100 <= 24) || (n100 >= 41 && n100 <= 44) || (n100 >= 61 && n100 <= 64) || (n100 >= 81 && n100 <= 84)) ? 'one'\n : n == 5 || n100 == 5 ? 'many'\n : 'other';\n return n == 0 ? 'zero'\n : n == 1 ? 'one'\n : (n100 == 2 || n100 == 22 || n100 == 42 || n100 == 62 || n100 == 82) || t0 && n1000 == 0 && ((n100000 >= 1000 && n100000 <= 20000) || n100000 == 40000 || n100000 == 60000 || n100000 == 80000) || n != 0 && n1000000 == 100000 ? 'two'\n : (n100 == 3 || n100 == 23 || n100 == 43 || n100 == 63 || n100 == 83) ? 'few'\n : n != 1 && (n100 == 1 || n100 == 21 || n100 == 41 || n100 == 61 || n100 == 81) ? 'many'\n : 'other';\n};\nexport const ky = a;\nexport const lag = (n, ord) => {\n const s = String(n).split('.'), i = s[0];\n if (ord) return 'other';\n return n == 0 ? 'zero'\n : (i == 0 || i == 1) && n != 0 ? 'one'\n : 'other';\n};\nexport const lb = a;\nexport const lg = a;\nexport const lij = (n, ord) => {\n const s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n;\n if (ord) return (n == 11 || n == 8 || (t0 && n >= 80 && n <= 89) || (t0 && n >= 800 && n <= 899)) ? 'many' : 'other';\n return n == 1 && v0 ? 'one' : 'other';\n};\nexport const lkt = e;\nexport const ln = b;\nexport const lo = (n, ord) => {\n if (ord) return n == 1 ? 'one' : 'other';\n return 'other';\n};\nexport const lt = (n, ord) => {\n const s = String(n).split('.'), f = s[1] || '', t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n if (ord) return 'other';\n return n10 == 1 && (n100 < 11 || n100 > 19) ? 'one'\n : (n10 >= 2 && n10 <= 9) && (n100 < 11 || n100 > 19) ? 'few'\n : f != 0 ? 'many'\n : 'other';\n};\nexport const lv = (n, ord) => {\n const s = String(n).split('.'), f = s[1] || '', v = f.length, t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), f100 = f.slice(-2), f10 = f.slice(-1);\n if (ord) return 'other';\n return t0 && n10 == 0 || (n100 >= 11 && n100 <= 19) || v == 2 && (f100 >= 11 && f100 <= 19) ? 'zero'\n : n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11 || v != 2 && f10 == 1 ? 'one'\n : 'other';\n};\nexport const mas = a;\nexport const mg = b;\nexport const mgo = a;\nexport const mk = (n, ord) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n if (ord) return i10 == 1 && i100 != 11 ? 'one'\n : i10 == 2 && i100 != 12 ? 'two'\n : (i10 == 7 || i10 == 8) && i100 != 17 && i100 != 18 ? 'many'\n : 'other';\n return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one' : 'other';\n};\nexport const ml = a;\nexport const mn = a;\nexport const mo = (n, ord) => {\n const s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n if (ord) return n == 1 ? 'one' : 'other';\n return n == 1 && v0 ? 'one'\n : !v0 || n == 0 || n != 1 && (n100 >= 1 && n100 <= 19) ? 'few'\n : 'other';\n};\nexport const mr = (n, ord) => {\n if (ord) return n == 1 ? 'one'\n : (n == 2 || n == 3) ? 'two'\n : n == 4 ? 'few'\n : 'other';\n return n == 1 ? 'one' : 'other';\n};\nexport const ms = (n, ord) => {\n if (ord) return n == 1 ? 'one' : 'other';\n return 'other';\n};\nexport const mt = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n if (ord) return 'other';\n return n == 1 ? 'one'\n : n == 2 ? 'two'\n : n == 0 || (n100 >= 3 && n100 <= 10) ? 'few'\n : (n100 >= 11 && n100 <= 19) ? 'many'\n : 'other';\n};\nexport const my = e;\nexport const nah = a;\nexport const naq = f;\nexport const nb = a;\nexport const nd = a;\nexport const ne = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n;\n if (ord) return (t0 && n >= 1 && n <= 4) ? 'one' : 'other';\n return n == 1 ? 'one' : 'other';\n};\nexport const nl = d;\nexport const nn = a;\nexport const nnh = a;\nexport const no = a;\nexport const nqo = e;\nexport const nr = a;\nexport const nso = b;\nexport const ny = a;\nexport const nyn = a;\nexport const om = a;\nexport const or = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n;\n if (ord) return (n == 1 || n == 5 || (t0 && n >= 7 && n <= 9)) ? 'one'\n : (n == 2 || n == 3) ? 'two'\n : n == 4 ? 'few'\n : n == 6 ? 'many'\n : 'other';\n return n == 1 ? 'one' : 'other';\n};\nexport const os = a;\nexport const osa = e;\nexport const pa = b;\nexport const pap = a;\nexport const pcm = c;\nexport const pl = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2);\n if (ord) return 'other';\n return n == 1 && v0 ? 'one'\n : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) ? 'few'\n : v0 && i != 1 && (i10 == 0 || i10 == 1) || v0 && (i10 >= 5 && i10 <= 9) || v0 && (i100 >= 12 && i100 <= 14) ? 'many'\n : 'other';\n};\nexport const prg = (n, ord) => {\n const s = String(n).split('.'), f = s[1] || '', v = f.length, t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), f100 = f.slice(-2), f10 = f.slice(-1);\n if (ord) return 'other';\n return t0 && n10 == 0 || (n100 >= 11 && n100 <= 19) || v == 2 && (f100 >= 11 && f100 <= 19) ? 'zero'\n : n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11 || v != 2 && f10 == 1 ? 'one'\n : 'other';\n};\nexport const ps = a;\nexport const pt = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n if (ord) return 'other';\n return (i == 0 || i == 1) ? 'one'\n : i != 0 && i1000000 == 0 && v0 ? 'many'\n : 'other';\n};\nexport const pt_PT = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n if (ord) return 'other';\n return n == 1 && v0 ? 'one'\n : i != 0 && i1000000 == 0 && v0 ? 'many'\n : 'other';\n};\nexport const rm = a;\nexport const ro = (n, ord) => {\n const s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n if (ord) return n == 1 ? 'one' : 'other';\n return n == 1 && v0 ? 'one'\n : !v0 || n == 0 || n != 1 && (n100 >= 1 && n100 <= 19) ? 'few'\n : 'other';\n};\nexport const rof = a;\nexport const ru = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2);\n if (ord) return 'other';\n return v0 && i10 == 1 && i100 != 11 ? 'one'\n : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) ? 'few'\n : v0 && i10 == 0 || v0 && (i10 >= 5 && i10 <= 9) || v0 && (i100 >= 11 && i100 <= 14) ? 'many'\n : 'other';\n};\nexport const rwk = a;\nexport const sah = e;\nexport const saq = a;\nexport const sat = f;\nexport const sc = (n, ord) => {\n const s = String(n).split('.'), v0 = !s[1];\n if (ord) return (n == 11 || n == 8 || n == 80 || n == 800) ? 'many' : 'other';\n return n == 1 && v0 ? 'one' : 'other';\n};\nexport const scn = (n, ord) => {\n const s = String(n).split('.'), v0 = !s[1];\n if (ord) return (n == 11 || n == 8 || n == 80 || n == 800) ? 'many' : 'other';\n return n == 1 && v0 ? 'one' : 'other';\n};\nexport const sd = a;\nexport const sdh = a;\nexport const se = f;\nexport const seh = a;\nexport const ses = e;\nexport const sg = e;\nexport const sh = (n, ord) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n if (ord) return 'other';\n return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one'\n : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) || (f10 >= 2 && f10 <= 4) && (f100 < 12 || f100 > 14) ? 'few'\n : 'other';\n};\nexport const shi = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n;\n if (ord) return 'other';\n return n >= 0 && n <= 1 ? 'one'\n : (t0 && n >= 2 && n <= 10) ? 'few'\n : 'other';\n};\nexport const si = (n, ord) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '';\n if (ord) return 'other';\n return (n == 0 || n == 1) || i == 0 && f == 1 ? 'one' : 'other';\n};\nexport const sk = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1];\n if (ord) return 'other';\n return n == 1 && v0 ? 'one'\n : (i >= 2 && i <= 4) && v0 ? 'few'\n : !v0 ? 'many'\n : 'other';\n};\nexport const sl = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i100 = i.slice(-2);\n if (ord) return 'other';\n return v0 && i100 == 1 ? 'one'\n : v0 && i100 == 2 ? 'two'\n : v0 && (i100 == 3 || i100 == 4) || !v0 ? 'few'\n : 'other';\n};\nexport const sma = f;\nexport const smi = f;\nexport const smj = f;\nexport const smn = f;\nexport const sms = f;\nexport const sn = a;\nexport const so = a;\nexport const sq = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n if (ord) return n == 1 ? 'one'\n : n10 == 4 && n100 != 14 ? 'many'\n : 'other';\n return n == 1 ? 'one' : 'other';\n};\nexport const sr = (n, ord) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n if (ord) return 'other';\n return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one'\n : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) || (f10 >= 2 && f10 <= 4) && (f100 < 12 || f100 > 14) ? 'few'\n : 'other';\n};\nexport const ss = a;\nexport const ssy = a;\nexport const st = a;\nexport const su = e;\nexport const sv = (n, ord) => {\n const s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n if (ord) return (n10 == 1 || n10 == 2) && n100 != 11 && n100 != 12 ? 'one' : 'other';\n return n == 1 && v0 ? 'one' : 'other';\n};\nexport const sw = d;\nexport const syr = a;\nexport const ta = a;\nexport const te = a;\nexport const teo = a;\nexport const th = e;\nexport const ti = b;\nexport const tig = a;\nexport const tk = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1);\n if (ord) return (n10 == 6 || n10 == 9) || n == 10 ? 'few' : 'other';\n return n == 1 ? 'one' : 'other';\n};\nexport const tl = (n, ord) => {\n const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), f10 = f.slice(-1);\n if (ord) return n == 1 ? 'one' : 'other';\n return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n};\nexport const tn = a;\nexport const to = e;\nexport const tpi = e;\nexport const tr = a;\nexport const ts = a;\nexport const tzm = (n, ord) => {\n const s = String(n).split('.'), t0 = Number(s[0]) == n;\n if (ord) return 'other';\n return (n == 0 || n == 1) || (t0 && n >= 11 && n <= 99) ? 'one' : 'other';\n};\nexport const ug = a;\nexport const uk = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), i10 = i.slice(-1), i100 = i.slice(-2);\n if (ord) return n10 == 3 && n100 != 13 ? 'few' : 'other';\n return v0 && i10 == 1 && i100 != 11 ? 'one'\n : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) ? 'few'\n : v0 && i10 == 0 || v0 && (i10 >= 5 && i10 <= 9) || v0 && (i100 >= 11 && i100 <= 14) ? 'many'\n : 'other';\n};\nexport const und = e;\nexport const ur = d;\nexport const uz = a;\nexport const ve = a;\nexport const vec = (n, ord) => {\n const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n if (ord) return (n == 11 || n == 8 || n == 80 || n == 800) ? 'many' : 'other';\n return n == 1 && v0 ? 'one'\n : i != 0 && i1000000 == 0 && v0 ? 'many'\n : 'other';\n};\nexport const vi = (n, ord) => {\n if (ord) return n == 1 ? 'one' : 'other';\n return 'other';\n};\nexport const vo = a;\nexport const vun = a;\nexport const wa = b;\nexport const wae = a;\nexport const wo = e;\nexport const xh = a;\nexport const xog = a;\nexport const yi = d;\nexport const yo = e;\nexport const yue = e;\nexport const zh = e;\nexport const zu = c;\n","/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n\"use strict\";\n\n/**\n * Globalize v1.7.0\n *\n * https://github.com/globalizejs/globalize\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-08-02T11:53Z\n */\n/*!\n * Globalize v1.7.0 2021-08-02T11:53Z Released under the MIT license\n * http://git.io/TrdQbw\n */\n(function(root, factory) {\n if (typeof exports === \"object\") {\n // Node, CommonJS\n module.exports = factory(\n require(\"cldrjs\"),\n require(\"globalize\"),\n require(\"make-plural\")\n );\n } else {\n // Global\n factory(root.Cldr, root.Globalize);\n }\n})(this, function(Cldr, Globalize) {\n var runtimeBind = Globalize._runtimeBind,\n validateCldr = Globalize._validateCldr,\n validateDefaultLocale = Globalize._validateDefaultLocale,\n validateParameterPresence = Globalize._validateParameterPresence,\n validateParameterType = Globalize._validateParameterType,\n validateParameterTypePlainObject =\n Globalize._validateParameterTypePlainObject;\n var MakePlural = require(\"make-plural\");\n\n var validateParameterTypeNumber = function(value, name) {\n validateParameterType(\n value,\n name,\n value === undefined || typeof value === \"number\",\n \"Number\"\n );\n };\n\n var validateParameterTypePluralType = function(value, name) {\n validateParameterType(\n value,\n name,\n value === undefined || value === \"cardinal\" || value === \"ordinal\",\n 'String \"cardinal\" or \"ordinal\"'\n );\n };\n\n var pluralGeneratorFn = function(plural, isOrdinal) {\n return function pluralGenerator(value) {\n validateParameterPresence(value, \"value\");\n validateParameterTypeNumber(value, \"value\");\n return plural(value, isOrdinal);\n };\n };\n\n /**\n * .plural( value )\n *\n * @value [Number]\n *\n * Return the corresponding form (zero | one | two | few | many | other) of a\n * value given locale.\n */\n Globalize.plural = Globalize.prototype.plural = function(value, options) {\n validateParameterPresence(value, \"value\");\n validateParameterTypeNumber(value, \"value\");\n return this.pluralGenerator(options)(value);\n };\n\n /**\n * .pluralGenerator( [options] )\n *\n * Return a plural function (of the form below).\n *\n * fn( value )\n *\n * @value [Number]\n *\n * Return the corresponding form (zero | one | two | few | many | other) of a value given the\n * default/instance locale.\n */\n Globalize.pluralGenerator = Globalize.prototype.pluralGenerator = function(\n options\n ) {\n var args, cldr, isOrdinal, plural, returnFn, type;\n\n validateParameterTypePlainObject(options, \"options\");\n\n options = options || {};\n cldr = this.cldr;\n\n args = [options];\n type = options.type || \"cardinal\";\n\n validateParameterTypePluralType(options.type, \"options.type\");\n\n validateDefaultLocale(cldr);\n\n isOrdinal = type === \"ordinal\";\n\n cldr.on(\"get\", validateCldr);\n try {\n cldr.supplemental([\"plurals-type-\" + type, \"{language}\"]);\n } finally {\n cldr.off(\"get\", validateCldr);\n }\n\n plural = MakePlural[cldr.attributes.language];\n\n returnFn = pluralGeneratorFn(plural, isOrdinal);\n\n runtimeBind(args, cldr, returnFn, [plural]);\n\n return returnFn;\n };\n\n return Globalize;\n});\n\n"],"sourceRoot":""}